Hive 将列名转换为配置单元中的行

Hive 将列名转换为配置单元中的行,hive,Hive,我在蜂房里有一张桌子。我必须将列名转换为行。我的表格如下: +---------+---------+---------+ |表1 |表2 |表3| +---------+---------+---------+ |A | D | F| +---------+---------+---------+ |B|E|| +---------+---------+---------+ |C | || +---------+---------+---------+ 我需要把它转换成一个有两列的表。第一列将

我在蜂房里有一张桌子。我必须将列名转换为行。我的表格如下:

+---------+---------+---------+
|表1 |表2 |表3|
+---------+---------+---------+
|A | D | F|
+---------+---------+---------+
|B|E||
+---------+---------+---------+
|C | ||
+---------+---------+---------+

我需要把它转换成一个有两列的表。第一列将有标题->表名,第一列中的值将是旧表的列名。最终输出应如下所示-

+-----------+--------+
|Table Name |   Val  |
+-----------+--------+
|  Table 1  |    A   |
+-----------+--------+
|  Table 1  |    B   |
+-----------+--------+
|  Table 1  |    C   |
+-----------+--------+
|  Table 2  |    D   |
+-----------+--------+
|  Table 2  |    E   |
+-----------+--------+
|  Table 3  |    F   |
+-----------+--------+

我被卡住了。如何使用配置单元获得所需的输出?

使用
UNION ALL
,为与列名对应的第一列提供静态值:

CREATE TABLE new_table as
select * from 
(
select 'Table 1' as Table_Name, Table_1 as Val from your_table
UNION ALL
select 'Table 2' as Table_Name, Table_2 as Val from your_table
UNION ALL
select 'Table 3' as Table_Name, Table_3 as Val from your_table
) s where Val is not NULL
;

你好谢谢你的回复。但在这种情况下,我们必须对列名和值进行硬编码。如果值的数量太多怎么办?是否有一种方法可以派生值而不是硬编码它们?不幸的是,Hive本身不支持动态SQL。您可以尝试使用shell从descripe命令输出生成此SQL提取列