このドキュメントには、範囲分割されたデータをターゲット シャードに挿入するための準備方法が適切に説明されています。正確なハッシュ関数を知っていれば、ハッシュ分散テーブルに挿入するデータを同様に準備できます。
そのような関数はhereで示唆されていますが、ソースで期待した場所に見つけることができませんでした。
Citus は、シャード プルーニング中に使用するハッシュ関数をどこで決定しますか?
metdos からの回答は、根本的な問題 (遅いデータ移行) に役立ちますが、「Citus は使用するハッシュ関数を公開していますか?」という元の質問に対する決定的な回答が必要なようです。
この質問に対する答えは、「いいえ、直接ではありませんが、各分散テーブルに関するキャッシュされた情報を公開し、それを使用して、呼び出すだけでよいハッシュ関数を見つけることができます」です。以下はその方法のスケッチです…</p>
この関数は、テーブルの識別子を入力として受け取り、そのテーブルに使用されるハッシュ関数がDistributedTableCacheEntry
取り込まれた を返します。struct
これはパブリック関数であり、Citus によってインストールされたヘッダーによって公開されるため、それに対してリンクして、C レベルの PostgreSQL 関数を作成し、それが属するテーブルを指定してパーティション値をハッシュできるはずですFastShardPruning
。使用方法については、を参照してください。
署名はおそらく次のようになりますCREATE FUNCTION citus_hash(distrel regclass, anyelement partitionval) RETURNS integer
。擬似コード:
DistributedTableCacheEntry
として呼び出すdistrel
partitionval
期待されるタイプであることを確認してくださいpartitionval
結果を返すこのような関数の作成については、 PostgreSQL のドキュメントを参照してください。