暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Citus 报错(七)ERROR: complex joins are only supported when all distributed tables are co-located and joined on their

原创 姚崇 2023-02-28
552

报错如下

Citus中,错误消息"complex joins are only supported when all distributed tables are co-located and joined on their distribution columns"通常表示在执行复杂的连接查询时,要求所有分布式表必须具有相同的分布列(distribution columns),并且这些分布式表的数据必须位于同一节点上,这样才能保证查询的正确性和性能。如果不满足这些条件,则会导致查询失败。
如下三个表的分片键都为InnerCode,但是关联列是有是有三个的InnerCode、EndDate、IndexCode,便会有此报错了

jydb@jydb=> begin; BEGIN jydb@jydb=*> DELETE FROM JYDB.MF_CalmarRatio A jydb@jydb-*> USING JYDB.MF_Calmar jydb@jydb-*> JOIN JYDB.tmp_MF_CalmarRatio B ON F.InnerCode = B.InnerCode jydb@jydb-*> AND F.EndDate = B.EndDate jydb@jydb-*> AND F.IndexCode = B.IndexCode jydb@jydb-*> LEFT JOIN JYDB.MF_CalmarRatio_TMP C ON F.InnerCode = C.InnerCode jydb@jydb-*> AND F.EndDate = C.EndDate jydb@jydb-*> AND F.IndexCode = C.IndexCode jydb@jydb-*> WHERE A.id = F.id jydb@jydb-*> AND C.InnerCode IS NULL; ERROR: complex joins are only supported when all distributed tables are co-located and joined on their distribution columns jydb@jydb=!>

改成CTE

将CTE与delete语句结合使用来删除主表中的行
使用CTE等价重写如下所示

WITH cte AS ( SELECT F.id FROM JYDB.MF_CalmarRatio F JOIN JYDB.tmp_MF_CalmarRatio B ON F.InnerCode = B.InnerCode AND F.EndDate = B.EndDate AND F.IndexCode = B.IndexCode LEFT JOIN JYDB.MF_CalmarRatio_TMP C ON F.InnerCode = C.InnerCode AND F.EndDate = C.EndDate AND F.IndexCode = C.IndexCode WHERE C.InnerCode IS NULL ) DELETE FROM JYDB.MF_CalmarRatio A WHERE A.id IN (SELECT id FROM cte);
最后修改时间:2023-03-02 17:15:13
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论