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 esta função é chamada como uma função de janela, ela não oferece suporte para:

    • Uma cláusula ORDER BY dentro da cláusula OVER.

    • Quadros de janela explícitos.

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;
Copy
+---+------+-------+
| G |  K   |   V   |
|---+------+-------|
| 0 | name | "Joe" |
| 0 | age  | 21    |
| 1 | name | "Sue" |
| 1 | zip  | 94401 |
+---+------+-------+

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

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