將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函數屬於其他函數,更多其他業務情境的函數請參見其他函數。