- Catégories :
Fonctions d’agrégation (Données semi-structurées) , Fonctions de la fenêtre (Général) , Fonctions de données semi-structurées et structurées (Tableau/Objet)
OBJECT_AGG¶
Renvoie un OBJECT par groupe. Pour chaque paire d’entrées (key
, value
), où key
doit être un VARCHAR et value
doit être un VARIANT, l’OBJECT résultant contient un champ key
: value
.
- Alias :
OBJECTAGG
Syntaxe¶
Fonction d’agrégation
OBJECT_AGG(<key>, <value>)
Fonction de fenêtre
OBJECT_AGG(<key>, <value>)
OVER ( [ PARTITION BY <expr2> ] )
Notes sur l’utilisation¶
Les tuples d’entrée avec
key
NULL et/ouvalue
sont ignorés.Les clés en double dans un groupe entraînent une erreur
Duplicate field key 'key'
.Le mot-clé DISTINCT est pris en charge, mais il ne filtre que les lignes en double pour lesquelles
key
etvalue
sont égales.Dans le cas d’une utilisation en tant que fonction de fenêtre :
Cette fonction ne prend pas en charge :
Sous-clause ORDER BY dans la clause OVER().
Cadres de fenêtre.
Exemples¶
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 |
---+------+-------+
Cet exemple utilise OBJECT_AGG()
comme fonction d’agrégation :
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" |
-----+------+-------+