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.
Надеюсь, поможет