1

このドキュメントには、範囲分割されたデータをターゲット シャードに挿入するための準備方法が適切に説明されています。正確なハッシュ関数を知っていれば、ハッシュ分散テーブルに挿入するデータを同様に準備できます。

そのような関数はhereで示唆されていますが、ソースで期待した場所に見つけることができませんでした。

Citus は、シャード プルーニング中に使用するハッシュ関数をどこで決定しますか?

4

2 に答える 2

2

最近、Citus 5.1 をリリースしました。COPYハッシュ パーティション テーブルをサポートしており、 (現在は非推奨)COPYよりも少なくとも 1 桁は高速です。copy_to_distributed_tableサポートを明確にするために、まもなくドキュメントを更新しますCOPY

Red HatまたはDebian PGDG リポジトリから Citus 5.1 をインストールできます。

于 2016-05-18T11:39:09.023 に答える
1

metdos からの回答は、根本的な問題 (遅いデータ移行) に役立ちますが、「Citus は使用するハッシュ関数を公開していますか?」という元の質問に対する決定的な回答が必要なようです。

この質問に対する答えは、「いいえ、直接ではありませんが、各分散テーブルに関するキャッシュされた情報を公開し、それを使用して、呼び出すだけでよいハッシュ関数を見つけることができます」です。以下はその方法のスケッチです…</p>

この関数は、テーブルの識別子を入力として受け取り、そのテーブルに使用されるハッシュ関数がDistributedTableCacheEntry取り込まれた を返します。struct

これはパブリック関数であり、Citus によってインストールされたヘッダーによって公開されるため、それに対してリンクして、C レベルの PostgreSQL 関数を作成し、それが属するテーブルを指定してパーティション値をハッシュできるはずですFastShardPruning。使用方法については、を参照してください。

署名はおそらく次のようになりますCREATE FUNCTION citus_hash(distrel regclass, anyelement partitionval) RETURNS integer。擬似コード:

  1. 引数DistributedTableCacheEntryとして呼び出すdistrel
  2. テーブルがハッシュ パーティション化されていることを確認する
  3. キャッシュ エントリからハッシュ関数を取得する
  4. partitionval期待されるタイプであることを確認してください
  5. ハッシュ関数を呼び出してpartitionval結果を返す

このような関数の作成については、 PostgreSQL のドキュメントを参照してください。

于 2016-05-25T21:10:19.813 に答える