- Catégories :
Fonctions de données semi-structurées et structurées (tableau/objet)
OBJECT_CONSTRUCT¶
Renvoie un OBJECT construit à partir des arguments.
- Voir aussi :
Syntaxe¶
OBJECT_CONSTRUCT( [<key1>, <value1> [, <keyN>, <valueN> ...]] )
OBJECT_CONSTRUCT( * )
Renvoie¶
Le type de données de la valeur renvoyée est OBJECT.
Notes sur l’utilisation¶
La fonction accepte :
Une séquence de zéro ou plusieurs paires clé-valeur (où les clés sont des chaînes et les valeurs sont de tout type).
Un astérisque. Lorsqu’il est appelé avec un astérisque, l’objet est construit à l’aide des noms d’attribut en tant que clés et des valeurs de tuple associées en tant que valeurs. Voir les exemples ci-dessous.
Si la clé ou la valeur est NULL (c’est-à-dire SQL NULL), la paire clé-valeur est omise de l’objet résultant. Une paire clé-valeur composée d’une chaîne non nulle comme clé et d’un JSON NULL comme valeur (c.-à-d. PARSE_JSON(“NULL”)) n’est pas omise.
L’objet construit ne conserve pas nécessairement l’ordre d’origine des paires clé-valeur.
Dans de nombreux contextes, vous pouvez utiliser une constante OBJECT (également appelée OBJECT littéral) au lieu de la fonction OBJECT_CONSTRUCT.
Exemples¶
Cela montre comment construire un objet simple :
SELECT OBJECT_CONSTRUCT('a',1,'b','BBBB', 'c',null); +----------------------------------------------+ | OBJECT_CONSTRUCT('A',1,'B','BBBB', 'C',NULL) | |----------------------------------------------| | { | | "a": 1, | | "b": "BBBB" | | } | +----------------------------------------------+
Cet exemple utilise *
pour obtenir le nom d’attribut et la valeur de la clause FROM :
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" | | } | +---------------------------------+
Ceci est un autre exemple utilisant *
. Dans ce cas, les noms d’attribut ne sont pas spécifiés, donc Snowflake utilise « COLUMN1 », « COLUMN2 », etc. :
SELECT OBJECT_CONSTRUCT(*) FROM VALUES(1,'x'), (2,'y'); +---------------------+ | OBJECT_CONSTRUCT(*) | |---------------------| | { | | "COLUMN1": 1, | | "COLUMN2": "x" | | } | | { | | "COLUMN1": 2, | | "COLUMN2": "y" | | } | +---------------------+
Cet exemple utilise SQL NULL et la chaîne « 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 prend en charge les expressions et les requêtes pour ajouter, modifier ou omettre des valeurs de l’objet JSON.
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 | | } | +-------------------------------------------------------------------------------+