2014-11-22 32 views
4

这是我的表结构,我更新与下面的查询序列:如何使用更新查询更新cassandra中的集群密钥?

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); 

请人帮我更新聚集键序列,使得它会被更新。或者任何其他方法请分享。

+0

您可以发布您的表架构? – 2014-11-22 08:45:09

+0

CREATE TABLE样式( styleid ASCII, 序列INT, 活跃布尔, 图像ASCII, 名ASCII, PRIMARY KEY(styleid,序列) )聚类ORDER BY(序列DESC)AND bloom_filter_fp_chance = 0.010000 AND caching ='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 = '真' AND populate_io_cache_on_flush = '假' AND 压实= { '类': 'SizeTieredCompactionStrategy'} AND 压缩= { 'sstable_compression': 'LZ4Compressor'}; – 2014-11-22 09:58:23

+0

我编辑了这个问题来删除'sql'标记,并用'cql'标记替换它。这是一个重要的区别,因为sql!= cql。 cql是sql的一个* subset *。期望cql能够像sql一样运行,这最终会让你感到沮丧。 – Aaron 2014-11-22 15:21:28

回答

0

根据Cassandra如何存储数据,更新集群列(主键)是不可能的。

Rowkey这是**styleid** ->[sequence] -> [active boolean,image ascii, name ascii]

的组合为了点更新/删除非主柱,它需要通过styleid -> sequence分区解析打列。

创建的主键无法更改,因为它表示数据在Cassandra中的存储方式。因此在这里更新'序列'是不可能的。

-1

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

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

我建议: 1)备份你的初始表,因为机会是你第一次尝试这个,你会错过一些东西。 2)编写一个程序来进行所需的更改(无论您是否熟悉Javascript程序,Java,以及其他)。 3)测试,测试,然后再次测试(首先在本地测试,然后升级到集成样式环境,最后在某种产品前环境下进行测试,该环境与您的生产环境尽可能接近。