【问题标题】:Cassandra CQL 3.2.1 Clear column dataCassandra CQL 3.2.1 清除列数据
【发布时间】: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;

【问题讨论】:

    标签: cassandra cql3


    【解决方案1】:

    来自 DataStax 文档:

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

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

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

    希望对你有帮助

    【讨论】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-05
      • 1970-01-01
      • 1970-01-01
      • 2013-09-04
      • 2020-05-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多