2017-01-30 128 views
1

我有蜂巢表格中的這好比移調蜂巢表

| ID | Code | Proc1 | Proc2 | 
| i | A  | B  | C  | 
| i | 1  | 2  | 3  | 

我希望我的輸出是:

| i | A  | 1  | 
| i | B  | 2  | 
| i | C  | 3  | 

我已經閱讀了很多其他文章,並找出存在沒有直接的方法在蜂巢中進行轉置。任何幫助,將不勝感激。

+0

的[簡單的方法來轉在SQL列和行?(可能的複製http://stackoverflow.com/questions/13372276/simple-way -to-轉柱和-rows-in-sql) – Ollaw

+0

[有沒有辦法在Hive中轉置數據](http://stackoverflow.com/questions/37436710/is-there-a-way-to-transpose-data-in -hive) – gobrewers14

+0

@ gobrewers14 - 這不是我要找的。不過,我可以嘗試使用地圖功能,看看我是否可以達到任何解決方案。 – salmanbw

回答

1

這是一種方法來做你正在請求。但是,我必須說,對於任何合理數量的行來說,寫這些都是不切實際的。

查詢

SELECT id 
    , new[0] AS col0 
    , new[1] AS col1 
FROM (
    SELECT id 
    , COLLECT_LIST(code) AS a 
    , COLLECT_LIST(proc1) AS b 
    , COLLECT_LIST(proc2) AS c 
    FROM database.table 
    GROUP BY id) x 
LATERAL VIEW EXPLODE(ARRAY(a, b, c)) exptbl AS new 

輸出

id  col0 col1 
i  A  1 
i  B  2 
i  C  3 
+0

我想,作爲我的答案的替代方案,您可以使用函數來生成此代碼,以測試更好的性能。請注意,這也將超越僅使用HQL。 (使用普通的HQL,你將被迫在這個答案中顯示硬編碼) –

+0

@ gobrewers14 - 謝謝你,這正是我所尋找的。 – salmanbw

0

有沒有辦法做到這一點在蜂巢沒有硬編碼。假設你的蜂巢數據庫是一個典型的生態系統,我建議以下步驟:

  1. 加載數據
  2. 使用腳本語言如Python(或R)
  3. 創建目標表移調數據相關的腳本語言
  4. 將數據寫入到目標表