首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在水平输出中查询Hive表的垂直列

如何在水平输出中查询Hive表的垂直列
EN

Stack Overflow用户
提问于 2020-11-07 18:50:47
回答 1查看 148关注 0票数 2

我有一个垂直包含数据(attr_name和attr_value列)的表,如下所示,但我想垂直打印数据。在蜂巢中有可能吗?

代码语言:javascript
复制
+------------------------+--------+--------+---------------+------------+
|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。

我能得到这个值吗?

代码语言:javascript
复制
+------------------------+--------+--------+----------+----------+---------+------+
|relation                |object  |instance|Size_MB   |Write_MB  |Time_Pct |DISK  | 
+------------------------+--------+--------+----------+----------+---------+------+
|Summary~>Disk~>Disk-2   |Disk    |Disk-2  |476937    |0         |4        |DISK1 |
+------------------------+--------+--------+----------+----------+---------+------+
EN

回答 1

Stack Overflow用户

发布于 2020-11-07 20:14:49

您可以使用条件聚合:

代码语言:javascript
复制
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或其他语言)通过从数据中读取列来构造字符串形式的查询。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64726893

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档