我可以改变现有Citus表的分配方式吗?[英] Can I change the distribution method on an existing Citus table?

本文是小编为大家收集整理的关于我可以改变现有Citus表的分配方式吗?的处理方法,想解了我可以改变现有Citus表的分配方式吗?的问题怎么解决?我可以改变现有Citus表的分配方式吗?问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

在从 MySQL 迁移到 Citus 集群期间,我使用了 range 分发方法.迁移完成了,但是现在想把分发方式改成hash.

对于已经存在数据的现有表,有没有办法将分布方法从 range 更改为 hash?

我想出了以下程序,但不确定它是否有效:

  1. 为所有正在更改的分片更新 pg_dist_shard 表的 minvalue 和 maxvalue 列
  2. 将pg_dist_partition表的分片存储类型列从r更新为h
  3. COMMIT;

推荐答案

这是个好问题.目前,Citus 不提供直接更改现有数据的分区类型的方法.

在范围分区中,记录根据其分区列值和分片最小/最大值放置在分片中.如果记录 x 驻留在分片 y 中,则表示 y.minvalue <= x.partition_column <= y.maxvalue.

在散列分区中,对分区列进行散列处理,并根据该散列值路由记录.因此,您在 pg_dist_shard 中看到的最小/最大值是散列函数结果的边界值.在这种情况下 y.minvalue <= hash(x.partition_column) <= y.maxvalue.

因此,执行您提到的更改最终会导致分配不正确.为了从范围分区切换到哈希分区,需要重新分配数据.为此,我建议将数据重新加载到一个空的散列分区表中.

更多信息,您可以参考使用分布式表哈希分布 部分 Citus 文档.

本文地址:https://www.itbaoku.cn/post/1763893.html