- カテゴリ:
集計関数 (半構造化データ)、 ウィンドウ関数 (一般)、 半構造化データ関数と構造化データ関数 (配列/オブジェクト)
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" |
+-----+------+-------+