2016-05-17 12 views
1

Thisドキュメントには、ターゲットシャードに挿入するためのレンジパーティションデータの準備方法がよく説明されています。正確なハッシュ関数を知っていれば、同様にハッシュ分散テーブルに挿入するデータを準備することができます。シャードは、シャードを除去するために使用されるハッシュ関数を公開していますか?

このような機能はhereにヒントされていますが、ソースではwhere I expectedと見つかりませんでした。

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

答えて

1

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

この質問に対する答えは「いいえ、直接ではありませんが、各分散テーブルに関するキャッシュされた情報が公開されており、その情報を使用して呼び出す必要があるハッシュ関数を発見できます。以下は、それを行う方法のスケッチです...

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

Citusによってインストールされたヘッダによって公開されているので、CレベルのPostgreSQL関数を使用して、それが所属するテーブルのパーティション値をハッシュするようにすることができます。FastShardPruningそれの使い方。

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

  • としてdistrel

    1. コールDistributedTableCacheEntry表を確認し、ハッシュ・パーティション
    2. partitionvalを確認し、キャッシュエントリ
    3. からハッシュ関数を取得するには、予想されるタイプ
    4. 呼び出しのですハッシュ関数をpartitionvalに設定し、結果を返します。

    このような関数を書く方法については、PostgreSQLのown documentationを参照してください。

  • +0

    はい、私は 'citus_hash'を探しています。そして、今私は答えを見る:いいえ、それはSQLから利用できません。擬似コードありがとう –

    2

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

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

    +0

    この機能は更新されたドキュメントに含まれていますか? – Bill

    +1

    @Bill、いいえ。私は今、COPYがOPが望んでいることを効率的にやっているので、その機能は必要ないでしょう。 – metdos

    +0

    はい、私は新しいリリースを試してみるのは面白いですが、これは質問の答えではありません。 –

    関連する問題