- 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 (Tableau/Objet)
OBJECT_AGG¶
Renvoie un OBJECT par groupe. Pour chaque paire d’entrées (clé
, valeur
), où clé
doit être un VARCHAR et valeur
doit être un VARIANT, l’OBJECT résultant contient un champ clé
: valeur
.
- Alias :
OBJECTAGG
Syntaxe¶
Fonction d’agrégation
OBJECT_AGG(<key>, <value>)
Fonction de fenêtre
OBJECT_AGG(<key>, <value>)
OVER ( [ PARTITION BY <expr2> ] )
[ WITHIN GROUP ( <orderby_clause> ) ]
Notes sur l’utilisation¶
Les tuples d’entrée avec
clé
NULL et/ouvaleur
sont ignorés.Les clés en double dans un groupe entraînent une erreur.
Le mot-clé DISTINCT est pris en charge, mais il ne filtre que les lignes en double pour lesquelles
clé
etvaleur
sont égales.Lorsqu’il est utilisé comme une 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 |
---+------+-------+
SELECT objectagg(k, v) FROM objectagg_example GROUP BY g;
------------------+
OBJECTAGG(K, V) |
------------------+
{ |
"name": "Sue", |
"zip": 94401 |
} |
{ |
"age": 21, |
"name": "Joe" |
} |
------------------+
SELECT seq, key, value
FROM (SELECT objectagg(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" |
-----+------+-------+