Ошибка при удалении столбца из таблицы со вторичным индексом (Scylladb) - PullRequest
3 голосов
/ 19 апреля 2019

При удалении столбца из таблицы, содержащей вторичный индекс, я получаю следующую ошибку. Я использую ScyllaDB версии 3.0.4.

[Invalid query] message = "Невозможно удалить имя столбца в базовой таблице warehouse.myuser с материализованными представлениями"

Ниже приведены примеры команд

create table myuser (id int primary key, name text, email text);
create index on myuser(email);
alter table myuser drop name;

Я могу успешно выполнить приведенные выше операторы в Apache Cassandra.

1 Ответ

6 голосов
/ 20 апреля 2019

Вторичные индексы по умолчанию в Scylla являются глобальными и реализуются поверх материализованных представлений (в отличие от реализации локальной индексации Apache Cassandra), что дает им новые возможности, но также добавляет определенные ограничения. Удаление столбца из таблицы с материализованными представлениями является сложной операцией, особенно если целевой столбец выбран одним из представлений или его живучесть может повлиять на жизнеспособность строк представления. Чтобы избежать этих проблем, удаление столбца безусловно невозможно при наличии материализованных представлений, прикрепленных к таблице. Ошибка, которую вы видите, является комбинацией этого и того факта, что индекс Сциллы использует материализованное представление внизу для хранения соответствующих базовых ключей для каждой строки.

Очевидный обходной путь - сначала удалить индекс, затем удалить столбец и заново создать индекс, но это, конечно, требует времени и ресурсов.

Однако в некоторых случаях столбцы могут быть удалены из базовой таблицы, даже если они имеют материализованные представления, особенно если столбец не выбран в представлении и его живучесть не влияет на строки представления. Для справки, я создал проблему, которая требует ее реализации в нашем трекере ошибок: https://github.com/scylladb/scylla/issues/4448

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...