amazon-redshift - 如何在 Redshift 中截断 LISTAGG() 以防止溢出
问题描述
我需要连接 Redshift 中多行的字符串。
我正在使用 LISTAGG() 在连接字符串达到限制之前效果很好:亚马逊无效操作:结果大小超过 LISTAGG 限制详细信息:
SELECT LISTAGG(string,',') WITHIN GROUP (ORDER BY string DESC) OVER (PARTITION BY name) AS string_list
解决方案
每当您在 Redshift 上超过 65535 字节的字符串(varchar)大小时,就会出现此问题,这是 Max。链接 - AWS DOCUMENTATION
在使用时在其上方创建另一层SUBSTRING()
将是必要的。
假设我有这个数据 -
所以现在当我运行查询时 -
select distinct listagg(hint,',') WITHIN group (order by id desc) over (PARTITION by Name ) as all_hints from dev.gp_test20200619;
我得到以下结果 -
即长度是->20
现在假设我希望长度不超过 16,那么 -
询问 -
SELECT SUBSTRING(all_hints,1,16), length(all_hints) as orignal_length, length(SUBSTRING(all_hints,1,16)) as new_length_using_substring
FROM (SELECT DISTINCT listagg(hint,',') WITHIN GROUP(ORDER BY id DESC) OVER (PARTITION BY Name) AS all_hints
FROM dev.gp_test20200619)
你的结果——
推荐阅读
- tfs - 下载除 TFS 中的一个以外的所有变更集
- javascript - c3.js destroy() -- 未捕获的类型错误:无法读取 null 的属性“删除”
- c# - 如何清除嵌套在 TabControl、TabPage 和 2 个面板中的文本框?
- python - 如果我们在命令行上从分配的应用程序开始,ArgumentParser 就不能正常工作
- django - 如何将 Django 语句添加到 Javascript
- python - 使用 tcp 重传的可靠 udp
- ios - 截取被 UIImageView 对象覆盖的区域
- c++ - 在方法内部调用方法会导致开销吗?
- c# - 使用 VS Code 进行 Web 抓取——“对象”类型是在未引用的程序集中定义的
- c - 编译代码时对“main”的未定义引用