Postgresql 如何使用多列中的值分布表?

Postgresql 如何使用多列中的值分布表?,postgresql,citus,Postgresql,Citus,根据,使用单个列分发表很容易: SELECT master_create_distributed_table('github_events', 'created_at', 'append'); 有没有一种方法可以使用多列分布表?例如,类似于: SELECT master_create_distributed_table('github_events', 'user_id,site_id', 'append'); Citus中不支持按多个列进行分发。但是,您可以创建复合类型和 -链接的内容在下

根据,使用单个列分发表很容易:

SELECT master_create_distributed_table('github_events', 'created_at', 'append');
有没有一种方法可以使用多列分布表?例如,类似于:

SELECT master_create_distributed_table('github_events', 'user_id,site_id', 'append');

Citus中不支持按多个列进行分发。但是,您可以创建复合类型和

-链接的内容在下面内联,以防链接失效-

对复合类型进行哈希分区的步骤 在主节点和所有工作节点上创建类型:

创建类型新建\复合\类型作为项目\关键字文本、日期文本; 创建用于检查相等性的函数,并将其与新类型的相等运算符关联

创建函数equal\u test\u composite\u type\u函数new\u composite\u type,new\u composite\u type返回布尔值 作为“选择$1.project\u key=$2.project\u key和$1.date=$2.date;” 语言SQL 不变的 在NULL输入时返回NULL; - ... 使用该函数创建自定义相等运算符。。。 创建运算符= LEFTARG=新的组合类型, RIGHTARG=新的组合类型, 程序=相等测试复合类型功能, 散列 ; 创建一个新的哈希函数

注意:这只是一个简单的示例,可能无法提供良好的偶数散列分布。有几个好的散列函数的例子,它们可以在一个单独的C函数而不是SQL中实现

创建函数new_composite_type_hashnew_composite_type返回int 作为“选择hashtext$1.project| | |$1.date::text;” 语言SQL 不变的 在NULL输入时返回NULL; 为BTREE和HASH访问方法定义运算符类:

创建运算符类新的\u op\u fam\u btree\u类 使用BTREE作为新类型\复合类型\类型的默认值 运算符3=新组合类型,新组合类型; 创建运算符类新的\u op\u fam\u hash\u类 使用散列作为新类型\u复合类型的默认值 运算符1=新组合类型,新组合类型, 函数1新组合类型新组合类型; 使用新类型创建表并分发它

创建表复合类型分区表 id整数, 复合柱新的复合柱类型 ; 选择master_create_distributed_table'composite_type_partitioned_table'、'composite_column'、'hash'; 选择master\u create\u worker\u shards'composite\u type\u partitioned\u table',4,1; 运行“插入”和“选择”。请注意,适当的修剪将需要引用,如这些查询中所示

插入复合类型分区表值1,'key120160101'::新的复合类型; 插入复合类型分区表值2,'key120160102'::新的复合类型; 插入复合类型分区表值3,'KEY220160101'::新的复合类型; 插入复合类型分区表值4,'KEY220160102'::新的复合类型; 从composite_type_partitioned_表中选择*,其中composite_列='key120160101'::new_composite_type; 更新复合_类型_分区_表集id=6,其中复合_列='key220160101'::新的复合_类型; 从composite_type_partitioned_表中选择*,其中composite_列='key220160101'::new_composite_type; 其他说明: 有两个注意事项需要注意:

输入文件必须正确分隔,以允许复制到分布式表工作。为此,请使用复制选择::复合类型字段;从普通表加载到文件中,然后加载

为了使用选择查询进行修剪,复合类型字段应该在引号中