2014-11-22 117 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)測試,測試,然後再次測試(首先在本地測試,然後升級到集成樣式環境,最後在某種產品前環境下進行測試,該環境與您的生產環境儘可能接近。