Citusでは複数の列による配信はサポートされていません。ただし、複合型とpartition your data by that composite typeを作成できます。
- リンクの内容は、ケースには、以下のインライン化され、リンクが死んで行く - ハッシュ・パーティション化
手順は、複合タイプの
は、マスターとすべてのワーカーノードのタイプを作成します。:
CREATE TYPE new_composite_type as (project_key text, date text);
は平等をチェックするための関数を作成し、等価演算子のために関連付け新しいタイプ
CREATE FUNCTION equal_test_composite_type_function(new_composite_type, new_composite_type) RETURNS boolean
AS 'select $1.project_key = $2.project_key AND $1.date = $2.date;'
LANGUAGE SQL
IMMUTABLE
RETURNS NULL ON NULL INPUT;
-- ... use that function to create a custom equality operator...
CREATE OPERATOR = (
LEFTARG = new_composite_type,
RIGHTARG = new_composite_type,
PROCEDURE = equal_test_composite_type_function,
HASHES
);
新しいハッシュ関数を作成します。
注:これは、単純な例であり、良いハッシュ分布を提供しない可能性があります。 SQLの代わりに別のC関数で実装できる良いハッシュ関数の例がいくつかあります。
CREATE FUNCTION new_composite_type_hash(new_composite_type) RETURNS int
AS 'SELECT hashtext(($1.project_key || $1.date)::text);'
LANGUAGE SQL
IMMUTABLE
RETURNS NULL ON NULL INPUT;
BTREEとHASHのアクセス方法について演算子クラスを定義します。
CREATE OPERATOR CLASS new_op_fam_btree_class
DEFAULT FOR TYPE new_composite_type USING BTREE AS
OPERATOR 3 = (new_composite_type, new_composite_type);
CREATE OPERATOR CLASS new_op_fam_hash_class
DEFAULT FOR TYPE new_composite_type USING HASH AS
OPERATOR 1 = (new_composite_type, new_composite_type),
FUNCTION 1 new_composite_type_hash(new_composite_type);
は、新しいタイプのテーブルを作成し、それを配布します。
CREATE TABLE composite_type_partitioned_table
(
id integer,
composite_column new_composite_type
);
SELECT master_create_distributed_table('composite_type_partitioned_table','composite_column', 'hash');
SELECT master_create_worker_shards('composite_type_partitioned_table', 4, 1);
INSERTとSELECTを実行します。適切なプルーニングには、それらのクエリに示されているように引用が必要であることに注意してください。
INSERT INTO composite_type_partitioned_table VALUES (1, '("key1","20160101")'::new_composite_type);
INSERT INTO composite_type_partitioned_table VALUES (2, '("key1","20160102")'::new_composite_type);
INSERT INTO composite_type_partitioned_table VALUES (3, '("key2","20160101")'::new_composite_type);
INSERT INTO composite_type_partitioned_table VALUES (4, '("key2","20160102")'::new_composite_type);
SELECT * FROM composite_type_partitioned_table WHERE composite_column = '("key1", "20160101")'::new_composite_type;
UPDATE composite_type_partitioned_table SET id = 6 WHERE composite_column = '("key2", "20160101")'::new_composite_type;
SELECT * FROM composite_type_partitioned_table WHERE composite_column = '("key2", "20160101")'::new_composite_type;
その他の注意事項:
入力ファイルが正しく区切られなければならないcopy_to_distributed_tableが機能するようにする:を警戒するには、2冊のノートがあります
。これを行うには、普通のテーブルのCOPY (SELECT()::composite_type_field, ....);
をファイルに使用してからロードします。
選択クエリでプルーニングを行うには、複合型フィールドを引用符で囲む必要があります。