函数栈(STACK)
概述
STACK
函数是一个强大的数据转换工具,它可以将多列表达式按照指定的行数进行堆叠,生成新的行和列。该函数在处理数据时,能够灵活地将不同类型的数据进行整合,并且可以通过 LATERAL VIEW
配合使用,实现更复杂的数据操作。
语法
STACK(n, expr1, expr2, ..., exprK)
参数说明
n
:整数,表示要生成的行数。
expr1 ~ exprK
:要求类型相同或者可以进行隐式类型转换的表达式列表。
返回结果
返回一个与 expr1 ~ exprK
相同类型的值。
使用示例
例子 1:基本使用
SELECT 'hello', STACK(2, 1, 2, 3) AS (first, second), 'world';
+---------+-------+--------+---------+
| 'hello' | first | second | 'world' |
+---------+-------+--------+---------+
| hello | 1 | 2 | world |
| hello | 3 | null | world |
+---------+-------+--------+---------+
例子 2:与 `` 搭配使用
SELECT w, x, y FROM VALUES
('apple', 1, 2, 3, 4),
('banana', 11, 22, 33, 44),
('orange', 111, 222, 333, 444),
('dog', 1111, 2222, 3333, 4444) AS t(w, a, b, c, d)
LATERAL VIEW STACK(2, a, b, c) lv AS x, y;
+--------+------+------+
| w | x | y |
+--------+------+------+
| apple | 1 | 2 |
| apple | 3 | null |
| banana | 11 | 22 |
| banana | 33 | null |
| orange | 111 | 222 |
| orange | 333 | null |
| dog | 1111 | 2222 |
| dog | 3333 | null |
+--------+------+------+
例子 3:隐式类型转换
SELECT STACK(2, 1, '2', 3) AS (col1, col2);
+------+------+
| col1 | col2 |
+------+------+
| 1 | 2 |
| 3 | |
+------+------+