2012-07-07 12 views
30

Esta es la continuación de la Tabla Colmenaexplotar el conjunto de Struct en Colmena

CREATE EXTERNAL TABLE IF NOT EXISTS SampleTable 
(
USER_ID BIGINT, 
NEW_ITEM ARRAY<STRUCT<PRODUCT_ID: BIGINT,TIMESTAMPS:STRING>> 
) 

Y estos son los datos de la mesa- anterior

1015826235  [{"product_id":220003038067,"timestamps":"1340321132000"},{"product_id":300003861266,"timestamps":"1340271857000"}] 

¿Hay alguna manera de poder conseguir el resultado a continuación 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 la salida en el formato anterior, pero no me está dando el resultado en la forma en 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.

+0

¿Qué tal algo así? seleccionar user_id, prod_and_ts.product_id como product_id, prod_and_ts.timestamps como marcas de tiempo de SampleTable LATERAL VISTA explotar (NEW_ITEM) exploded_table como prod_and_ts; –

+0

@ Mark, Thanks Mark, Funcionó, ¿Puedes publicar esto como respuesta para que yo pueda aceptarlo? Y, por favor, también pueden echarle un vistazo a esta pregunta SO. [http://stackoverflow.com/questions/11336950/joining-two-tables-in-hive-using-hiveqlhadoop](http://stackoverflow.com/questions/11336950/joining- two -tables-in-hive- using-hiveqlhadoop). Como nadie ha respondido aún sobre esta pregunta. Será de gran ayuda para mí. Gracias por tu tiempo. – ferhan

+0

Me alegro de que haya ayudado. Publicó la respuesta. ¡Veremos la otra pregunta pronto! –

Respuesta

63

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; 
+0

Y una pregunta más que he publicado, ya que es más un tipo de pregunta teórica relacionada con la medición del rendimiento. [http://stackoverflow.com/questions/11404163 /custom-mapper-and-reducer-vs-hiveql](http://stackoverflow.com/questions/11404163/custom-mapper-and-reducer-vs-hiveql). Me disculpo si te estoy molestando tanto como en SO, no hay tanto experto en BIG DATA aquí. Entonces esa es la razón por la que te estoy haciendo un ping. Realmente aprecié toda tu ayuda ... – ferhan

+0

Hola Mark, gracias por toda tu ayuda. He publicado una pregunta similar relacionada con la Matriz explosiva de Struct en Hive, pero esta vez los datos son diferentes. ¿Puedes echar un vistazo si es posible hacerlo? [http://stackoverflow.com/questions/11550651/exploding-array-of-struct-using-hiveql](http://stackoverflow.com/questions/11550651/exploding-array-of-struct-using-hiveql) – ferhan

+0

Hola Mark, ¿cómo podemos explotar y crear vistas para múltiples matrices > columnas. ¿podría por favor ayudar con mi solicitud? http://stackoverflow.com/questions/37282646/how-to-create-view-for-struct-fields-in-hive –

10

Si usted está en la colmena 0.10 o posterior, también se puede utilizar inline(ARRAY<STRUCT[,STRUCT]>). Explota una serie de estructuras en una tabla.

+0

Es una respuesta útil, pero no responde completamente la pregunta. De esta forma, el campo de nivel superior, es decir, 'USER_ID' no está en los resultados. – jkukul