STACK

expr1, ..., exprk分割为n行,除非另有说明,否则输出结果使用默认的列名col0、col1...

命令格式

stack(n, expr1, ..., exprk) 

参数说明

  • n:必填。分割的行数。

  • expr:必填。待分割的参数。expr1, ..., exprk必须是整型,且参数数目必须是n的整数倍,需要能分割为完整的n行,否则返回报错。

返回值说明

返回n行,列数为参数数量除以n的商的数据集。

使用示例

--将1, 2, 3, 4, 5, 6排为3行。
select stack(3, 1, 2, 3, 4, 5, 6);
--返回结果如下。
+------+------+
| col0 | col1 |
+------+------+
| 1    | 2    |
| 3    | 4    |
| 5    | 6    |
+------+------+

--将'A',10,date '2015-01-01','B',20,date '2016-01-01'排为两行.
select stack(2,'A',10,date '2015-01-01','B',20,date '2016-01-01') as (col0,col1,col2);
--返回结果如下。
+------+------+------+
| col0 | col1 | col2 |
+------+------+------+
| A    | 10   | 2015-01-01 |
| B    | 20   | 2016-01-01 |
+------+------+------+

--将a、b、c、d排列为两行,源表如果有多行,按行执行stack的分行处理。
select stack(2,a,b,c,d) as (col,value)
from values 
    (1,1,2,3,4),
    (2,5,6,7,8),
    (3,9,10,11,12),
    (4,13,14,15,null)
as t(key,a,b,c,d);
--返回结果如下。
+------+-------+
| col  | value |
+------+-------+
| 1    | 2     |
| 3    | 4     |
| 5    | 6     |
| 7    | 8     |
| 9    | 10    |
| 11   | 12    |
| 13   | 14    |
| 15   | NULL  |
+------+-------+

--配合lateral view使用。
select tf.* from (select 0) t lateral view stack(2,'A',10,date '2015-01-01','B',20, date '2016-01-01') tf as col0,col1,col2;
--返回结果如下。
+------+------+------+
| col0 | col1 | col2 |
+------+------+------+
| A    | 10   | 2015-01-01 |
| B    | 20   | 2016-01-01 |
+------+------+------+

相关函数

STACK函数属于其他函数,更多其他业务场景的函数请参见其他函数