- Kategorien:
Funktionen für semistrukturierte und strukturierte Daten (Array/Objekt)
OBJECT_CONSTRUCT¶
Gibt ein OBJECT zurück, das aus den Argumenten aufgebaut ist.
- Siehe auch:
Syntax¶
OBJECT_CONSTRUCT( [<key>, <value> [, <key>, <value> , ...]] )
OBJECT_CONSTRUCT(*)
Argumente¶
key
Der Schlüssel in einem Schlüssel-Wert-Paar. Jeder Schlüssel ist ein VARCHAR-Wert.
value
Der mit dem Schlüssel verbundene Wert Der Wert kann ein beliebiger Datentyp sein.
*
Beim Aufrufen mit einem Sternchen (Platzhalter) wird der OBJECT-Wert aus den angegebenen Daten unter Verwendung der Attributnamen als Schlüssel und der zugeordneten Werte als Wert erstellt. Siehe die Beispiele unten.
Wenn Sie einen Platzhalter an die Funktion übergeben, können Sie den Platzhalter mit dem Namen oder Alias für die Tabelle qualifizieren. Um beispielsweise alle Spalten aus der Tabelle
mytable
zu übergeben, geben Sie Folgendes ein:(mytable.*)
Sie können auch die Schlüsselwörter ILIKE und EXCLUDE zum Filtern verwenden:
ILIKE filtert nach Spaltennamen, die dem angegebenen Muster entsprechen. Es ist nur ein Muster erlaubt. Beispiel:
(* ILIKE 'col1%')
EXCLUDE filtert Spaltennamen heraus, die nicht mit der angegebenen Spalte oder den angegebenen Spalten übereinstimmen. Beispiel:
(* EXCLUDE col1) (* EXCLUDE (col1, col2))
Qualifizierer sind gültig, wenn Sie diese Schlüsselwörter verwenden. Das folgende Beispiel verwendet das Schlüsselwort ILIKE, um nach allen Spalten zu filtern, die dem Muster
col1%
in der Tabellemytable
entsprechen:(mytable.* ILIKE 'col1%')
Die Schlüsselwörter ILIKE und EXCLUDE können nicht in einem einzigen Funktionsaufruf kombiniert werden.
Sie können den Platzhalter auch in einer Objektkonstante angeben.
Für diese Funktion sind die Schlüsselwörter ILIKE und EXCLUDE nur in einer SELECT-Liste oder GROUP BY-Klausel gültig.
Weitere Informationen zu den Schlüsselwörtern ILIKE und EXCLUDE finden Sie im Abschnitt „Parameter“ unter SELECT.
Rückgabewerte¶
Gibt einen Wert vom Typ OBJECT zurück.
Nutzungshinweise¶
Wenn der Schlüssel oder Wert NULL (d. h. SQL NULL) ist, wird das Schlüssel-Wert-Paar im resultierenden Objekt weggelassen. Ein Schlüssel-Wert-Paar bestehend aus einer Nicht-NULL-Zeichenfolge als Schlüssel und einer JSON-Null als Wert (d. h.
PARSE_JSON('NULL')
) wird nicht weggelassen. Weitere Informationen dazu finden Sie unter VARIANT null.Das konstruierte Objekt behält nicht unbedingt die ursprüngliche Reihenfolge der Schlüssel-Wert-Paare bei.
In vielen Kontexten können Sie anstelle der OBJECT_CONSTRUCT-Funktion auch eine OBJECT-Konstante (OBJECT-Literal genannt) verwenden.
Beispiele¶
Dieses Beispiel zeigt, wie ein einfaches Objekt erstellt wird:
SELECT OBJECT_CONSTRUCT('a', 1, 'b', 'BBBB', 'c', NULL);
+--------------------------------------------------+
| OBJECT_CONSTRUCT('A', 1, 'B', 'BBBB', 'C', NULL) |
|--------------------------------------------------|
| { |
| "a": 1, |
| "b": "BBBB" |
| } |
+--------------------------------------------------+
In diesem Beispiel wird *
verwendet, um den Attributnamen und den Wert aus der FROM Klausel abzurufen:
CREATE OR REPLACE TABLE demo_table_1 (province VARCHAR, created_date DATE);
INSERT INTO demo_table_1 (province, created_date) VALUES
('Manitoba', '2024-01-18'::DATE),
('Alberta', '2024-01-19'::DATE);
SELECT province, created_date
FROM demo_table_1
ORDER BY province;
+----------+--------------+
| PROVINCE | CREATED_DATE |
|----------+--------------|
| Alberta | 2024-01-19 |
| Manitoba | 2024-01-18 |
+----------+--------------+
SELECT OBJECT_CONSTRUCT(*) AS oc
FROM demo_table_1
ORDER BY oc['PROVINCE'];
+---------------------------------+
| OC |
|---------------------------------|
| { |
| "CREATED_DATE": "2024-01-19", |
| "PROVINCE": "Alberta" |
| } |
| { |
| "CREATED_DATE": "2024-01-18", |
| "PROVINCE": "Manitoba" |
| } |
+---------------------------------+
Dieses Beispiel verwendet *
und enthält das Schlüsselwort ILIKE, um die Ausgabe zu filtern:
SELECT OBJECT_CONSTRUCT(* ILIKE 'prov%') AS oc
FROM demo_table_1
ORDER BY oc['PROVINCE'];
+--------------------------+
| OC |
|--------------------------|
| { |
| "PROVINCE": "Alberta" |
| } |
| { |
| "PROVINCE": "Manitoba" |
| } |
+--------------------------+
Dieses Beispiel verwendet *
und enthält das Schlüsselwort EXCLUDE, um die Ausgabe zu filtern:
SELECT OBJECT_CONSTRUCT(* EXCLUDE province) AS oc
FROM demo_table_1
ORDER BY oc['PROVINCE'];
+--------------------------------+
| OC |
|--------------------------------|
| { |
| "CREATED_DATE": "2024-01-18" |
| } |
| { |
| "CREATED_DATE": "2024-01-19" |
| } |
+--------------------------------+
Dieses Beispiel entspricht dem vorherigen Beispiel, aber es verwendet eine Objektkonstante anstelle der Funktion OBJECT_CONSTRUCT:
SELECT {* EXCLUDE province} AS oc
FROM demo_table_1
ORDER BY oc['PROVINCE'];
+--------------------------------+
| OC |
|--------------------------------|
| { |
| "CREATED_DATE": "2024-01-18" |
| } |
| { |
| "CREATED_DATE": "2024-01-19" |
| } |
+--------------------------------+
Dies ist ein weiteres Beispiel mit *
. In diesem Fall werden die Namen der Attribute nicht angegeben, sodass Snowflake COLUMN1
, COLUMN2
usw. verwendet:
SELECT OBJECT_CONSTRUCT(*) FROM VALUES(1,'x'), (2,'y');
+---------------------+
| OBJECT_CONSTRUCT(*) |
|---------------------|
| { |
| "COLUMN1": 1, |
| "COLUMN2": "x" |
| } |
| { |
| "COLUMN1": 2, |
| "COLUMN2": "y" |
| } |
+---------------------+
Dieses Beispiel verwendet SQL-NULL und die Zeichenfolge 'null'
:
SELECT OBJECT_CONSTRUCT(
'Key_One', PARSE_JSON('NULL'),
'Key_Two', NULL,
'Key_Three', 'null') AS obj;
+-----------------------+
| OBJ |
|-----------------------|
| { |
| "Key_One": null, |
| "Key_Three": "null" |
| } |
+-----------------------+
OBJECT_CONSTRUCT unterstützt Ausdrücke und Abfragen zum Hinzufügen, Ändern oder Weglassen von Werten im JSON-Objekt.
SELECT OBJECT_CONSTRUCT(
'foo', 1234567,
'dataset_size', (SELECT COUNT(*) FROM demo_table_1),
'distinct_province', (SELECT COUNT(DISTINCT province) FROM demo_table_1),
'created_date_seconds', extract(epoch_seconds, created_date)
) AS json_object
FROM demo_table_1;
+---------------------------------------+
| JSON_OBJECT |
|---------------------------------------|
| { |
| "created_date_seconds": 1705536000, |
| "dataset_size": 2, |
| "distinct_province": 2, |
| "foo": 1234567 |
| } |
| { |
| "created_date_seconds": 1705622400, |
| "dataset_size": 2, |
| "distinct_province": 2, |
| "foo": 1234567 |
| } |
+---------------------------------------+