Последнее обновление
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.
- Первая структура
-
Доступ к возвращаемому значению
-- 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"} |
+---------------------------------------------------------------+ -
Если один из массивов равен
NULL, возвращаетсяNULLSELECT 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равноNULLSELECT 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}] |
+-----------------------------------------------------------------------------------------------------------------------+