Перейти к содержимому
Последнее обновление

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. Доступ к возвращаемому значению

    -- Access the returned 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}] |
    +-----------------------------------------------------------------------------------------------------------------------+