Hive 使用sql的配置单元表转置操作
我想使用配置单元QL转置表 这是下面的资源表Hive 使用sql的配置单元表转置操作,hive,hiveql,Hive,Hiveql,我想使用配置单元QL转置表 这是下面的资源表 ___________________________________________ subject|roll_1|roll_2|roll_3|roll_4|roll_5| ___________________________________________ MATHS |80 | 90 | 78 | 95 | 68| ___________________________________________ ENGLISH
___________________________________________
subject|roll_1|roll_2|roll_3|roll_4|roll_5|
___________________________________________
MATHS |80 | 90 | 78 | 95 | 68|
___________________________________________
ENGLISH|78 | 78 | 67 |75 |54 |
subject|MATHS|ENGLISH|
______________________
roll_1 |80 |78 |
______________________
roll_2 |90 |78 |
______________________
roll_3 |78 | 67 |
______________________
roll_4 |95 |75 |
______________________
roll_5 |68 |54 |
我想要下表所示格式的答案
___________________________________________
subject|roll_1|roll_2|roll_3|roll_4|roll_5|
___________________________________________
MATHS |80 | 90 | 78 | 95 | 68|
___________________________________________
ENGLISH|78 | 78 | 67 |75 |54 |
subject|MATHS|ENGLISH|
______________________
roll_1 |80 |78 |
______________________
roll_2 |90 |78 |
______________________
roll_3 |78 | 67 |
______________________
roll_4 |95 |75 |
______________________
roll_5 |68 |54 |
请帮我解决这个问题。下面是获取所需输出的SQL
select 'roll_1' as subject,sum(case when subject='MATHS' then roll_1 else 0 end) maths,sum(case when subject='ENGLISH' then roll_1 else 0 end) english from your_table_2
union all
select 'roll_2' as subject,sum(case when subject='MATHS' then roll_2 else 0 end) maths,sum(case when subject='ENGLISH' then roll_2 else 0 end) english from your_table_2
union all
select 'roll_3' as subject,sum(case when subject='MATHS' then roll_3 else 0 end) maths,sum(case when subject='ENGLISH' then roll_3 else 0 end) english from your_table_2
union all
select 'roll_4' as subject,sum(case when subject='MATHS' then roll_4 else 0 end) maths,sum(case when subject='ENGLISH' then roll_4 else 0 end) english from your_table_2
union all
select 'roll_5' as subject,sum(case when subject='MATHS' then roll_5 else 0 end) maths,sum(case when subject='ENGLISH' then roll_5 else 0 end) english from your_table_2
这是我能做的最接近通用的,随着新列的添加,您只需在地图内部的CONCAT中进行更改:
虽然这可能会影响效率。您使用的是哪一版本的hive?我使用的是hive 2.0,请给出一些通用解决方案。在这种情况下,使用此解决方案是可以的,但当我有一名lac学生时,情况会如何?此解决方案可能没有用处。您提供的数据表示为错误的数据模型,因为您为什么要添加一个额外的列而不是新行。另一种解决方案可以是,您必须使用数据挖掘和ETL的概念,然后您的数据将很容易以表格形式显示。请提供一些优化的解决方案不知道其他解决方案。我觉得你看起来很有活力。对不起的: