在从MySQL迁移到Citus集群期间,我使用了range分发方法.迁移已完成,但现在我想将分配方法更改为hash.
有没有办法从改变分配方法range,以hash用于在它已经数据现有的表?
我想出了以下程序,但我不确定它是否有效:
minvalue和maxvalue列pg_dist_shardpg_dist_partition从表r到hCOMMIT;这是一个好问题。目前,Citus 不提供直接更改现有数据分区类型的方法。
在范围分区中,记录根据其分区列值和分片最小/最大值放置在分片中。如果记录 x 驻留在分片 y 中,则意味着y.minvalue <= x.partition_column <= y.maxvalue。
在哈希分区中,对分区列进行哈希处理,并根据该哈希值路由记录。因此,您看到的最小/最大值pg_dist_shard是哈希函数结果的边界值。在这种情况下y.minvalue <= hash(x.partition_column) <= y.maxvalue。
因此,进行您提到的更改最终会导致分布不正确。为了从范围分区切换到散列分区,需要重新分配数据。为此,我建议将数据重新加载到空的哈希分区表中。
有关更多信息,您可以参阅Citus 文档的使用分布式表 和哈希分布部分。
| 归档时间: |
|
| 查看次数: |
463 次 |
| 最近记录: |