在Hive/Spark中动态地将行转换为列



我有四元基础数据,数据随着四元增长而动态增长-

qtr       dimvalue  percentage
FY2019-Q1   XYZ         15
FY2019-Q1   ABC         80
FY2019-Q1   PPP         5
FY2019-Q2   XYZ         10
FY2019-Q2   ABC         70
FY2019-Q2   PPP         20

当四分之一的数量较少时,我每次都会手动编辑查询,并尝试如下查询以将其转换为

SELECT dim_value,SUM(Quater_1) as Quater_1,SUM(Quater_2) as Quater_2 from
(
SELECT dim_value,
CASE WHEN qtr='FY2019-Q1' THEN percentage END AS Quater_1,
CASE WHEN qtr='FY2019-Q2' THEN percentage END AS Quater_2 FROM 
( select * from schema.table where qtr in ('FY2019-Q1','FY2019-Q2'))t2 order by dim_value
)t1 group by dim_value;

dimvalue   Quater_1   Quater_2
XYZ          15         10
ABC          80         70 
PPP          5          20

但我的查询是,我如何以动态和更稳健的方式激活它,将行转换为列,并记住不断增长的四元数,并在四元数增长时拥有适当的四元列名称。

总之,我正在寻找如何使用更动态的查询来执行这一操作,无论是使用Hive还是Spark SQL,或者是否有执行建议?

感谢的帮助

如果可以的话,您可以使用Dataset API轻松地完成这样的透视。

spark.table("schema.table").groupBy("dimvalue").pivot("qtr").sum("percentage").show
+--------+---------+---------+
|dimvalue|FY2019-Q1|FY2019-Q2|
+--------+---------+---------+
|     PPP|        5|       20|
|     XYZ|       15|       10|
|     ABC|       80|       70|
+--------+---------+---------+

使用SQL,唯一的方法就是动态构建它。

相关内容

  • 没有找到相关文章

最新更新