2017-10-10 1 views
0

2つのテーブルを列ごとに配列に残す必要があります。ハイブ、配列内のアイテムごとに2つのテーブルを結合する

表1モデル:

  • 構造ID - ストリング
  • IPS - 文字列の配列

表2モデル:

  • IP - ストリング
  • ホスト - 文字列
  • (存在する場合)

    第二のテーブルに対応するIPを有する第1表の配列からのすべてのIPに必要

    ID、IPアドレス、ホスト名:

Iが望む結果がフォーマットであります一致させる。

私はどのように起動するかわかりませんが、アイデアやリファレンスは大歓迎です。

+0

あなたの質問に人々が参加するには、いくつかのデータ例があるテーブルのモデルが必要です。 – DanteTheSmith

+0

テーブル1:構造体ID - 文字列、ips - 文字列の配列。表2:ip-string、hostname-string結果は次のとおりです:id、ips、hostname(存在する場合) – user8753324

+0

あなたの質問に少し編集を加えました。承認されれば、より簡潔で読みやすくなって以来、人々にあなたに答えを与えてくれることを願っています。 – DanteTheSmith

答えて

0

2番目のテーブルでexplodeオプションを使用して、次のように結合を実行できます。

は、文字列名の配列とテーブル2持っている

表のtable_1 CREATE(id文字列は、IPSの配列)の名前でのtable_1を考えてみましょう。 CREATE TABLE table_2(IP文字列、ホスト名int);

次に、explode udfを使用してtable_1に側面図を作成できます。

select id、ip from table_1 LATERAL VIEW explode(ips)ep AS ip;

これは、配列の各値に対して1行を複数の行に分解します。詳細についてはLateral view documentationをお読みください。

最後の結合クエリは次のようになります。

SELECT t1.id,t1.ip, t2.hostname 
FROM 
(select id,ip from table_1 LATERAL VIEW explode(ips) ep AS ip) AS t1 
LEFT JOIN table_2 AS t2 
ON (t2.ip=t1.ip); 
+0

上記の解決策があなたの問題を解決しましたか? –

関連する問題