【发布时间】:2021-08-19 09:18:36
【问题描述】:
这是 Vertica Query 中使用的子查询示例,它是从应用程序生成的字符串。
SELECT 1 as ID, 345.45 as PaidAmt FROM DUAL
UNION ALL
SELECT 2 as ID, 789.45 as PaidAmt FROM DUAL
UNION ALL
...
...
在某些情况下,随着使用 UNION ALL 的行数增加,此子查询会变得很大。 Vertica 在一定程度上支持这种查询。但是,如果在子查询中使用 3000 + UNION ALL 运算符,则会引发错误。
[SQL 错误 [4963] [54001]:[Vertica]VJDBC 错误:查询 包含太复杂而无法分析的 SET 操作树
我找不到任何有关在查询中限制使用 UNION ALL 运算符或查询字符串长度的文档。
Vertica 或 Linux 中是否有任何系统参数可以更改其值以成功执行查询?
我有另一种方法来修复删除 UNION ALL 的查询。但正在寻找产生错误的解决方案。
提前致谢!
【问题讨论】:
-
更好的长期解决方案是将这些数据作为 SQL 数据库中的真实表进行维护。您可以使用 Vertica 的 CSV 加载工具(很确定它有一个)。
-
@TimBiegeleisen - 是的,作为快速解决方案之一,我们正在创建一个表来保存信息并在查询中使用该表。另外,我想出了一个替代查询来以这种方式删除 UNION ALL 的实现。更改将需要时间在应用程序中实施。但是想知道是否有任何其他替代方法可以通过更改某种可变参数(如果有)来使查询执行成为可能。谢谢!