我有一个垂直包含数据(attr_name和attr_value列)的表,如下所示,但我想垂直打印数据。在蜂巢中有可能吗?
+------------------------+--------+--------+---------------+------------+
|relation |object |instance|attr_name |attr_value |
+------------------------+--------+--------+---------------+------------+
|Summary~>Disk~>Disk-1 |Disk |Disk-1 |Size_MB |7726 |
|Summary~>Disk~>Disk-1 |Disk |Disk-1 |Write_MB |694 |
|Summary~>Disk~>Disk-1 |Disk |Disk-1 |Time_Pct |4 |
|Summary~>Disk~>Disk-1 |Disk |Disk-1 |Disk |DISK0 |
|Summary~>Disk~>Disk-2 |Disk |Disk-2 |Size_MB |476937 |
|Summary~>Disk~>Disk-2 |Disk |Disk-2 |Write_MB |0 |
|Summary~>Disk~>Disk-2 |Disk |Disk-2 |Time_Pct |4 |
|Summary~>Disk~>Disk-2 |Disk |Disk-2 |Disk |DISK1 |
+------------------------+--------+--------+---------------+------------+我可以做一个普通的查询来获得attr_name的attr_value。但是我想要得到与同一实例有关系的所有输出行。
例如,我希望通过实例获取所有的值和attr_value,其中attr_value='DISK1',而查询引用将仅为attr_value。
如果我查询like select relation,all attr_name as column,all attr_value as value from table name where attr_value IN (DISK1)作为相关实例。对于此查询,应输出以下内容。我不想按实例分组,因为查询需要基于attr_value。
我能得到这个值吗?
+------------------------+--------+--------+----------+----------+---------+------+
|relation |object |instance|Size_MB |Write_MB |Time_Pct |DISK |
+------------------------+--------+--------+----------+----------+---------+------+
|Summary~>Disk~>Disk-2 |Disk |Disk-2 |476937 |0 |4 |DISK1 |
+------------------------+--------+--------+----------+----------+---------+------+发布于 2020-11-07 20:14:49
您可以使用条件聚合:
select relation, object, instance,
max(case when attr_name = 'Size_MB' then attr_value end) as Size_MB,
max(case when attr_name = 'Write_MB' then attr_value end) as Write_MB,
max(case when attr_name = 'Time_Pct' then attr_value end) as Time_Pct,
max(case when attr_name = 'Disk' then attr_value end) as Disk
from t
group by relation, object, instance;如果要筛选特定对象或实例,请在group by之前添加where子句。
请注意,它具有固定数量的列,需要显式指定。如果您有可变数量的列,并且不知道结果是什么样子,那么您将需要使用动态SQL。
在Hive中,这通常意味着使用应用程序语言(如python或java或其他语言)通过从数据中读取列来构造字符串形式的查询。
https://stackoverflow.com/questions/64726893
复制相似问题