ARRAY_ZIP
功能
ARRAY_ZIP
函数用于将多个 ARRAY
(如 arr1, arr2, ... , arrN
) 按元素位置组合成一个ARRAY<STRUCT>
,其中每个 STRUCT
包含来自各个输入数组对应位置的元素。
语法
ARRAY_ZIP(arr1, arr2, ... , arrN)
参数
arr1, arr2, ..., arrN
:输入的 N 个数组,类型为ARRAY<T1>, ARRAY<T2>, ..., ARRAY<Tn>
。
返回值
- 返回值类型是
ARRAY<STRUCT<col1 T1, col2 T2, ..., colN Tn>>
,其中每个STRUCT
代表输入数组在同一索引位置上的组合。
使用说明
- 如果多个数组长度不一致,函数执行失败,返回
RUNTIME_ERROR
。 - 支持不同类型的数组输入,返回的结构体字段类型与输入数组一一对应。
- 可用于将多个并行数组组合成结构化格式,方便进一步的处理或分析。
示例
-
多个数组组合
SELECT ARRAY_ZIP(ARRAY(23, 24, 25), ARRAY("John", "Jane", "Jim"), ARRAY(true, false, true));
+-------------------------------------------------------------------------------------------------------------------+
| ARRAY_ZIP(ARRAY(23, 24, 25), ARRAY("John", "Jane", "Jim"), ARRAY(true, false, true)) |
+-------------------------------------------------------------------------------------------------------------------+
| [{"col1":23, "col2":"John", "col3":1}, {"col1":24, "col2":"Jane", "col3":0}, {"col1":25, "col2":"Jim", "col3":1}] |
+-------------------------------------------------------------------------------------------------------------------+- 返回值的第一个
STRUCT
包含了每个参数ARRAY
的第一个元素。 - 返回值的第二个
STRUCT
包含了每个参数ARRAY
的第二个元素。 - 返回值的第三个
STRUCT
包含了每个参数ARRAY
的第三个元素。
- 返回值的第一个
-
访问返回值
-- 访问返回的ARRAY
SELECT ARRAY_ZIP(ARRAY(23, 24, 25), ARRAY("John", "Jane", "Jim"))[1];
+---------------------------------------------------------------+
| ARRAY_ZIP(ARRAY(23, 24, 25), ARRAY("John", "Jane", "Jim"))[1] |
+---------------------------------------------------------------+
| {"col1":23, "col2":"John"} |
+---------------------------------------------------------------+ -
某一个数组为
NULL
,返回NULL
SELECT ARRAY_ZIP(ARRAY(23, 24, 25), ARRAY("John", "Jane", "Jim"), NULL) ;
+------------------------------------------------------------------+
| ARRAY_ZIP(ARRAY(23, 24, 25), ARRAY("John", "Jane", "Jim"), NULL) |
+------------------------------------------------------------------+
| NULL |
+------------------------------------------------------------------+ -
ARRAY
中的元素含有NULL
, 对应的STRUCT
的那一列是NULL
SELECT ARRAY_ZIP(ARRAY(23, NULL, 25), ARRAY("John", "Jane", NULL), ARRAY(NULL, false, true));
+-----------------------------------------------------------------------------------------------------------------------+
| ARRAY_ZIP(ARRAY(23, NULL, 25), ARRAY("John", "Jane", NULL), ARRAY(NULL, false, true)) |
+-----------------------------------------------------------------------------------------------------------------------+
| [{"col1":23, "col2":"John", "col3":null}, {"col1":null, "col2":"Jane", "col3":0}, {"col1":25, "col2":null, "col3":1}] |
+-----------------------------------------------------------------------------------------------------------------------+