flink sql STRING_AGG
时间: 2025-01-06 12:33:26 浏览: 6
### Flink SQL `STRING_AGG` 函数详解
在Flink SQL中,`STRING_AGG` 是一种聚合函数,用于将多行字符串数据连接成单个字符串,并允许指定分隔符[^1]。
语法如下:
```sql
STRING_AGG(string, delimiter)
```
其中:
- `string`: 要连接的字符串表达式。
- `delimiter`: 连接各个部分时使用的分隔符。
#### 示例代码
假设有一个名为 `orders` 的表,结构如下:
| order_id | product_name |
|----------|--------------|
| 1 | Apple |
| 1 | Banana |
| 2 | Orange |
要获取每个订单对应的产品列表,可以这样写查询语句:
```sql
SELECT
order_id,
STRING_AGG(product_name, ', ') AS products
FROM orders
GROUP BY order_id;
```
这会返回每条记录中的产品名称通过逗号和空格拼接的结果[^1]。
对于更复杂的需求,比如去除重复项后再做拼接,则可以在内部嵌套其他SQL操作来实现特定逻辑处理[^1]。
相关问题
flink sql 聚合数组再转成字符串
在Apache Flink SQL中,如果你有一个包含数组的数据,并想要对数组元素进行聚合操作,然后将结果转换为字符串,你可以使用`array`函数来处理数组,以及`string`函数或`map`函数配合`reduce`或`collect_list`等聚合函数。
假设你有一个名为`my_array`的字段,它是一个整数数组,你可以这样做:
```sql
SELECT STRING_AGG(SUBSTRING(stringify(my_array), ',', LENGTH(stringify(my_array)) - 1), ',')
FROM your_table
```
这里,`stringify`函数将数组转换为逗号分隔的字符串,`SUBSTRING`用于去除最后一个多余的逗号,`STRING_AGG`则将剩余的每个元素连接起来形成新的字符串。
或者,如果你想保持原始元素顺序并用其他字符作为分隔符,可以替换`','`为相应字符:
```sql
SELECT STRING_AGG(my_array[i], '|') AS aggregated_string
FROM (
SELECT i, my_array[i] FROM your_table
UNNEST(my_array) AS i
)
ORDER BY i;
```
在这个例子中,`UNNEST`函数会拆分数组,然后对每个元素进行`STRING_AGG`操作。
阅读全文