- Catégories :
Fonctions d’agrégation (Données semi-structurées) , Fonctions de 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
keyNULL et/ouvaluesont 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
keyetvaluesont égales.
Lorsque cette fonction est appelée en tant que fonction de fenêtre, elle ne prend pas en charge :
Une clause ORDER BY dans la clause OVER.
Cadres de fenêtre explicites.
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" |
+-----+------+-------+