类别:

聚合函数 (半结构化数据)、窗口函数 (常规)、半结构化和结构化数据函数 (数组/对象)

OBJECT_AGG

每组返回一个 OBJECT。对于每个(keyvalue)输入对(其中 key 必须是 VARCHAR,value 必须是 VARIANT),生成的 OBJECT 包含一个 key:value 字段。

别名:

OBJECTAGG

语法

聚合函数

OBJECT_AGG(<key>, <value>)
Copy

窗口函数

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

使用说明

  • key 和/或 value 为 NULL 的输入元组将被忽略。

  • 组中的重复键会导致 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" |
+-----+------+-------+
语言: 中文