2017-03-22 271 views
1

我是Cassandra的新手,我試圖刪除記錄時遇到了一些問題。我有一個表定義如下:Cassandra刪除記錄

CREATE TABLE wire_journal (
    persistence_id text, 
    partition_nr bigint, 
    sequence_nr bigint, 
    timestamp timeuuid, 
    timebucket text, 
    event blob, 
    event_manifest text, 
    message blob, 
    ser_id int, 
    ser_manifest text, 
    tag1 text, 
    tag2 text, 
    tag3 text, 
    used boolean static, 
    writer_uuid text, 
    PRIMARY KEY ((persistence_id, partition_nr), sequence_nr, timestamp, timebucket) 
) WITH CLUSTERING ORDER BY (sequence_nr ASC, timestamp ASC, timebucket ASC) 
    AND bloom_filter_fp_chance = 0.01 
    AND caching = {'keys': 'ALL', 'rows_per_partition': 'NONE'} 
    AND comment = '' 
    AND compaction = {'bucket_high': '1.5', 'bucket_low': '0.5', 'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy', 'enabled': 'true', 'max_threshold': '32', 'min_sstable_size': '50', 'min_threshold': '4', 'tombstone_compaction_interval': '86400', 'tombstone_threshold': '0.2', 'unchecked_tombstone_compaction': 'false'} 
    AND compression = {'chunk_length_in_kb': '64', 'class': 'org.apache.cassandra.io.compress.LZ4Compressor'} 
    AND crc_check_chance = 1.0 
    AND dclocal_read_repair_chance = 0.1 
    AND default_time_to_live = 0 
    AND gc_grace_seconds = 864000 
    AND max_index_interval = 2048 
    AND memtable_flush_period_in_ms = 0 
    AND min_index_interval = 128 
    AND read_repair_chance = 0.0 
    AND speculative_retry = '99PERCENTILE'; 

和索引的定義如下:

CREATE CUSTOM INDEX timestamp_idx ON wire_journal (timestamp) USING 'org.apache.cassandra.index.sasi.SASIIndex'; 
CREATE CUSTOM INDEX manifest_idx ON wire_journal (event_manifest) USING 'org.apache.cassandra.index.sasi.SASIIndex'; 

我希望能夠通過時間戳和event_manifest刪除。

我可以通過一個事件清單,例如查詢:

select event_manifest, dateOf(timestamp) from wire_journal where event_manifest = '011000028'; 

上述作品查詢。但是如果我嘗試了同樣的標準做了刪除如下:

delete from wire_journal where event_manifest = '011000028'; 

我收到以下錯誤:

InvalidRequest:代碼= 2200 [無效查詢]消息=「一些分區關鍵零部件缺失:persistence_id,partition_nr」

我試過,包括在我刪除這些列如下:

delete persistence_id, partition_nr from wire_journal where event_manifest = 'aba:011000028'; 

,我得到了以下錯誤:

invalidRequest:代碼= 2200 [無效查詢]消息=「無效標識符persistence_id刪除(不應該是一個PRIMARY KEY部分)」

我怎麼能去刪除了全部符合條件的記錄?

回答

2

你的分區鍵(persistence_id,partition_nr)和卡桑德拉只使用分區鍵

所以您的查詢需要像刪除記錄:

delete from wire_journal where persistence_id = x AND partition_nr = y AND event_manifest = 'aba:011000028';