metdosの回答は根本的な問題(遅いデータ移行)に役立ちますが、「Citusが使用するハッシュ関数を公開していますか?」という元の質問に対する答えがまだ必要なようです。
この質問に対する答えは「いいえ、直接ではありませんが、各分散テーブルに関するキャッシュされた情報が公開されており、その情報を使用して呼び出す必要があるハッシュ関数を発見できます。以下は、それを行う方法のスケッチです...
関数DistributedTableCacheEntry
は、テーブルの識別子を入力として受け取り、そのテーブルに使用されるハッシュ関数が設定されたstruct
を返します。
Citusによってインストールされたヘッダによって公開されているので、CレベルのPostgreSQL関数を使用して、それが所属するテーブルのパーティション値をハッシュするようにすることができます。FastShardPruning
それの使い方。
署名はおそらく:CREATE FUNCTION citus_hash(distrel regclass, anyelement partitionval) RETURNS integer
のようになります。擬似コード:引数
としてdistrel
と
- コール
DistributedTableCacheEntry
表を確認し、ハッシュ・パーティション
partitionval
を確認し、キャッシュエントリ
- からハッシュ関数を取得するには、予想されるタイプ
- 呼び出しのですハッシュ関数を
partitionval
に設定し、結果を返します。
このような関数を書く方法については、PostgreSQLのown documentationを参照してください。
はい、私は 'citus_hash'を探しています。そして、今私は答えを見る:いいえ、それはSQLから利用できません。擬似コードありがとう –