- Kategorien:
Aggregatfunktionen (Semistrukturierte Daten), Fensterfunktionen (Allgemein), Funktionen für semistrukturierte und strukturierte Daten (Array/Objekt)
OBJECT_AGG¶
Gibt ein OBJECT pro Gruppe zurück. Bei jedem Eingabepaar (key, value) mit dem Schlüssel key vom Typ VARCHAR und dem Wert value vom Typ VARIANT enthält das resultierende OBJECT ein Feld key: value.
- Aliasse:
OBJECTAGG
Syntax¶
Aggregatfunktion
OBJECT_AGG(<key>, <value>)
Fensterfunktionen
OBJECT_AGG(<key>, <value>) OVER ( [ PARTITION BY <expr2> ] )
Nutzungshinweise¶
Eingabetupel, bei denen
keyund/odervalueden Wert NULL haben, werden ignoriert.Doppelte Schlüssel innerhalb einer Gruppe führen zu einem
Duplicate field key 'key'-Fehler.Das Schlüsselwort DISTINCT wird unterstützt, filtert jedoch nur doppelte Zeilen heraus, bei denen
keyundvalueidentisch sind.
Wenn diese Funktion als Fensterfunktion aufgerufen wird, wird sie nicht unterstützt:
Eine ORDER BY-Klausel innerhalb der OVER-Klausel.
Explizite Fensterrahmen.
Beispiele¶
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 |
+---+------+-------+
In diesem Beispiel wird OBJECT_AGG als Aggregatfunktion verwendet:
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" |
+-----+------+-------+