跳到主要内容

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 代表输入数组在同一索引位置上的组合。

使用说明

  1. 如果多个数组长度不一致,函数执行失败,返回 RUNTIME_ERROR
  2. 支持不同类型的数组输入,返回的结构体字段类型与输入数组一一对应。
  3. 可用于将多个并行数组组合成结构化格式,方便进一步的处理或分析。

示例

  1. 多个数组组合

    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 的第三个元素。
  2. 访问返回值

    -- 访问返回的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"} |
    +---------------------------------------------------------------+
  3. 某一个数组为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 |
    +------------------------------------------------------------------+
  4. 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}] |
    +-----------------------------------------------------------------------------------------------------------------------+