hadoop - que - Explotar la matriz de Struct en Hive
install hive (2)
Debe explotar solo una vez (junto con LATERAL VIEW). Después de la explosión, puede usar una nueva columna (llamada prod_and_ts en mi ejemplo) que será de tipo struct. Luego, puede resolver los miembros product_id y timestamps de esta nueva columna struct para recuperar el resultado deseado.
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;
Esta es la tabla debajo de Hive
CREATE EXTERNAL TABLE IF NOT EXISTS SampleTable
(
USER_ID BIGINT,
NEW_ITEM ARRAY<STRUCT<PRODUCT_ID: BIGINT,TIMESTAMPS:STRING>>
)
Y estos son los datos en la tabla anterior-
1015826235 [{"product_id":220003038067,"timestamps":"1340321132000"},{"product_id":300003861266,"timestamps":"1340271857000"}]
¿Hay alguna forma de que pueda obtener la salida siguiente de HiveQL después de explotar la matriz?
**USER_ID** | **PRODUCT_ID** | **TIMESTAMPS**
------------+------------------+----------------
1015826235 220003038067 1340321132000
1015826235 300003861266 1340271857000
Actualizado
Escribí esta consulta para obtener el resultado en el formato anterior, pero no me da el resultado de la manera que quería.
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;
¿Alguien puede ayudarme? ¿Qué mal estoy haciendo? Cualquier sugerencia será apreciada.
Si está en Hive 0.10 o posterior, también puede usar inline(ARRAY<STRUCT[,STRUCT]>)
. Explota una serie de estructuras en una tabla.