2017-03-22 4 views
1

Ich bin neu bei Cassandra und habe Probleme beim Löschen von Datensätzen. Ich habe eine Tabelle wie folgt definiert:Cassandra Datensätze löschen

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

und Indizes wie folgt definiert:

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

Ich möchte in der Lage sein, durch Zeitstempel zu löschen und event_manifest.

ich durch ein Ereignis Manifest zum Beispiel abfragen kann:

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

Die obige Abfrage funktioniert. Jedoch Wenn ich versuche, eine Deletion für die gleichen Kriterien wie folgt vorgehen:

delete from wire_journal where event_manifest = '011000028'; 

Ich erhalte die folgende Fehlermeldung:

INVALIDREQUEST: code = 2200 [Invalid query] message = "Einige Partitionsschlüssel Teile fehlen : persistence_id, partition_nr“

ich habe diese Spalten in meiner löschen einschließlich versucht wie folgt:

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

und ich erhalte den folgenden Fehler:

INVALIDREQUEST: code = 2200 [Invalid query] message =

Wie kann ich über das Löschen alle Datensätze gehen "Ungültige Kennung persistence_id zum Löschen (sollte kein PRIMARY KEY Teil sein)", die diese Bedingung erfüllen?

Antwort

2

Ihre Partition Schlüssel ist (persistence_id, partition_nr) und Cassandra nur Datensätze löschen Partition Schlüssel

mit

So Ihre Abfrage wie sein müssen:

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

Verwandte Themen