Cassandra CQL 3.2.1 Очистить данные столбца

Мне нужно очистить данные из столбца в таблице с помощью CQL. Я пробовал следующий тест на одном узле, и он работает нормально.

Но это будет летать на многих узлах и различных факторов репликации?

DROP KEYSPACE IF EXISTS testColumnDrop;

CREATE KEYSPACE testColumnDrop WITH REPLICATION = { 'class' : 'SimpleStrategy', 'replication_factor' : 1 };

USE testColumnDrop;

CREATE TABLE contracts (
  id varchar PRIMARY KEY,
  licenses varchar
);

INSERT INTO contracts(id, licenses) VALUES('one', '{"number":"1.0"}');
INSERT INTO contracts(id, licenses) VALUES('two', '{"number":"2.0"}');
INSERT INTO contracts(id, licenses) VALUES('three', '{"number":"3.0"}');

SELECT * FROM contracts;

ALTER TABLE contracts DROP licenses;

ALTER TABLE contracts ADD licenses varchar;

SELECT * FROM contracts;

2 ответа

Решение

Я попробовал это с помощью Docker и кластера из трех узлов, работал нормально

Из документации DataStax:

ALTER DROP удаляет столбец из определения таблицы, удаляет данные, относящиеся к этому столбцу, и в конечном итоге освобождает пространство, ранее использовавшееся столбцом. Столбец недоступен для запроса сразу после удаления. Фактическое удаление данных происходит во время сжатия; данные не будут включены в SSTables в будущем. Чтобы принудительно удалить отброшенные столбцы до того, как произойдет сжатие, используйте команду nodetool upgradedesstables, а затем инструкцию ALTER TABLE, которая обновляет метаданные таблицы, чтобы зарегистрировать удаление.

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

Вы не можете удалить столбцы из таблиц, определенных с опцией COMPACT STORAGE.

Надеюсь, поможет

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