Categorias:

Funções de agregação (Dados semiestruturados) , Funções de janela (Geral) , Funções de dados semiestruturados e estruturados (Matriz/objeto)

OBJECT_AGG

Devolve um OBJECT por grupo. Para cada par de entrada (key, value), onde key deve ser um VARCHAR e value deve ser um VARIANT, OBJECT resultante contém um campo key: value.

Aliases:

OBJECTAGG

Sintaxe

Função de agregação

OBJECT_AGG(<key>, <value>)
Copy

Função de janela

OBJECT_AGG(<key>, <value>)
    OVER ( [ PARTITION BY <expr2> ] )
Copy

Notas de uso

  • As tuplas de entrada com NULL key e/ou value são ignoradas.

  • A duplicação de chaves dentro de um grupo resulta em um erro Duplicate field key 'key'.

  • A palavra-chave DISTINCT é suportada, mas só filtra linhas duplicadas onde ambos key e value são iguais.

  • Quando usado como uma função de janela:

    • Esta função não oferece suporte para:

      • Subcláusula ORDER BY na cláusula OVER().

      • Quadros de janela.

Exemplos

CREATE OR REPLACE TABLE objectagg_example(g NUMBER, k VARCHAR(30), v VARIANT);
    INSERT INTO objectagg_example SELECT 0, 'name', 'Joe'::variant;
    INSERT INTO objectagg_example SELECT 0, 'age', 21::variant;
    INSERT INTO objectagg_example SELECT 1, 'name', 'Sue'::variant;
    INSERT INTO objectagg_example SELECT 1, 'zip', 94401::variant;

SELECT * FROM objectagg_example;

---+------+-------+
 G |  K   |   V   |
---+------+-------+
 0 | name | "Joe" |
 0 | age  | 21    |
 1 | name | "Sue" |
 1 | zip  | 94401 |
---+------+-------+
Copy

Este exemplo usa OBJECT_AGG() como uma função agregada:

SELECT object_agg(k, v) FROM objectagg_example GROUP BY g;

-------------------+
 OBJECT_AGG(K, V)  |
-------------------+
 {                 |
   "name": "Sue",  |
   "zip": 94401    |
 }                 |
 {                 |
   "age": 21,      |
   "name": "Joe"   |
 }                 |
-------------------+
Copy
SELECT seq, key, value
FROM (SELECT object_agg(k, v) o FROM objectagg_example GROUP BY g),
    LATERAL FLATTEN(input => o);

-----+------+-------+
 SEQ | KEY  | VALUE |
-----+------+-------+
 1   | name | "Sue" |
 1   | zip  | 94401 |
 2   | age  | 21    |
 2   | name | "Joe" |
-----+------+-------+
Copy