これは以下のハイブテーブルです
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;
誰が私が間違っているのを手伝ってくれますか?任意の提案をいただければ幸いです。
爆発する必要があるのは1回だけです(LATERAL VIEWと組み合わせて)。爆発した後、構造型の新しい列(この例ではprod_and_tsと呼ばれる)を使用できます。次に、この新しいstruct列の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;
Hive 0.10以降を使用している場合は、inline(ARRAY<STRUCT[,STRUCT]>)
も使用できます。構造体の配列をテーブルに展開します。