- 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 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;
+---+------+-------+
| 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" |
+-----+------+-------+