在 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
我在 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