Voici le tableau ci-dessous
CREATE EXTERNAL TABLE IF NOT EXISTS SampleTable
(
USER_ID BIGINT,
NEW_ITEM ARRAY<STRUCT<PRODUCT_ID: BIGINT,TIMESTAMPS:STRING>>
)
Et ce sont les données du tableau ci-dessus-
1015826235 [{"product_id":220003038067,"timestamps":"1340321132000"},{"product_id":300003861266,"timestamps":"1340271857000"}]
Existe-t-il un moyen d'obtenir la sortie ci-dessous du HiveQL après avoir éclaté le tableau?
**USER_ID** | **PRODUCT_ID** | **TIMESTAMPS**
------------+------------------+----------------
1015826235 220003038067 1340321132000
1015826235 300003861266 1340271857000
mis à jour
J'ai écrit cette requête pour obtenir la sortie dans le format ci-dessus, mais elle ne me donne pas le résultat comme je le voulais.
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;
Quelqu'un peut-il m'aider sur le mal que je fais? Toute suggestion sera appréciée.
Vous devez exploser une seule fois (en conjonction avec LATERAL VIEW). Après avoir explosé, vous pouvez utiliser une nouvelle colonne (appelée prod_and_ts dans mon exemple) qui sera de type struct. Ensuite, vous pouvez résoudre les membres product_id et timestamps de cette nouvelle colonne struct pour récupérer le résultat souhaité.
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;
Si vous utilisez Hive 0.10 ou une version ultérieure, vous pouvez également utiliser inline(ARRAY<STRUCT[,STRUCT]>)
. Il explose un tableau de structures dans une table.