Могу ли я изменить метод распространения в существующей таблице Citus?

Во время перехода с MySQL на кластер Citus я использовал range метод распределения. Миграция завершена, но теперь я хотел бы изменить метод распространения на hash,

Есть ли способ изменить метод распространения range в hash для существующей таблицы с данными уже в ней?

Я придумал следующую процедуру, но не уверен, что она действительна:

  1. Обновите minvalue а также maxvalue колонны pg_dist_shard таблица для всех изменяемых осколков
  2. Обновите столбец типа хранилища шардов pg_dist_partition стол из r в h
  3. COMMIT;

1 ответ

Решение

Это хороший вопрос. В настоящее время Citus не предоставляет прямой способ изменить тип раздела существующих данных.

При разделении по диапазонам записи помещаются в сегменты в соответствии со значением столбца раздела и минимальными / максимальными значениями сегмента. Если запись x находится в осколке y, это означает, что y.minvalue <= x.partition_column <= y.maxvalue,

При хэш-разбиении столбец раздела хэшируется, а записи маршрутизируются в соответствии с этим хэшированным значением. Поэтому минимальные / максимальные значения, которые вы видите в pg_dist_shard являются граничными значениями для результата хэш-функции. В этом случае y.minvalue <= hash(x.partition_column) <= y.maxvalue,

Поэтому внесение изменений, о которых вы упомянули, приведет к неправильному распространению. Для того чтобы переключиться с разделов диапазона на раздел хешей, данные должны быть перераспределены. Для этого я предлагаю перезагрузить данные в пустую таблицу с хеш-разделами.

Для получения дополнительной информации вы можете обратиться к разделам Работа с распределенными таблицами и Распределение хэша в документации Citus.

Другие вопросы по тегам