- カテゴリ:
半構造化データ関数と構造化データ関数 (配列/オブジェクト)
OBJECT_CONSTRUCT¶
引数から構築された OBJECT を返します。
- こちらもご参照ください。
構文¶
OBJECT_CONSTRUCT( [<key1>, <value1> [, <keyN>, <valueN> ...]] )
OBJECT_CONSTRUCT( * )
戻り値¶
戻り値のデータ型は OBJECT です。
使用上の注意¶
この関数は、次のいずれかを受け入れます。
0個以上のキーと値のペアにおけるシーケンス(キーは文字列で、値は任意の型)。
アスタリスク。アスタリスクで呼び出されると、オブジェクトは属性名をキーとして、関連するタプル値を値として使用して構築されます。以下の例をご参照ください。
キーまたは値が NULL (つまり SQL NULL)の場合、キーと値のペアは結果のオブジェクトから省略されます。キーとしてnull以外の文字列と、値として JSON NULL で構成されるキーと値のペア(つまり、PARSE_JSON('NULL'))は省略されません。
構築されたオブジェクトは、キーと値のペアの元の順序を保持するとは限りません。
多くのコンテキストでは、OBJECT_CONSTRUCT関数の代わりに OBJECT定数 (OBJECTリテラル とも呼ばれます)を使用できます。
例¶
これは、単純なオブジェクトを作成する方法を示しています。
SELECT OBJECT_CONSTRUCT('a',1,'b','BBBB', 'c',null); +----------------------------------------------+ | OBJECT_CONSTRUCT('A',1,'B','BBBB', 'C',NULL) | |----------------------------------------------| | { | | "a": 1, | | "b": "BBBB" | | } | +----------------------------------------------+
この例では、 *
を使用して、 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" | | } | +---------------------------------+
これは、 *
を使用した別の例です。この場合、属性名は指定されていないため、Snowflakeは「COLUMN1」、「COLUMN2」などを使用します。
SELECT OBJECT_CONSTRUCT(*) FROM VALUES(1,'x'), (2,'y'); +---------------------+ | OBJECT_CONSTRUCT(*) | |---------------------| | { | | "COLUMN1": 1, | | "COLUMN2": "x" | | } | | { | | "COLUMN1": 2, | | "COLUMN2": "y" | | } | +---------------------+
この例では、 SQL NULL と文字列「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 は、 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 | | } | +-------------------------------------------------------------------------------+