用stack()
函数时,参数中的键值对应按照一对列名和列值进行排使用列
功能:把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博客