2017-03-22 203 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';