Cassandra CQL 3.2.1清除列数据

时间:2016-04-22 10:40:57

标签: cassandra cql3

我需要使用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 个答案:

答案 0 :(得分:1)

来自DataStax文档:

  

ALTER DROP从表定义中删除列,删除数据   与该专栏有关,并最终收回该空间   列使用的。该列无法立即查询   被丢弃后压缩期间发生实际数据删除;   未来SSTables中不包含数据。强行删除   在压缩发生之前删除列,使用nodetool   upgradesstables命令后跟ALTER TABLE语句,其中   更新表元数据以注册drop。

     

重新添加已删除的列后,查询不会返回值   在最后一次删除列之前写的。不要重新添加掉线   使用客户端提供的时间戳列表到表,而不是a   Cassandra生成的写入时间。

     

您不能从使用COMPACT STORAGE定义的表中删除列   选项。

希望有所帮助

答案 1 :(得分:0)

我尝试使用Docker和三个节点的集群,工作正常