3

如何在 HiveQL 中实现 PIVOT 功能。以下是 SQL 查询,请帮助我在 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 KATE MILK 1 KATE BEER 12 FRED MILK 3 FRED BEER 24 KATE VEG 3

4

2 回答 2

3

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

有一个请求 PIVOT 支持的Jira 问题。

于 2013-08-27T18:48:02.523 回答
-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 上运行其他 hive 查询以实现您的目标。

于 2013-03-27T21:38:11.130 回答