Explota la matriz de Struct en la colmena


Esta es la siguiente Tabla de Colmenas

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 manera de que pueda obtener la siguiente salida del HiveQL después de explotar la matriz?

**USER_ID**  |  **PRODUCT_ID**  |   **TIMESTAMPS**
 ------------+------------------+----------------
1015826235      220003038067       1340321132000
1015826235      300003861266       1340271857000

Actualizado

Escribí esta consulta para obtener la salida en el formato anterior, pero no me está dando 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;

¿Puede alguien ayudarme qué mal estoy haciendo? Cualquier sugerencia será apreciada.

Author: arsenal, 2012-07-07

2 answers

Necesitas explotar solo una vez (junto con la VISTA LATERAL). Después de explotar puedes 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;
 68
Author: Mark Grover,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-07-09 12:56:01

Si está en Hive 0.10 o posterior, también podría usar inline(ARRAY<STRUCT[,STRUCT]>). Explota una matriz de estructuras en una tabla.

 10
Author: Tariq,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-06-26 22:46:40