在 HIVE 中转置数据

Posted

技术标签:

【中文标题】在 HIVE 中转置数据【英文标题】:Transpose data in HIVE 【发布时间】:2021-09-22 12:02:38 【问题描述】:

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

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

我想在转置后有一个新表,其中仅显示客户一行,状态多列,例如

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 中做同样的事情。

问候,

马西奥

【问题讨论】:

【参考方案1】:

使用条件聚合:

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

【讨论】:

有没有什么方法可以在不在 CASE 子句中提及的情况下获得所有状态?作为 SAS 示例,我添加了。 @MarcioLino 在 Hive 中不可能,它不支持动态 SQL。

以上是关于在 HIVE 中转置数据的主要内容,如果未能解决你的问题,请参考以下文章

在 Pyspark 数据框中转置

python 在Pandas中转置数据(长到宽)

如何在Spark中转置数据框?

我们可以在 Azure 映射数据流中转置数据吗?

嗨,我想在 pyspark 中转置一个数据框

如何在csv文件中转置数据集?