在 HIVE 中转置数据

Transpose data in HIVE

我在 Hive 中有以下数据集,我想将行转置为列。

Customer Status Quantity
25 Paid 5
25 N Paid 2
67 Open 12
67 Paid 4
45 N Paid 3
45 Open 2

我想在转置后有一个新的 table,它只显示客户的一行和状态的多列,例如

Customer Paid N Paid Open
25 5 2 0
67 4 0 12
45 0 3 2

我尝试了一些在 Internet 上找到的示例,但我无法使其正常工作。在这里,为了简单起见,我只列出了三种状态,但实际上,我可以有更多。

在 SAS 中,我曾经做过类似下面的事情:

proc transpose
   data = imputtable;
   out = outputtable;
   by customer;
   id status;
   var quantity;
run;

SAS 获取所有现有状态并将它们转换为列。我想在 Hive 中做同样的事情。

此致,

马西奥

使用条件聚合:

select Customer, 
       sum(case when Status = 'Paid'   then Quantity else 0 end) as Paid     ,
       sum(case when Status = 'N Paid' then Quantity else 0 end) as `N Paid` ,
       sum(case when Status = 'Open'   then Quantity else 0 end) as Open
 from table
group by Customer