- Categories:
Semi-structured and structured data functions (Array/Object Creation and Manipulation)
ARRAYS_ZIP¶
Returns an array of objects, each of which contains key-value pairs for an nth element in the input arrays. For example, in the returned array, the first object contains key-value pairs for each first element in the input arrays, the second object contains key-value pairs for each second element in the input arrays, and so on.
Syntax¶
ARRAYS_ZIP( <array> [ , <array> ... ] )
Arguments¶
array
An input array.
The input arrays can be of different lengths.
If any of the input arrays is a structured array, all input arrays must be structured arrays.
Returns¶
Returns a value of one of the following types:
If the input arrays are semi-structured arrays, the function returns a semi-structured array of structured objects.
If the input arrays are structured arrays, the function returns a structured array of structured objects. The definition of the structured object depends on the number of input arrays and the types of values in the arrays.
If any of the input arrays is NULL, the function returns NULL.
Each object contains the key-value pairs for the values of an nth element in the input arrays. The key ($1
, $2
, and so on)
represents the position of the input array.
For example, suppose that you pass in these arrays:
SELECT ARRAYS_ZIP(
[1, 2, 3],
['first', 'second', 'third'],
['i', 'ii', 'iii']
) AS zipped_arrays;
The function returns the following array of objects:
+---------------------+
| ZIPPED_ARRAYS |
|---------------------|
| [ |
| { |
| "$1": 1, |
| "$2": "first", |
| "$3": "i" |
| }, |
| { |
| "$1": 2, |
| "$2": "second", |
| "$3": "ii" |
| }, |
| { |
| "$1": 3, |
| "$2": "third", |
| "$3": "iii" |
| } |
| ] |
+---------------------+
In the returned array:
The first object contains the first elements of all input arrays.
The second object contains the second elements of all input arrays.
The third object contains the third elements of all input arrays.
The keys in the objects identify the input array:
The
$1
key-value pairs contain the values from the first input array.The
$2
key-value pairs contain the values from the second input array.The
$3
key-value pairs contain the values from the third input array.
Usage notes¶
The returned array is as long as the longest input array. If some input arrays are shorter, the function uses a JSON null for the remaining elements missing in the shorter arrays.
If the input array includes a NULL element, the function returns a JSON null for that element.
Examples¶
The following examples demonstrate how the function works:
Single input array¶
The following example returns an array of objects containing the first, second, and third elements in a single array:
SELECT ARRAYS_ZIP(
[1, 2, 3]
) AS zipped_array;
+--------------+
| ZIPPED_ARRAY |
|--------------|
| [ |
| { |
| "$1": 1 |
| }, |
| { |
| "$1": 2 |
| }, |
| { |
| "$1": 3 |
| } |
| ] |
+--------------+
Multiple input arrays¶
The following example returns an array of objects containing the first, second, and third elements in the input arrays:
SELECT ARRAYS_ZIP(
[1, 2, 3],
[10, 20, 30],
[100, 200, 300]
) AS zipped_array;
+---------------+
| ZIPPED_ARRAY |
|---------------|
| [ |
| { |
| "$1": 1, |
| "$2": 10, |
| "$3": 100 |
| }, |
| { |
| "$1": 2, |
| "$2": 20, |
| "$3": 200 |
| }, |
| { |
| "$1": 3, |
| "$2": 30, |
| "$3": 300 |
| } |
| ] |
+---------------+
Input arrays of different lengths¶
The following example passes in input arrays of different lengths. For the values absent from the shorter arrays, the function uses a JSON null in the object.
SELECT ARRAYS_ZIP(
[1, 2, 3],
['one'],
['I', 'II']
) AS zipped_array;
+------------------+
| ZIPPED_ARRAY |
|------------------|
| [ |
| { |
| "$1": 1, |
| "$2": "one", |
| "$3": "I" |
| }, |
| { |
| "$1": 2, |
| "$2": null, |
| "$3": "II" |
| }, |
| { |
| "$1": 3, |
| "$2": null, |
| "$3": null |
| } |
| ] |
+------------------+
NULL and empty array handling¶
As shown in the following example, passing in a NULL for any input array causes the function to return a SQL NULL:
SELECT ARRAYS_ZIP(
[1, 2, 3],
NULL,
[100, 200, 300]
) AS zipped_array;
+--------------+
| ZIPPED_ARRAY |
|--------------|
| NULL |
+--------------+
In the following example, all of the input arrays are empty, which causes the function to return an empty object:
SELECT ARRAYS_ZIP(
[], [], []
) AS zipped_array;
+--------------+
| ZIPPED_ARRAY |
|--------------|
| [ |
| {} |
| ] |
+--------------+
In the following example, some of the elements in the input arrays are NULL. In the returned objects, the values for these elements are JSON nulls:
SELECT ARRAYS_ZIP(
[1, NULL, 3],
[NULL, 20, NULL],
[100, NULL, 300]
) AS zipped_array;
+-----------------+
| ZIPPED_ARRAY |
|-----------------|
| [ |
| { |
| "$1": 1, |
| "$2": null, |
| "$3": 100 |
| }, |
| { |
| "$1": null, |
| "$2": 20, |
| "$3": null |
| }, |
| { |
| "$1": 3, |
| "$2": null, |
| "$3": 300 |
| } |
| ] |
+-----------------+