如何在Hive中捕获数据

时间:2013-03-27 10:55:36

标签: hadoop pivot hive hiveql

如何在HiveQL中实现PIVOT功能。以下是SQL Query,请帮助我在Hive中实现这一目标:

 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

- 期望的输出: 客户产品数量 KATE VEG 2 KATE SODA 6 凯特奶1 凯特啤酒12 FRED MILK 3 FRED BEER 24 KATE VEG 3

2 个答案:

答案 0 :(得分:3)

Hive不支持以这种方式转动。如果有少量值可以转动,则可以使用查询中的“if”或“case”语句来完成结果。这种方法不适用于无限制或未知的产品或客户。

Jira issue请求PIVOT支持。

答案 1 :(得分:-2)

您真正需要的是将您的内容首先以逗号(或任何其他选择)存储在文本文件中,如下所示:。

凯特,贴贴,2 凯特,纯碱,6 凯特,牛奶,1 凯特,啤酒,12 弗雷德,牛奶,3 弗雷德,啤酒,24 凯特,贴贴,3

在Hive shell中创建一个表如下:

create table Products(Cust string, Product string, Qty int) row format \ 
delimited fields terminated by ',' lines terminated by '\n';

之后(假设您的文件存储在本地/user/avkash/prodlist.txt中,您可以将数据加载到表中,如下所示:

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

验证表格和记录如下:

describe Products;
select * from Products;

之后,您可以在Hive shell上运行其他配置单元查询以实现您的目标。