2017-01-05 4 views
1

私はハイブを初めて使っているので、SQLの知識はちょっと錆びています。ハイブ:不足している列を入力してください

1つの列の値が欠落している1つのSAPテーブルのデータがあります。私はそれらの列をどのように配置することができるか知りたい。

例:上記の表に

+----------+-----------+--------+ 
| EBELN | BELNR  | EBELP | 
|----------+-----------+--------| 
| 1  | 123  | 001 | 
|----------+-----------+--------| 
|   | 123  | 002 | 
|----------+-----------+--------| 
|   | 123  | 003 | 
+----------+-----------+--------+ 

、3つのすべての行が相互に関連しているが、EBELN列の値は、最初の行のみに存在しています。

EBELN列を結合キーとして使用してこのテーブルを他のテーブルに結合すると、最初の行のみが結合に表示されます。出力結合の3つの行をすべて取り込みたいとします。

Expected output: 
    +----------+-----------+--------+ 
    | EBELN | BELNR  | EBELP | 
    |----------+-----------+--------| 
    | 1  | 123  | 001 | 
    |----------+-----------+--------| 
    | 1  | 123  | 002 | 
    |----------+-----------+--------| 
    | 1  | 123  | 003 | 
    +----------+-----------+--------+ 

私はEBELN列を使用することにより、他のテーブルで、このテーブルに参加できるように、出力は次のようなものであることを期待しています。

私が参加しているテーブルにはBELNRまたはEBELPカラムが含まれていないため、これらのカラムを結合に使用することはできません。

私がself joinを使用できるかどうか、または私がここで使用できる他のものがあるかどうかを知りたいと思います。


さらに詳しい情報を追加してください。私は他のテーブルを "ABCD"と呼ぶことができます。そのテーブルのカラムはEBELNです。

+----------+-----------+--------+ 
    | EBELN | COL12 | COL13 | 
    |----------+-----------+--------| 
    | 1  | ABC  | LMN | 
    |----------+-----------+--------| 
    | 2  | DEF  | OPQ | 
    |----------+-----------+--------| 
    | 3  | GHI  | RST | 
    +----------+-----------+--------+ 

私はEBELNカラムを使用して「EKPF」テーブルで、この「ABCD」のテーブルに参加しようとしていました。

BELNRの数字は同じですが、テーブルにはBELNRの列がないので、私は参加できません。

最終参加出力は、あなたの出力を達成するためにConditional Functions機能のいずれかを使用することができます。ハイブから

+----------+-----------+--------+--------+--------+ 
    | EBELN | BELNR  | EBELP | COL12 | COL13 | 
    |----------+-----------+--------+--------+--------| 
    | 1  | 123  | 001 | ABC | LMN | 
    |----------+-----------+--------+--------+--------| 
    |   | 123  | 002 | ABC | LMN | 
    |----------+-----------+--------+--------+--------| 
    |   | 123  | 003 | ABC | LMN | 
    |----------+-----------+--------+--------+--------| 
    | 2  |   |  | DEF | OPQ | 
    |----------+-----------+--------+--------+--------| 
    | 3  |   |  | GHI | RST | 
    +----------+-----------+--------+--------+--------+ 
+0

どのように関係していますか?ベルン柱で? EBELN列の計算方法 – leftjoin

+0

EBELN計算に自己結合または他の方法を使用できますが、最初にルールを定義する必要があります。 – leftjoin

+0

こんにちは、貴重な時間をありがとう。私は何をしようとしているかを反映するために質問の詳細を更新しました。 – Shekhar

答えて

0

のようになります。以降、あなたが最初に(LEFT)テーブルからすべてのレコードのためにNVL関数

SELECT NVL(EBELN, 1) AS EBELN, BELNR,EBELP FROM your_table; 
0

したい場合に使用することができますハイブ0.11からまた

SELECT COALESCE(EBELN, 1L) AS EBELN, BELNR,EBELP FROM your_table; 

は単純に、この使用している場合COALSCEを行います結果に対応するレコードを生成します.2番目の(RIGHT)テーブルに一致がない場合でも、LEFTを使用して結合します。逆の場合は、RIGHTを使用します。結合の両側からレコードを保持したいので、FULL OUTERが必要です。

SELECT COALESCE(t1.EBELN, t2.EBELN), t1.BELNR, t1.EBELP , 
     t2.COL12, t2.COL13 
    FROM EKPF t1 
    FULL OUTER JOIN ABCD t2 ON t1.EBELN = t2.EBELN 

COALESCEはこちら(あなたの例のように)あなたが読み込ま結合列を持つことになりますが保証されます。

出力は次のようになります。行は

+----------+-----------+--------+--------+--------+ 
| EBELN | BELNR  | EBELP | COL12 | COL13 | 
|----------+-----------+--------+--------+--------| 
| 1  | 123  | 001 | ABC | LMN | 
|----------+-----------+--------+--------+--------| 
|   | 123  | 002 | ABC | LMN | 
|----------+-----------+--------+--------+--------| 
|   | 123  | 003 | ABC | LMN | 
|----------+-----------+--------+--------+--------| 
| 2  |   |  | DEF | OPQ | 
|----------+-----------+--------+--------+--------| 
| 3  |   |  | GHI | RST | 
+----------+-----------+--------+--------+--------+ 
関連する問題