我已经成功创建了一个带有几个工作节点的 Citus 集群。我在使用分布式表运行查询时遇到问题。
这是我要运行的指示性查询的一个非常简化的版本:
SELECT a.origin, a.destination, b.label AS origin_label, c.label AS destination_label
FROM commuting_data a
LEFT JOIN geography_data b ON a.origin=b.sequence_id
LEFT JOIN geography_data c ON a.destination=c.sequence_id
ORDER BY a.origin, a.destination
commuting_data 包含大约 2000 万行,除其他信息外,每行包含一个起点和终点代码。geography_data 由大约 10 万行组成,包含有关 commuting_data 表中包含的每个地理代码的信息。
geography_data 中的 sequence_id 列与源列和目标列匹配,并提供有关这些空间点的标签和其他信息。我想将 commuting_data 加入到 origin 和 destination 列的 geography_data 表中。这在单节点 PostgreSQL 数据库中很容易完成,但完成查询很慢。
我的问题是 Citus 只支持每张表一个分布列。因此,如果我将表 commuting_data 的分布列设置为 'origin' 或 'destination',我会收到错误消息“仅当所有分布式表位于同一位置并在其分布列上连接时才支持复杂连接”。
如何利用 Citus 可以提供的数据库分片的所有功能来克服这个问题并生成上述查询给出的结果?
我在 Ubuntu 20.04 上使用 PostgreSQL 12.4 和 Citus 9.4。