Categorias:

Funções de dados semiestruturados (Matriz/objeto)

ARRAY_SIZE

Retorna o tamanho da matriz de entrada.

Uma variação de ARRAY_SIZE toma um valor VARIANT como entrada. Se o valor VARIANT contiver uma matriz, o tamanho da matriz será retornado; caso contrário, NULL será retornado se o valor não for uma matriz.

Sintaxe

ARRAY_SIZE( <array> )

ARRAY_SIZE( <variant> )

Retornos

O tipo de dados do valor retornado é INTEGER.

Notas de uso

  • Obtém um valor ARRAY como entrada e retorna o tamanho da matriz (ou seja, o maior índice + 1).

    Se a matriz for uma matriz esparsa, isto significa que o tamanho inclui os elementos indefinidos, bem como os elementos definidos.

  • Um argumento NULL retorna NULL como resultado.

Exemplos

Aqui está um exemplo simples:

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

Aqui está um exemplo um pouco mais complexo, desta vez usando o tipo de dados 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;

Recuperar o tamanho de cada matriz na coluna VARIANT:

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

Recuperar o último elemento de cada matriz na coluna 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              |
| }                       |
+-------------------------+