2013-03-27 39 views
3

如何在HiveQL中實現PIVOT功能。以下是SQL查詢,請您幫我在蜂巢實現這一目標:如何在Hive中PIVOT數據

CREATE TABLE Product(Cust VARCHAR(25), Product VARCHAR(20), QTY INT) 
GO 
-- Inserting Data into Table 
INSERT INTO Product(Cust, Product, QTY) VALUES('KATE','VEG',2) 
INSERT INTO Product(Cust, Product, QTY) VALUES('KATE','SODA',6) 
INSERT INTO Product(Cust, Product, QTY) VALUES('KATE','MILK',1) 
INSERT INTO Product(Cust, Product, QTY) VALUES('KATE','BEER',12) 
INSERT INTO Product(Cust, Product, QTY) VALUES('FRED','MILK',3) 
INSERT INTO Product(Cust, Product, QTY) VALUES('FRED','BEER',24) 
INSERT INTO Product(Cust, Product, QTY) VALUES('KATE','VEG',3) 
GO 

-- Pivot Table ordered by PRODUCT 
SELECT PRODUCT, FRED, KATE FROM (
SELECT CUST, PRODUCT, QTY 
FROM Product) up 
PIVOT (SUM(QTY) FOR CUST IN (FRED, KATE)) AS pvt 
ORDER BY PRODUCT 

--Desired輸出: 卡斯特產品數量 KATE VEG 2 KATE SODA 6 KATE牛奶1 KATE啤酒12 FRED MILK 3 FRED BEER 24 KATE VEG 3

回答

-2

您真正需要的是將您的內容以逗號(或任何其他選項)存儲在文本文件中,如下所示:

凱特,吃素,2 凱特,純鹼,6 凱特,牛奶,1 凱特,啤酒,12 佛瑞德,牛奶,3 佛瑞德,啤酒,24 凱特,吃素,3

後中蜂巢外殼創建一個表如下:

​​

之後(假設你的文件將作爲/user/avkash/prodlist.txt您可以將數據加載到您的表如下本地存儲:

load data inpath '/user/avkash/prodlist.txt' overwrite into table Products; 

檢查表,記錄如下:

describe Products; 
select * from Products; 

之後,你可以運行在蜂巢外殼的其他蜂巢查詢來實現自己的目標。

+0

感謝您的回覆。但是,我所看到的是針對PIVOT的Hive查詢。在SQL中的以下查詢和我看起來相當於HiveQL。 - 透視表按產品 SELECT訂購產品,FRED,凱特( SELECT CUST,產品,數量 從產品)達 PIVOT(SUM(數量)FOR CUST IN(FRED,KATE))AS PVT ORDER BY產品 – 2013-03-28 03:59:36

+0

答案與問題無關。 – Tagar 2015-08-10 21:45:52

3

Hive不支持以這種方式旋轉。如果有少量值可以通過查詢中的「if」或「case」語句完成,則結果可以重複。這種方法不適用於無限或未知的產品或客戶。

有一個請求PIVOT支持的Jira issue

+0

感謝提供JIRA票證 – Tagar 2015-08-10 21:46:42