- 类别:
聚合函数 (半结构化数据)、窗口函数 (常规)、半结构化和结构化数据函数 (数组/对象)
OBJECT_AGG¶
每组返回一个 OBJECT。对于每个(key
、value
)输入对(其中 key
必须是 VARCHAR,value
必须是 VARIANT),生成的 OBJECT 包含一个 key
:value
字段。
- 别名:
OBJECTAGG
语法¶
聚合函数
OBJECT_AGG(<key>, <value>)
窗口函数
OBJECT_AGG(<key>, <value>) OVER ( [ PARTITION BY <expr2> ] )
使用说明¶
key
和/或value
为 NULL 的输入元组将被忽略。组中的重复键会导致
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" |
+-----+------+-------+