Cassandra删除记录
问题描述:
我是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部分)”
我怎么能去删除了全部符合条件的记录?
答
你的分区键(persistence_id,partition_nr)和卡桑德拉只使用分区键
所以您的查询需要像删除记录:
delete from wire_journal where persistence_id = x AND partition_nr = y AND event_manifest = 'aba:011000028';