用stack()
函数时,参数中的键值对应按照一对列名和列值进行排使用列
stack(int n, v_1, v_2, ..., v_k)
功能:把k列数据转换成n行,k/n列,其中n必须是正整数,后面的v_1到v_k必须是元素,不能是列名。(不常用)
假设我们有一个名为employees的表,包含以下列:id, name, department, salary。
CREATE TABLE employees (
id INT,
name STRING,
department STRING,
salary DOUBLE
);
INSERT INTO employees VALUES
(1, 'John', 'HR', 5000),
(2, 'Jane', 'Finance', 6000),
(3, 'Mike', 'IT', 5500);
现在我们使用stack()函数将每个员工的信息转换为多列:
SELECT col_index, col_value
FROM (
SELECT stack(4,
'id', id,
'name', name,
'department', department,
'salary', salary
) AS (col_index, col_value)
FROM employees
) stacked_data;
在这个例子中,我们使用stack()函数将每个键值对转换为多行,其中参数4指定了输出结果的行数(4行)。每个键值对由一个列名和列值组成。
然后,我们将内部查询的结果作为表别名stacked_data的数据源,并选择col_index和col_value两个列作为最终输出结果。
输出结果如下所示:
col_index col_value
id 1
name John
department HR
salary 5000.0
id 2
name Jane
department Finance
salary 6000.0
id 3
name Mike
department IT
salary 5500.0
每一行表示一个转换后的记录,其中col_index列表示每个记录的列名(键),col_value列表示每个记录的列值。
参考文章
hive表生成函数explode、stack、lateral view和json_tuple、parse_url_tuple示例_hive stack-CSDN博客