Могу ли я изменить метод распространения в существующей таблице Citus?
Во время перехода с MySQL на кластер Citus я использовал range
метод распределения. Миграция завершена, но теперь я хотел бы изменить метод распространения на hash
,
Есть ли способ изменить метод распространения range
в hash
для существующей таблицы с данными уже в ней?
Я придумал следующую процедуру, но не уверен, что она действительна:
- Обновите
minvalue
а такжеmaxvalue
колонныpg_dist_shard
таблица для всех изменяемых осколков - Обновите столбец типа хранилища шардов
pg_dist_partition
стол изr
вh
COMMIT;
1 ответ
Это хороший вопрос. В настоящее время Citus не предоставляет прямой способ изменить тип раздела существующих данных.
При разделении по диапазонам записи помещаются в сегменты в соответствии со значением столбца раздела и минимальными / максимальными значениями сегмента. Если запись x находится в осколке y, это означает, что y.minvalue <= x.partition_column <= y.maxvalue
,
При хэш-разбиении столбец раздела хэшируется, а записи маршрутизируются в соответствии с этим хэшированным значением. Поэтому минимальные / максимальные значения, которые вы видите в pg_dist_shard
являются граничными значениями для результата хэш-функции. В этом случае y.minvalue <= hash(x.partition_column) <= y.maxvalue
,
Поэтому внесение изменений, о которых вы упомянули, приведет к неправильному распространению. Для того чтобы переключиться с разделов диапазона на раздел хешей, данные должны быть перераспределены. Для этого я предлагаю перезагрузить данные в пустую таблицу с хеш-разделами.
Для получения дополнительной информации вы можете обратиться к разделам Работа с распределенными таблицами и Распределение хэша в документации Citus.