- 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>)
Função de janela
OBJECT_AGG(<key>, <value>)
OVER ( [ PARTITION BY <expr2> ] )
Notas de uso¶
As tuplas de entrada com NULL
key
e/ouvalue
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
evalue
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 |
---+------+-------+
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" |
} |
-------------------+
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" |
-----+------+-------+