我需要使用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;
答案 0 :(得分:1)
来自DataStax文档:
ALTER DROP从表定义中删除列,删除数据 与该专栏有关,并最终收回该空间 列使用的。该列无法立即查询 被丢弃后压缩期间发生实际数据删除; 未来SSTables中不包含数据。强行删除 在压缩发生之前删除列,使用nodetool upgradesstables命令后跟ALTER TABLE语句,其中 更新表元数据以注册drop。
重新添加已删除的列后,查询不会返回值 在最后一次删除列之前写的。不要重新添加掉线 使用客户端提供的时间戳列表到表,而不是a Cassandra生成的写入时间。
您不能从使用COMPACT STORAGE定义的表中删除列 选项。
希望有所帮助
答案 1 :(得分:0)
我尝试使用Docker和三个节点的集群,工作正常