【问题标题】:How to update clustering key in cassandra using update query?如何使用更新查询更新 cassandra 中的聚类键?
【发布时间】:2015-01-20 10:32:27
【问题描述】:

这是我的表结构,我正在使用以下查询更新序列:

Update styles set sequence=1 where styleid = 'CLASSIC';

我收到错误消息

PRIMARY KEY part sequence found in SET part
Missing PRIMARY KEY part sequence

CREATE TABLE styles (
  styleid ascii,
  sequence int,
  active boolean,
  image ascii,
  name ascii,
  PRIMARY KEY (styleid, sequence)
) WITH CLUSTERING ORDER BY (sequence DESC);

请任何人帮助我更新集群键序列,以便更新。或者任何替代方法请分享。

【问题讨论】:

  • 你能发布你的表架构吗?
  • 创建表格样式(styleid ascii、sequence int、active boolean、image ascii、name ascii、PRIMARY KEY(styleid、sequence))和聚类顺序(序列DESC)和bloom_filter_fp_chance=0.010000和缓存= 'KEYS_ONLY' AND comment='' AND dclocal_read_repair_chance=0.100000 AND gc_grace_seconds=864000 AND read_repair_chance=0.000000 AND replicate_on_write='true' AND populate_io_cache_on_flush='false' AND compaction={'class': 'SizeTieredCompactionStrategy'} AND compression={'sstable_compression ': 'LZ4Compressor'};
  • 我编辑了这个问题以删除 sql 标签,并将其替换为 cql 标签。这是一个重要的区别,因为 sql != cql。 cql 是 sql 的 子集。期望 cql 像 sql 一样运行是一种练习,最终会让你感到沮丧。

标签: cassandra key cql nosql


【解决方案1】:

根据 Cassandra 存储数据的方式,无法更新集群列(主键)。

Rowkey 是**styleid** ->[sequence] -> [active boolean,image ascii, name ascii] 的组合

为了指向非主列进行更新/删除,它需要通过styleid -> sequence分区解析来命中列。

主键一旦创建就不能更改,因为它代表了数据在 Cassandra 中的存储方式。因此无法在此处更新“序列”。

【讨论】:

    【解决方案2】:

    虽然可以,但在 Cassandra 中直接更新集群列是不可能的,就像所有事情一样,有一些方法可以做你需要做的事情。

    您需要创建一个临时表,以您希望的方式表示数据。然后你需要删除旧表,然后基于临时表创建一个新表。

    我建议: 1)备份您的初始表,因为您第一次尝试此操作时可能会错过一些东西。 2) 编写一个程序来进行您需要的更改(Javascript 程序、Java,无论您喜欢什么)。 3) 测试,测试,然后再次测试(首先在本地测试,然后升级到集成式环境,最后在某种预生产环境中进行测试,该环境尽可能接近生产环境。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-19
      • 2019-01-09
      • 1970-01-01
      • 2021-11-12
      • 1970-01-01
      • 2020-06-02
      • 2017-03-24
      • 2014-10-21
      相关资源
      最近更新 更多