カテゴリ:

集計関数 (半構造化データ)、 ウィンドウ関数 (一般)、 半構造化データ関数 (配列/オブジェクト)

OBJECT_AGG

グループごとに1つの OBJECT を返します。各(キー)入力ペアに対して、 キー は VARCHAR で、 は VARIANT でなければなりません。結果の OBJECT には、 キー フィールドが含まれます。

エイリアス:

OBJECTAGG

構文

集計関数

OBJECT_AGG(<key>, <value>)

ウィンドウ関数

OBJECT_AGG(<key>, <value>)
    OVER ( [ PARTITION BY <expr2> ] )
    [ WITHIN GROUP ( <orderby_clause> ) ]

使用上の注意

  • NULL キー および/または を持つ入力タプルは無視されます。

  • グループ内でキーが重複するとエラーになります。

  • DISTINCT キーワードはサポートされていますが、 キー の両方が等しい重複行のみを除外します。

  • ウィンドウ関数として使用する場合:

    • この関数は次をサポートしていません。

      • OVER()句のORDER BY サブ句。

      • ウィンドウフレーム。

CREATE OR REPLACE TABLE objectagg_example(g NUMBER, k VARCHAR(30), v VARIANT);
    INSERT INTO objectagg_example SELECT 0, 'name', 'Joe'::variant;
    INSERT INTO objectagg_example SELECT 0, 'age', 21::variant;
    INSERT INTO objectagg_example SELECT 1, 'name', 'Sue'::variant;
    INSERT INTO objectagg_example SELECT 1, 'zip', 94401::variant;

SELECT * FROM objectagg_example;

---+------+-------+
 G |  K   |   V   |
---+------+-------+
 0 | name | "Joe" |
 0 | age  | 21    |
 1 | name | "Sue" |
 1 | zip  | 94401 |
---+------+-------+
SELECT objectagg(k, v) FROM objectagg_example GROUP BY g;

------------------+
 OBJECTAGG(K, V)  |
------------------+
 {                |
   "name": "Sue", |
   "zip": 94401   |
 }                |
 {                |
   "age": 21,     |
   "name": "Joe"  |
 }                |
------------------+
SELECT seq, key, value
FROM (SELECT objectagg(k, v) o FROM objectagg_example GROUP BY g),
    LATERAL FLATTEN(input => o);

-----+------+-------+
 SEQ | KEY  | VALUE |
-----+------+-------+
 1   | name | "Sue" |
 1   | zip  | 94401 |
 2   | age  | 21    |
 2   | name | "Joe" |
-----+------+-------+