カテゴリ:

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

OBJECT_AGG

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

エイリアス:

OBJECTAGG

構文

集計関数

OBJECT_AGG(<key>, <value>) 
Copy

ウィンドウ関数

OBJECT_AGG(<key>, <value>) OVER ( [ PARTITION BY <expr2> ] ) 
Copy

使用上の注意

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

  • グループ内でキーが重複すると Duplicate field key 'key' エラーが発生します。

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

  • この関数がウィンドウ関数として呼び出される場合、以下はサポートされていません。

    • 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; 
Copy
+---+------+-------+ | G | K | V | |---+------+-------| | 0 | name | "Joe" | | 0 | age | 21 | | 1 | name | "Sue" | | 1 | zip | 94401 | +---+------+-------+ 

この例では、 OBJECT_AGG を集計関数として使用しています。

SELECT OBJECT_AGG(k, v) FROM objectagg_example GROUP BY g; 
Copy
+-------------------+ | OBJECT_AGG(K, V) | |-------------------| | { | | "name": "Sue", | | "zip": 94401 | | } | | { | | "age": 21, | | "name": "Joe" | | } | +-------------------+ 
SELECT seq, key, value FROM (SELECT object_agg(k, v) o FROM objectagg_example GROUP BY g), LATERAL FLATTEN(input => o); 
Copy
+-----+------+-------+ | SEQ | KEY | VALUE | |-----+------+-------| | 1 | name | "Sue" | | 1 | zip | 94401 | | 2 | age | 21 | | 2 | name | "Joe" | +-----+------+-------+