いくつかのワーカー ノードを含む 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 は約 2,000 万行で構成され、各行には出発地と目的地のコードが含まれています。geography_data は約 10 万行で構成され、commuting_data テーブルに含まれる各地理コードに関する情報が含まれています。
geography_data の sequence_id 列は、起点と終点の列と一致し、これらの空間ポイントに関するラベルやその他の情報を提供します。commuting_data を起点と終点の両方の列で geography_data テーブルに結合したいと考えています。これは単一ノードの PostgreSQL データベースで簡単に実行できますが、クエリを完了するには時間がかかります。
私の問題は、Citus がテーブルごとに 1 つの分布列しかサポートしていないことです。したがって、テーブル commuting_data のディストリビューション列を「origin」または「destination」に設定すると、「complex joins only supported when all distributed tables are co-location and join on their distribution columns」というエラーが表示されます。
この問題を克服し、Citus が提供できるデータベース シャーディングのすべての機能を利用して、上記のクエリから得られた結果を生成するにはどうすればよいでしょうか?
Ubuntu 20.04 で PostgreSQL 12.4 と Citus 9.4 を使用しています。