Кассандра - Невозможно повторно добавить ранее удаленный счетчик - PullRequest
0 голосов
/ 11 декабря 2018

Мне нужно было ИЗМЕНИТЬ мой столбец изменения счетчика TABLE на int.

Таблица перед удалением и добавлением:

CREATE TABLE <table_name> (
    id text PRIMARY KEY,
    questions_asked counter);

Чтобы сделать это, я сначала попытался сбросить столбец счетчика.:

ALTER TABLE <table_name> DROP questions_asked;

Когда я попытался добавить новый столбец с тем же именем, но на этот раз как int:

ALTER TABLE <table_name> ADD questions_asked int;

Я получаю следующую ошибку:

InvalidRequest: Ошибка от сервера: code = 2200 [Invalid query] message = "Невозможно повторно добавить ранее удаленный счетчик вопросов вопросах-ответов"

Кроме того, если я пытаюсь дать новое имя столбцутам я получил эту ошибку:

ConfigurationException: Невозможно добавить столбец без счетчика (question_asked) в семействе столбцов счетчика

Если я сделаю эту последовательность для столбца с другимвведите - скажем, alter drop text и add int, он будет работать нормально.

Каково объяснение этого поведения?Почему после падения столбца счетчика кажется, что он все еще находится в памяти?

1 Ответ

0 голосов
/ 11 декабря 2018

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

Вы можете найти больше информации в документации .

Обновление после получения структуры таблицы:

Согласно CASSANDRA-8099 вы не можетедобавить столбец с несовместимым типом, и counter не совместим ни с чем.Что касается добавления с новым именем - таблица уже помечена как содержащая счетчики, и ее нельзя использовать с типами, не относящимися к счетчикам.

Почему бы просто не удалить таблицу и воссоздать ее с правильной структурой?

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