ハイブには、SAPシステムからのデータが入っているテーブルが1つあります。以下に示すように、このテーブルは列とデータを持っている。上記のようにハイブ1つの列に基づく自己結合
+======================================================================+
|document_number | year | cost_centre | vendor_account_number | amount |
+----------------------------------------------------------------------+
| 1 | 2016 | XZ10 | | 123.5 |
+----------------------------------------------------------------------+
| 1 | 2016 | XZ10 | 1234567890 | 25.96 |
+----------------------------------------------------------------------+
| 1 | 2016 | XZ10 | | 586 |
+----------------------------------------------------------------------+
、vendor_account_number
列の値は、1行中に存在し、私は、行のすべての残りの部分にそれをもたらすたいです。次のように
期待出力は次のとおりです。
+======================================================================+
|document_number | year | cost_centre | vendor_account_number | amount |
+----------------------------------------------------------------------+
| 1 | 2016 | XZ10 | 1234567890 | 123.5 |
+----------------------------------------------------------------------+
| 1 | 2016 | XZ10 | 1234567890 | 25.96 |
+----------------------------------------------------------------------+
| 1 | 2016 | XZ10 | 1234567890 | 586 |
+----------------------------------------------------------------------+
これを実現するために、私はハイブ
にCTE次with non_blank_account_no as(
select document_number, vendor_account_number
from my_table
where vendor_account_number != ''
)
を書き、次のように外側の左自己が参加しました:
select
a.document_number, a.year,
a.cost_centre, a.amount,
b.vendor_account_number
from my_table a
left outer join non_blank_account_no b on a.document_number = b.document_number
where a.document_number = ' '
を
しかし、以下に示すように出力が重複しています
+======================================================================+
|document_number | year | cost_centre | vendor_account_number | amount |
+----------------------------------------------------------------------+
| 1 | 2016 | XZ10 | 1234567890 | 123.5 |
+----------------------------------------------------------------------+
| 1 | 2016 | XZ10 | 1234567890 | 25.96 |
+----------------------------------------------------------------------+
| 1 | 2016 | XZ10 | 1234567890 | 586 |
+----------------------------------------------------------------------+
| 1 | 2016 | XZ10 | 1234567890 | 123.5 |
+----------------------------------------------------------------------+
| 1 | 2016 | XZ10 | 1234567890 | 25.96 |
+----------------------------------------------------------------------+
| 1 | 2016 | XZ10 | 1234567890 | 586 |
+----------------------------------------------------------------------+
誰でも、私のHiveクエリーに何が間違っているのか理解してもらえますか?
あなたのCTEの出力は何ですか? 1行だけですか? – Andrew
@Andrew、はいCTEはvendor_account_numberがnullでない行を1つだけ選択することになっています – Shekhar
1行しか持たないとわかっていますが、実際にはどれくらいの数の問題がありますか?確かにあなたはクロス・ジョインを得ているようです。 – Andrew