Citus公开了用于修剪碎片的散列函数吗?
问题描述:
This文档有很好的描述如何准备范围分区数据插入目标碎片。如果我知道确切的散列函数,我可以类似地准备数据以插入到散列分布表中。Citus公开了用于修剪碎片的散列函数吗?
这样的功能在here被暗示,但在源我找不到它where I expected它。
哪里西特斯确定哈希函数碎片修剪过程中使用?
答
从metdos答案有助于潜在的问题(缓慢的数据迁移),但它看起来像你还是要一个明确的答案的原来的问题“是否西特斯揭露它使用散列函数?”
这个问题的答案是“不,不是直接的,但它确实暴露了关于每个分布式表的缓存信息,并且你可以使用它来发现哈希函数,你只需要调用它”。接下来是如何做到这一点的草图......
函数DistributedTableCacheEntry
以表格的标识符作为其输入,并返回填充了将用于该表格的散列函数的struct
。
这是一个公共函数,并且由Citus安装的头文件公开,所以您应该能够链接它以编写C级PostgreSQL函数来散列给定的表所属的分区值。有关详细信息,请参阅FastShardPruning
如何使用它。
签名可能会看起来像:CREATE FUNCTION citus_hash(distrel regclass, anyelement partitionval) RETURNS integer
。伪代码:
- 呼叫
DistributedTableCacheEntry
与distrel
为参数 - 确保表散列分区
- 从缓存条目获取的散列函数
- 确保
partitionval
是预期的类型 - 调用的散列函数
partitionval
并返回结果
请参阅PostgreSQL的own documentation了解如何编写此类功能。
是的,我正在寻找'citus_hash'。现在我看到了答案:不,它不适用于SQL。感谢伪代码 –