- Catégories :
Fonctions de données semi-structurées et structurées (Création et manipulation d’un tableau ou d’un objet)
ARRAYS_ZIP¶
Renvoie un tableau d”objets, chacun contenant des paires clé-valeur pour un nième élément dans les tableaux d’entrée. Par exemple, dans le tableau renvoyé, le premier objet contient des paires clé-valeur pour chaque premier élément des tableaux d’entrée, le deuxième objet contient des paires clé-valeur pour chaque deuxième élément des tableaux d’entrée, et ainsi de suite.
Syntaxe¶
ARRAYS_ZIP( <array> [ , <array> ... ] )
Arguments¶
array
Un tableau d’entrée.
Les tableaux d’entrée peuvent être de différentes longueurs.
Si l’un des tableaux d’entrée est un tableau structuré, tous les tableaux d’entrée doivent être des tableaux structurés.
Renvoie¶
Renvoie une valeur de l’un des types suivants :
Si les tableaux d’entrée sont des tableaux semi-structurés, la fonction renvoie un tableau semi-structuré d’objets structurés.
Si les tableaux d’entrée sont des tableaux structurés, la fonction renvoie un tableau structuré d’objets structurés. La définition de l’objet structuré dépend du nombre de tableaux d’entrée et des types de valeurs dans les tableaux.
Si l’un des tableaux d’entrée est NULL, la fonction renvoie NULL.
Chaque objet contient les paires clé-valeur pour les valeurs d’un nième élément dans les tableaux d’entrée. La clé ($1
, $2
, etc.) représente la position du tableau d’entrée.
Par exemple, supposons que vous transmettiez ces tableaux :
SELECT ARRAYS_ZIP(
[1, 2, 3],
['first', 'second', 'third'],
['i', 'ii', 'iii']
) AS zipped_arrays;
La fonction renvoie le tableau d’objets suivant :
+---------------------+
| ZIPPED_ARRAYS |
|---------------------|
| [ |
| { |
| "$1": 1, |
| "$2": "first", |
| "$3": "i" |
| }, |
| { |
| "$1": 2, |
| "$2": "second", |
| "$3": "ii" |
| }, |
| { |
| "$1": 3, |
| "$2": "third", |
| "$3": "iii" |
| } |
| ] |
+---------------------+
Dans le tableau renvoyé :
Le premier objet contient les premiers éléments de tous les tableaux d’entrée.
Le deuxième objet contient les deuxièmes éléments de tous les tableaux d’entrée.
Le troisième objet contient les troisièmes éléments de tous les tableaux d’entrée.
Les clés dans les objets identifient le tableau d’entrée :
Les paires clé-valeur
$1
contiennent les valeurs du premier tableau d’entrée.Les paires clé-valeur
$2
contiennent les valeurs du deuxième tableau d’entrée.Les paires clé-valeur
$3
contiennent les valeurs du troisième tableau d’entrée.
Notes sur l’utilisation¶
Le tableau renvoyé est aussi long que le tableau d’entrée le plus long. Si certains tableaux d’entrée sont plus courts, la fonction utilise un null JSON pour les éléments restants manquants dans les tableaux plus courts.
Si le tableau d’entrée comprend un élément NULL, la fonction renvoie un JSON null pour cet élément.
Exemples¶
Les exemples suivants montrent comment fonctionne la fonction :
Tableau d’entrée unique¶
L’exemple suivant renvoie un tableau d’objets contenant les premier, deuxième et troisième éléments dans un seul tableau :
SELECT ARRAYS_ZIP(
[1, 2, 3]
) AS zipped_array;
+--------------+
| ZIPPED_ARRAY |
|--------------|
| [ |
| { |
| "$1": 1 |
| }, |
| { |
| "$1": 2 |
| }, |
| { |
| "$1": 3 |
| } |
| ] |
+--------------+
Tableaux d’entrées multiples¶
L’exemple suivant renvoie un tableau d’objets contenant les premier, deuxième et troisième éléments des tableaux d’entrée :
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 |
| } |
| ] |
+---------------+
Tableaux d’entrée de différentes longueurs¶
L’exemple suivant transmet des tableaux d’entrée de différentes longueurs. Pour les valeurs absentes des tableaux plus courts, la fonction utilise un JSON null dans l’objet.
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 |
| } |
| ] |
+------------------+
Traitement du tableau de valeurs vides et NULL¶
Comme le montre l’exemple suivant, si vous passez un NULL pour tout tableau d’entrée, la fonction renvoie un NULL SQL :
SELECT ARRAYS_ZIP(
[1, 2, 3],
NULL,
[100, 200, 300]
) AS zipped_array;
+--------------+
| ZIPPED_ARRAY |
|--------------|
| NULL |
+--------------+
Dans l’exemple suivant, tous les tableaux d’entrée sont vides, ce qui amène la fonction à renvoyer un objet vide :
SELECT ARRAYS_ZIP(
[], [], []
) AS zipped_array;
+--------------+
| ZIPPED_ARRAY |
|--------------|
| [ |
| {} |
| ] |
+--------------+
Dans l’exemple suivant, certains des éléments des tableaux d’entrée sont NULL. Dans les objets renvoyés, les valeurs de ces éléments sont des valeurs JSON nulles :
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 |
| } |
| ] |
+-----------------+