- 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 - mytablezu ü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 Tabelle- mytableentsprechen:- (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                      |
| }                                     |
+---------------------------------------+