![]()
在一次存储过程开发时遇到如上问题,出现该问题的原因是:在存储过程中调用了自定义函数,而自定义函数涉及到表查询,问题关键在于这张表的分布键是随机分布导致跨sql出现QE错误。问题解释可以参考如下:
如果不能确定一张表的哈希分布键或者不存在合理的避免数据倾斜的分布键,则可以使用随机分布。随机分布会采用循环的方式将一次插入的数据存储到不同的节点上。随机性只在单个 SQL 中有效,不考虑跨 SQL 的情况。譬如如果每次插入一行数据到随机分布表中,最终的数据会全部保存在第一个节点上。
解决办法:
把自定义函数使用到的表再创建一个字段相同的负值表,即
CREATE TABLE a_copy(
x1 varchar --你的字段名
)
DISTRIBUTED REPLICATED; --把分布键语句改为这一句;
在函数中使用复制表就不会再出现以上错误。
在存储过程开发中,由于使用了随机分布键的表并在函数中进行查询,导致了跨SQL的QE错误。问题源于随机分布只在单个SQL内部有效,不适用于跨SQL操作。为解决此问题,建议将涉及查询的表创建一个复制分布的副本表,通过`DISTRIBUTED REPLICATED`确保数据不再跨节点,从而避免QE错误。

被折叠的 条评论
为什么被折叠?



