爆炸结构的蜂巢阵列(Explode the Array of Struct in Hive)

2019-06-26 02:55发布

这是下面的蜂巢表

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

这是在上面的表 - 数据

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

有什么办法爆炸后阵我可以从HiveQL输出下面?

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

更新

我写这个查询来获得在上面的格式输出,但它不给我结果我想要的方式。

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;

谁能帮我,我做错了什么? 任何建议将不胜感激。

Answer 1:

你需要爆发一次(与侧视相结合)。 爆炸您可以使用新列(在我的例子称为prod_and_ts),这将是结构型之后。 然后,你可以解决这个新的结构柱的PRODUCT_ID和时间戳成员检索所需的结果。

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;


Answer 2:

如果你在蜂房0.10或更高,则也可以使用inline(ARRAY<STRUCT[,STRUCT]>) 它爆炸结构的数组插入表中。



文章来源: Explode the Array of Struct in Hive