- 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( [<key1>, <value1> [, <keyN>, <valueN> ...]] )
OBJECT_CONSTRUCT( * )
Rückgabewerte¶
Der Datentyp des zurückgegebenen Werts ist OBJECT.
Nutzungshinweise¶
Die Funktion akzeptiert Folgendes:
Eine Sequenz von null oder mehr Schlüssel-Wert-Paaren (wobei Schlüssel Zeichenfolgen und Werte eines beliebigen Typs sind).
Ein Sternchen. Beim Aufrufen mit einem Sternchen wird das Objekt unter Verwendung der Attributnamen als Schlüssel und der zugeordneten Tupelwerte als Werte erstellt. Siehe die Beispiele unten.
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 einem JSON-NULL-Wert (d. h. PARSE_JSON(‚NULL‘)) wird nicht weggelassen.
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¶
Dies 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 TABLE demo_table_1 (province VARCHAR, created_date DATE); INSERT INTO demo_table_1 (province, created_date) VALUES ('Manitoba', '2020-01-18'::DATE), ('Alberta', '2020-01-19'::DATE);SELECT province, created_date FROM demo_table_1 ORDER BY province; +----------+--------------+ | PROVINCE | CREATED_DATE | |----------+--------------| | Alberta | 2020-01-19 | | Manitoba | 2020-01-18 | +----------+--------------+SELECT OBJECT_CONSTRUCT(*) AS oc FROM demo_table_1 ORDER BY oc['PROVINCE']; +---------------------------------+ | OC | |---------------------------------| | { | | "CREATED_DATE": "2020-01-19", | | "PROVINCE": "Alberta" | | } | | { | | "CREATED_DATE": "2020-01-18", | | "PROVINCE": "Manitoba" | | } | +---------------------------------+
Dies ist ein weiteres Beispiel mit *
. In diesem Fall werden keine Attributnamen angegeben, daher verwendet Snowflake „COLUMN1“, „COLUMN2“ usw.:
SELECT OBJECT_CONSTRUCT(*) FROM VALUES(1,'x'), (2,'y'); +---------------------+ | OBJECT_CONSTRUCT(*) | |---------------------| | { | | "COLUMN1": 1, | | "COLUMN2": "x" | | } | | { | | "COLUMN1": 2, | | "COLUMN2": "y" | | } | +---------------------+
In diesem Beispiel werden SQL NULL und die Zeichenfolge „null“ verwendet:
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) ) FROM demo_table_1; +-------------------------------------------------------------------------------+ | 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) | | ) | |-------------------------------------------------------------------------------| | { | | "created_date_seconds": 1579305600, | | "dataset_size": 2, | | "distinct_province": 2, | | "foo": 1234567 | | } | | { | | "created_date_seconds": 1579392000, | | "dataset_size": 2, | | "distinct_province": 2, | | "foo": 1234567 | | } | +-------------------------------------------------------------------------------+