tutorial que espaƱol drop and hadoop mapreduce hive hiveql

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.