全部產品
Search
文件中心

MaxCompute:STACK

更新時間:Feb 28, 2024

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