2012-07-07 12 views
30

のStructの配列を爆発し、これは上記の卓上私は以下の出力を得ることができますどのような方法があります。これは、ハイブ以下の表</p> <pre><code>CREATE EXTERNAL TABLE IF NOT EXISTS SampleTable ( USER_ID BIGINT, NEW_ITEM ARRAY<STRUCT<PRODUCT_ID: BIGINT,TIMESTAMPS:STRING>> ) </code></pre> <p>あるハイブ

1015826235  [{"product_id":220003038067,"timestamps":"1340321132000"},{"product_id":300003861266,"timestamps":"1340271857000"}] 

のデータであります配列を爆発させた後のHiveQLから?私は上記の形式で出力を得るために、このクエリを書きましたが、それは私が望んでいたように、私に結果を与えていない

を更新しました

**USER_ID** | **PRODUCT_ID** | **TIMESTAMPS** 
------------+------------------+---------------- 
1015826235  220003038067  1340321132000 
1015826235  300003861266  1340271857000 

SELECT myTable1.myCol1,myTable2.myCol2 FROM sampletable st LATERAL VIEW 
explode(st.purchased_item.product_id) myTable1 AS myCol1 LATERAL VIEW 
explode(st.purchased_item.timestamps) myTable2 AS myCol2; 

私は何をしているのですか?どんな提案も感謝します。

+0

どうやってこのようなことができますか? SampleTableを側面図prod_and_tsとして爆発(NEW_ITEM)exploded_tableから をタイムスタンプとして USER_ID、PRODUCT_IDとして prod_and_ts.product_id、 prod_and_ts.timestampsを選択 。 –

+0

@マーク、感謝の印、それは働いた、私はそれを受け入れることができるように答えとして投稿することができます。そして、あなたもこのSOの質問に見てみてください。 [http://stackoverflow.com/questions/11336950/joining-two-tables-in-hive-using-hiveqlhadoop](http://stackoverflow.com/questions/11336950/joining-two-tables-in-hive- hiveqlhadoopを使用して)。まだ誰もこの質問に答えていない。それは私にとって大きな助けになるでしょう。御時間ありがとうございます。 – ferhan

+0

喜んで助けました。答えを投稿してください。すぐに別の質問を見てみましょう! –

答えて

63

爆発は、一度だけ(LATERAL VIEWと組み合わせて)行う必要があります。展開した後は、structの型になる新しい列(私の例ではprod_and_tsと呼ばれます)を使用することができます。次に、この新しい構造体列のproduct_idおよびtimestampsメンバーを解決して、目的の結果を取得できます。

SELECT 
    user_id, 
    prod_and_ts.product_id as product_id, 
    prod_and_ts.timestamps as timestamps 
FROM 
    SampleTable 
    LATERAL VIEW explode(new_item) exploded_table as prod_and_ts; 
+0

の配列を作成する手助けができれば、本当に変わるでしょう。また、私が掲載したもう1つの質問は、パフォーマンス測定に関連する理論的な質問のようです。[http://stackoverflow.com/questions/11404163 /custom-mapper-and-reducer-vs-hiveql](http://stackoverflow.com/questions/11404163/custom-mapper-and-reducer-vs-hiveql)。私はあなたと同じくらいあなたを悩ましている場合は謝ります、そこにはBIG DATAの専門家はあまりいません。それが私があなたにpingしている理由です。本当にありがとうございました。 – ferhan

+0

こんにちは、すべてのお手伝いをありがとうございました。私はHiveにStructのExploration Arrayに関連する同様の質問を掲載しましたが、今回のデータはいくつか異なっています。それが可能かどうか見てみてください。 [http://stackoverflow.com/questions/11550651/exploding-array-of-struct-using-hiveql](http://stackoverflow.com/questions/11550651/exploding-array-of-struct-using-hiveql) – ferhan

+0

こんにちはマーク、どのようにして複数の配列>列のビューを展開して作成できますか?私のリクエストで助けてくれますか?http://stackoverflow.com/questions/37282646/how-to-create-view-for-struct-fields-in-hive –

10

ハイブ0.10以降では、inline(ARRAY<STRUCT[,STRUCT]>)を使用することもできます。構造体の配列をテーブルに分解します。

+0

これは有用な答えですが、質問に完全には答えていません。この方法では、トップレベルのフィールド、つまり「USER_ID」は結果に含まれません。 – jkukul

関連する問題

 関連する問題