Hive 在配置单元中对集合进行分组后,如何重塑数据?

Hive 在配置单元中对集合进行分组后,如何重塑数据?,hive,hiveql,cube,rollup,grouping-sets,Hive,Hiveql,Cube,Rollup,Grouping Sets,我想在许多不同的维度上聚合一个列。我认为凿平集适合我的问题,但我不知道如何从分组集转换/重塑结果表 这是我使用分组集的查询: select date, dim1, dim2, dim3, sum(value) as sum_value from table grouping by date, dim1, dim2, dim3 grouping sets ((date, dim1), (date, dim2), (date, dim3)) 查询将生成如下表: date dim1

我想在许多不同的维度上聚合一个列。我认为凿平集适合我的问题,但我不知道如何从分组集转换/重塑结果表

这是我使用分组集的查询:

select date, dim1, dim2, dim3, sum(value) as sum_value
from table
grouping by date, dim1, dim2, dim3
grouping sets ((date, dim1), (date, dim2), (date, dim3))
查询将生成如下表:

date        dim1    dim2    dim3    sum_value
2017-01-01  A       NULL    NULL    [value_A]
2017-01-01  B       NULL    NULL    [value_B]
2017-01-01  NULL    C       NULL    [value_C]
2017-01-01  NULL    D       NULL    [value_D]
2017-01-01  NULL    NULL    E       [value_E]
2017-01-01  NULL    NULL    F       [value_F]
date        dim     factor  sum_value
2017-01-01  dim1     A      [value_A]
2017-01-01  dim1     B      [value_B]
2017-01-01  dim2     C      [value_C]
2017-01-01  dim2     D      [value_D]
2017-01-01  dim3     E      [value_E]
2017-01-01  dim3     F      [value_F]
但我真正需要的是这样一张桌子:

date        dim1    dim2    dim3    sum_value
2017-01-01  A       NULL    NULL    [value_A]
2017-01-01  B       NULL    NULL    [value_B]
2017-01-01  NULL    C       NULL    [value_C]
2017-01-01  NULL    D       NULL    [value_D]
2017-01-01  NULL    NULL    E       [value_E]
2017-01-01  NULL    NULL    F       [value_F]
date        dim     factor  sum_value
2017-01-01  dim1     A      [value_A]
2017-01-01  dim1     B      [value_B]
2017-01-01  dim2     C      [value_C]
2017-01-01  dim2     D      [value_D]
2017-01-01  dim3     E      [value_E]
2017-01-01  dim3     F      [value_F]
实际的维度数远远超过3个,因此硬编码查询不是一个好主意。是否有一种方法可以从分组集或其他聚合方法中重塑表,以获得所需的表


谢谢

请添加包含所需结果的完整数据示例谢谢!这正是我需要的!
select    `date`
         ,elt(log2(GROUPING__ID - 1),'dim1','dim2','dim3')      as dim
         ,coalesce (dim1,dim2,dim3)                             as factor
         ,sum(value)                                            as sum_value

from      `table`

group by  `date`,dim1,dim2,dim3
          grouping sets ((`date`,dim1),(`date`,dim2),(`date`,dim3))