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