カテゴリ:

半構造化データ関数と構造化データ関数 (配列/オブジェクト)

OBJECT_CONSTRUCT_KEEP_NULL

NULL の値を持つキーと値のペアを保持する、引数から構築された OBJECT を返します。

こちらもご参照ください。

OBJECT_CONSTRUCT

構文

OBJECT_CONSTRUCT_KEEP_NULL( [<key>, <value> [, <key>, <value> , ...]] )

OBJECT_CONSTRUCT_KEEP_NULL(*)
Copy

引数

key

キーと値のペアのキー。各キーは VARCHAR 値です。

value

キーに関連付けられた値。値はどのデータ型でも使用できます。

*

アスタリスク(ワイルドカード)を付けて呼び出す場合、 OBJECT 値は属性名をキー、関連する値を値として、指定されたデータから構築されます。以下の例をご参照ください。

関数にワイルドカードを渡す場合、ワイルドカードをテーブルの名前またはエイリアスで修飾することができます。例えば、 mytable というテーブルからすべての列を渡すには、以下のように指定します。

(mytable.*)
Copy

ILIKE と EXCLUDE キーワードを使ってフィルタリングすることもできます。

  • ILIKE は、指定されたパターンに一致する列名でフィルターします。許されるパターンは1つのみです。例:

    (* ILIKE 'col1%')
    
    Copy
  • EXCLUDE は、指定された列に一致しない列名をフィルターします。例:

    (* EXCLUDE col1)
    
    (* EXCLUDE (col1, col2))
    
    Copy

修飾子は、これらのキーワードを使用する場合に有効です。以下の例では、 ILIKE キーワードを使用して、テーブル mytable 内のパターン col1% に一致するすべての列をフィルターします。

(mytable.* ILIKE 'col1%')
Copy

ILIKE と EXCLUDE キーワードは、1つの関数呼び出し内で組み合わせることはできません。

この関数では、 ILIKE と EXCLUDE キーワードは SELECT リストまたは GROUP BY 句でのみ有効です。

ILIKE と EXCLUDE キーワードの詳細については、 SELECT の「パラメータ」セクションをご参照ください。

戻り値

戻り値のデータ型は OBJECT です。

使用上の注意

  • キーが NULL (つまり SQL NULL)の場合、キーと値のペアは結果のオブジェクトから省略されます。ただし、値が NULL の場合、キーと値のペアは保持されます。

  • 構築されたオブジェクトは、キーと値のペアにおける元の順序を保持するとは限りません。

この例は、 OBJECT_CONSTRUCT と OBJECT_CONSTRUCT_KEEP_NULL の違いを示しています。

SELECT OBJECT_CONSTRUCT('key_1', 'one', 'key_2', NULL) AS WITHOUT_KEEP_NULL,
       OBJECT_CONSTRUCT_KEEP_NULL('key_1', 'one', 'key_2', NULL) AS KEEP_NULL_1,
       OBJECT_CONSTRUCT_KEEP_NULL('key_1', 'one', NULL, 'two') AS KEEP_NULL_2;
Copy
+-------------------+-------------------+------------------+
| WITHOUT_KEEP_NULL | KEEP_NULL_1       | KEEP_NULL_2      |
|-------------------+-------------------+------------------|
| {                 | {                 | {                |
|   "key_1": "one"  |   "key_1": "one", |   "key_1": "one" |
| }                 |   "key_2": null   | }                |
|                   | }                 |                  |
+-------------------+-------------------+------------------+

次の例も OBJECT_CONSTRUCT と OBJECT_CONSTRUCT_KEEP NULL の違いを示していますが、この例では小さなテーブル(クエリの前に表示)を使用しています。

CREATE TABLE demo_table_1_with_nulls (province VARCHAR, created_date DATE);
INSERT INTO demo_table_1_with_nulls (province, created_date) VALUES
  ('Manitoba', '2024-01-18'::DATE),
  ('British Columbia', NULL),
  ('Alberta', '2024-01-19'::DATE),
  (NULL, '2024-01-20'::DATE);
Copy
SELECT *
  FROM demo_table_1_with_nulls
  ORDER BY province;
Copy
+------------------+--------------+
| PROVINCE         | CREATED_DATE |
|------------------+--------------|
| Alberta          | 2024-01-19   |
| British Columbia | NULL         |
| Manitoba         | 2024-01-18   |
| NULL             | 2024-01-20   |
+------------------+--------------+
SELECT OBJECT_CONSTRUCT(*) AS oc,
       OBJECT_CONSTRUCT_KEEP_NULL(*) AS oc_keep_null
  FROM demo_table_1_with_nulls
  ORDER BY oc_keep_null['PROVINCE'];
Copy
+----------------------------------+----------------------------------+
| OC                               | OC_KEEP_NULL                     |
|----------------------------------+----------------------------------|
| {                                | {                                |
|   "CREATED_DATE": "2024-01-19",  |   "CREATED_DATE": "2024-01-19",  |
|   "PROVINCE": "Alberta"          |   "PROVINCE": "Alberta"          |
| }                                | }                                |
| {                                | {                                |
|   "PROVINCE": "British Columbia" |   "CREATED_DATE": null,          |
| }                                |   "PROVINCE": "British Columbia" |
|                                  | }                                |
| {                                | {                                |
|   "CREATED_DATE": "2024-01-18",  |   "CREATED_DATE": "2024-01-18",  |
|   "PROVINCE": "Manitoba"         |   "PROVINCE": "Manitoba"         |
| }                                | }                                |
| {                                | {                                |
|   "CREATED_DATE": "2024-01-20"   |   "CREATED_DATE": "2024-01-20",  |
| }                                |   "PROVINCE": null               |
|                                  | }                                |
+----------------------------------+----------------------------------+

密接に関連する関数 OBJECT_CONSTRUCT を使用する例については、 OBJECT_CONSTRUCT をご参照ください。