- カテゴリ:
集計関数 (半構造化データ)、 ウィンドウ関数 (一般)、 半構造化データ関数と構造化データ関数 (配列/オブジェクト)
OBJECT_AGG¶
グループごとに1つの OBJECT を返します。各(key
、 value
)入力ペアに対して、 key
は VARCHAR で、 value
は VARIANT でなければなりません。結果の OBJECT には、 key
: value
フィールドが含まれます。
- エイリアス:
OBJECTAGG
構文¶
集計関数
OBJECT_AGG(<key>, <value>)
ウィンドウ関数
OBJECT_AGG(<key>, <value>)
OVER ( [ PARTITION BY <expr2> ] )
使用上の注意¶
NULL
key
および/またはvalue
を持つ入力タプルは無視されます。グループ内でキーが重複すると
Duplicate field key 'key'
エラーが発生します。DISTINCT キーワードはサポートされていますが、
key
とvalue
の両方が等しい重複行のみを除外します。ウィンドウ関数として使用する場合、
この関数は次をサポートしていません。
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 |
---+------+-------+
この例では、 OBJECT_AGG()
を集計関数として使用しています。
SELECT object_agg(k, v) FROM objectagg_example GROUP BY g;
-------------------+
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);
-----+------+-------+
SEQ | KEY | VALUE |
-----+------+-------+
1 | name | "Sue" |
1 | zip | 94401 |
2 | age | 21 |
2 | name | "Joe" |
-----+------+-------+