44

これは以下のハイブテーブルです

CREATE EXTERNAL TABLE IF NOT EXISTS SampleTable
(
USER_ID BIGINT,
NEW_ITEM ARRAY<STRUCT<PRODUCT_ID: BIGINT,TIMESTAMPS:STRING>>
)

そしてこれは上の表のデータです-

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;

誰かが私がしている間違ったことを助けてくれますか?任意の提案をいただければ幸いです。

4

3 に答える 3

84

爆発する必要があるのは1回だけです(LATERAL VIEWと組み合わせて)。分解した後、構造体タイプの新しい列(私の例では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;
于 2012-07-09T12:56:01.187 に答える
11

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

于 2014-06-26T22:46:40.737 に答える
0

次の方法でアレイを分解できます。

select USER_ID,items from Sample_Table lateral view explode(NEW_ITEM) temp_table as items;
于 2021-05-22T17:46:05.430 に答える