2012-07-07 47 views
30

數組這是下面的蜂巢表爆炸結構的蜂巢

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; 

任何人都可以幫助我,我在做什麼錯?任何建議將不勝感激。

+0

這樣的事情呢? 選擇 USER_ID, prod_and_ts.product_id如PRODUCT_ID, prod_and_ts.timestamps從 SampleTable側視圖爆炸(NEW_ITEM)exploded_table作爲prod_and_ts時間戳 ; – 2012-07-08 15:27:30

+0

@馬克,感謝馬克,它的工作,你可以張貼這個答案,以便我可以接受它。你還可以看看這個問題嗎? [http://stackoverflow.com/questions/11336950/joining-two-tables-in-hive-using-hiveqlhadoop](http://stackoverflow.com/questions/11336950/joining-two-tables-in-hive-使用-hiveqlhadoop)。由於沒有人回答這個問題。這對我很有幫助。謝謝你的時間。 – ferhan 2012-07-08 18:46:18

+0

很高興幫助。發表答案。很快就會看到另一個問題! – 2012-07-09 12:56:28

回答

63

您只需要爆炸一次(連同橫向視圖)。在爆炸之後,你可以使用一個新的列(在我的例子中稱爲prod_and_ts),它將是結構類型的。然後,您可以解析此新結構列的product_id和timestamps成員以檢索所需的結果。

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

的數組,那麼它真的會有所幫助,我還發布了另外一個問題,因爲它是與性能測量相關的更多類型的理論問題[http://stackoverflow.com/questions/11404163 /custom-mapper-and-reducer-vs-hiveql](http://stackoverflow.com/questions/11404163/custom-mapper-and-reducer-vs-hiveql)。我很抱歉,如果我像這樣打擾你,那麼在這裏沒有那麼多BIG DATA專家。所以這就是我給你打電話的原因。真的很感謝您的幫助... – ferhan 2012-07-10 07:45:18

+0

嗨馬克,感謝您的幫助。我已經發布了與Hive中的Struct爆炸數組相關的類似問題,但是這次的數據與somehwat不同。你能否看看如果可以做到這一點? [http://stackoverflow.com/questions/11550651/exploding-array-of-struct-using-hiveql](http://stackoverflow.com/questions/11550651/exploding-array-of-struct-using-hiveql) – ferhan 2012-07-18 21:30:42

+0

嗨馬克,我們如何能夠爆炸併爲多個陣列創建視圖>列。你可以請求我的請求幫助http://stackoverflow.com/questions/37282646/how-to-create-view-for-struct-fields-in-hive – 2016-05-25 06:40:57

10

如果您在Hive 0.10或更高版本上,也可以使用inline(ARRAY<STRUCT[,STRUCT]>)。它將一個結構數組分解成一個表。

+0

這是一個有用的答案,但它沒有完全回答這個問題。這樣,頂級字段,即'USER_ID'不在結果中。 – jkukul 2017-03-13 16:46:03