ERROR:function cannot execute on a QE slice/Greenplum 错误解决

在存储过程开发中,由于使用了随机分布键的表并在函数中进行查询,导致了跨SQL的QE错误。问题源于随机分布只在单个SQL内部有效,不适用于跨SQL操作。为解决此问题,建议将涉及查询的表创建一个复制分布的副本表,通过`DISTRIBUTED REPLICATED`确保数据不再跨节点,从而避免QE错误。
摘要由CSDN通过智能技术生成

 

在一次存储过程开发时遇到如上问题,出现该问题的原因是:在存储过程中调用了自定义函数,而自定义函数涉及到表查询,问题关键在于这张表的分布键是随机分布导致跨sql出现QE错误。问题解释可以参考如下:

如果不能确定一张表的哈希分布键或者不存在合理的避免数据倾斜的分布键,则可以使用随机分布。随机分布会采用循环的方式将一次插入的数据存储到不同的节点上。随机性只在单个 SQL 中有效,不考虑跨 SQL 的情况。譬如如果每次插入一行数据到随机分布表中,最终的数据会全部保存在第一个节点上。

解决办法:

把自定义函数使用到的表再创建一个字段相同的负值表,即

CREATE TABLE  a_copy(

x1 varchar  --你的字段名

)

DISTRIBUTED REPLICATED; --把分布键语句改为这一句;

在函数中使用复制表就不会再出现以上错误。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值