Catégories :

Fonctions de données semi-structurées et structurées (tableau/objet)

ARRAY_SIZE

Renvoie la taille du tableau d’entrée.

Une variation de ARRAY_SIZE prend une valeur de VARIANT en entrée. Si la valeur VARIANT contient un tableau, sa taille est renvoyée ; sinon, NULL est renvoyé si la valeur n’est pas un tableau.

Syntaxe

ARRAY_SIZE( <array> )

ARRAY_SIZE( <variant> )
Copy

Renvoie

Le type de données de la valeur renvoyée est INTEGER.

Notes sur l’utilisation

  • Prend une valeur ARRAY en entrée et renvoie la taille du tableau (c’est-à-dire le plus grand index + 1).

    Si le tableau est un tableau clairsemé cela signifie que la taille inclut les éléments non définis ainsi que les éléments définis.

  • Un argument NULL renvoie NULL en conséquence.

Exemples

Voici un exemple simple :

SELECT ARRAY_SIZE(ARRAY_CONSTRUCT(1, 2, 3)) AS SIZE;
+------+
| SIZE |
|------|
|    3 |
+------+
Copy

Voici un exemple un peu plus complexe, utilisant cette fois le type de données VARIANT :

CREATE OR replace TABLE colors (v variant);

INSERT INTO
   colors
   SELECT
      parse_json(column1) AS v
   FROM
   VALUES
     ('[{r:255,g:12,b:0},{r:0,g:255,b:0},{r:0,g:0,b:255}]'),
     ('[{r:255,g:128,b:0},{r:128,g:255,b:0},{r:0,g:255,b:128},{r:0,g:128,b:255},{r:128,g:0,b:255},{r:255,g:0,b:128}]')
    v;
Copy

Récupérez la taille de chaque tableau dans la colonne VARIANT :

SELECT ARRAY_SIZE(v) from colors;
+---------------+
| ARRAY_SIZE(V) |
|---------------|
|             3 |
|             6 |
+---------------+
Copy

Récupérez le dernier élément de chaque tableau dans la colonne VARIANT :

SELECT GET(v, ARRAY_SIZE(v)-1) FROM colors;
+-------------------------+
| GET(V, ARRAY_SIZE(V)-1) |
|-------------------------|
| {                       |
|   "b": 255,             |
|   "g": 0,               |
|   "r": 0                |
| }                       |
| {                       |
|   "b": 128,             |
|   "g": 0,               |
|   "r": 255              |
| }                       |
+-------------------------+
Copy