- 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
key
und/odervalue
den 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
key
undvalue
identisch 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" |
+-----+------+-------+