Cassandra CQL 3.2.1 清除列数据

Posted

技术标签:

【中文标题】Cassandra CQL 3.2.1 清除列数据【英文标题】:Cassandra CQL 3.2.1 Clear column data 【发布时间】:2016-04-22 10:40:56 【问题描述】:

我需要使用 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;

【问题讨论】:

【参考方案1】:

来自 DataStax 文档:

ALTER DROP 从表定义中删除列,删除数据 与该列有关,并最终收回以前的空间 列使用。该列无法立即查询 被丢弃后。 实际的数据删除发生在压缩过程中; 数据将来不会包含在 SSTables 中。强制删除 在压缩发生之前删除的列,使用节点工具 upgradesstables 命令后跟一个 ALTER TABLE 语句,它 更新表元数据以注册 drop。

重新添加删除的列后,查询不返回值 在最后一次删除列之前写入。不要重新添加丢弃的 使用客户端提供的时间戳将列添加到表中,这不是 Cassandra 生成的写入时间。

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

希望对你有帮助

【讨论】:

是的,我读到了,不确定它对上述内容是否足够具体 - 我已经在树节点集群上运行了脚本并且工作正常 - 但谢谢,很高兴在这里提供参考【参考方案2】:

我使用 Docker 和三个节点的集群进行了尝试,效果很好

【讨论】:

以上是关于Cassandra CQL 3.2.1 清除列数据的主要内容,如果未能解决你的问题,请参考以下文章

如何在cassandra cql的一行插入中插入多行?

CQL - 不能进行算术运算

解释 Cassandra 系统表“system_traces.events”中的“source_elapsed”列

python cql 驱动程序 - cassandra.ReadTimeout -“操作超时 - 仅收到 1 个响应。”

Cassandra Cql 范围选择

使用 CQL3 在 Cassandra 中进行数据版本控制