amazon-redshift - Amazon Redshift 中 LISTAGG 函数的替代方法
问题描述
我使用 LISTAGG 函数将行值转换为一列,但面临以下错误。搜索时,当结果行超过 65535 [https://docs.aws.amazon.com/redshift/latest/dg/r_LISTAGG.html]。我的结果集更多 100000 所以我得到了下面的异常。这个功能的替代品是什么?如何在 redshift 中实现我的用例。请帮忙。
-----------------------------------------------
error: Result size exceeds LISTAGG limit
code: 8001
context: LISTAGG limit: 65535
process: query18_863_20899937 [pid=66066]```
**My Use Case**
From:
ID dates
00 date00
01 date00
00 date01
00 date02
00 date03
01 date01
**To: [Using LISTAGG function]**
ID dates
00 date00,date01,date02,date03
01 date00,date01
Thanks.
解决方案
显示您正在运行的查询(或其关键部分)会很有帮助,但我想我可以建议一个方向。LISTAGG() 有一个“WITHIN GROUP”选项,并记录在您在帖子中提到的链接中。
组内的 Listagg() 将仅为“GROUP BY”子句中定义的组中的值聚合文本列。因此,为了满足您想要的输出,您应该能够执行以下操作:
select ID, listagg(dates) within group as dates
from <table>
group by ID;
将存在相同的 listagg() 限制 - 只是现在它应用于每个“分组依据”组。如果这仍然会产生一个太长的文本字符串,您将需要将内容分成更多组。发生这种情况时,我将计算一个“子部分”列,该列在组中每 1,000 行递增一次。这样我可以确保没有任何组会产生超过 1,000 行供 listagg() 使用。
推荐阅读
- java - 转换汉字和 UTF-8
- javascript - 我如何验证用户是否在 localStorage 中有令牌
- python - Python:使用 Image PIL 显示图像返回黑色方块
- python - Python:为什么在临时禁止后会打印两次警告?
- sql - 如何提高 XMLAGG(XMLELEMENT() 编写的查询性能?
- javascript - React 子组件没有呈现在它应该呈现的位置
- .net - DAO.DBEngine.CompactDatabase 的 ODBC 等效项
- c# - 从 UDP 接收到的消息播放音频,点击声音(Naudio API)
- r - 如何将带有“,”的“价格”列整理为数字格式?例如 1,250,000 到 1250000(R 编程)
- database - 我创建了一个 laravel 然后