2016-05-17 80 views

回答

1

从metdos答案有助于潜在的问题(缓慢的数据迁移),但它看起来像你还是要一个明确的答案的原来的问题“是否西特斯揭露它使用散列函数?”

这个问题的答案是“不,不是直接的,但它确实暴露了关于每个分布式表的缓存信息,并且你可以使用它来发现哈希函数,你只需要调用它”。接下来是如何做到这一点的草图......

函数DistributedTableCacheEntry以表格的标识符作为其输入,并返回填充了将用于该表格的散列函数的struct

这是一个公共函数,并且由Citus安装的头文件公开,所以您应该能够链接它以编写C级PostgreSQL函数来散列给定的表所属的分区值。有关详细信息,请参阅FastShardPruning如何使用它。

签名可能会看起来像:CREATE FUNCTION citus_hash(distrel regclass, anyelement partitionval) RETURNS integer。伪代码:

  1. 呼叫DistributedTableCacheEntrydistrel为参数
  2. 确保表散列分区
  3. 从缓存条目获取的散列函数
  4. 确保partitionval是预期的类型
  5. 调用的散列函数partitionval并返回结果

请参阅PostgreSQL的own documentation了解如何编写此类功能。

+0

是的,我正在寻找'citus_hash'。现在我看到了答案:不,它不适用于SQL。感谢伪代码 –

2

我们最近发布了Citus 5.1。它具有对散列分区表COPY支持和COPY是幅度至少一个数量级比copy_to_distributed_table更快(现在已废弃)。我们会尽快更新我们的文档,以澄清我们的COPY支持。

您可以从该Red HatDebian PGDG仓库安装西特斯5.1。

+0

你是说这个函数会在更新的文档中? – Bill

+1

@Bill,不,我的意思是,现在你不需要这个功能,因为现在COPY以有效的方式完成了OP所要的功能。 – metdos

+0

是的,我很乐意尝试新版本,但这不是问题的答案。 –