Folks,
Is there any way to perform a delete in CQL of all rows where a
particular columns (that is part of the primary key) is less than a
certain value? I believe that the corresponding SELECT statement
works, as in this example:
cqlsh:fiddle> describe table foo;
CREATE TABLE foo (
key text,
fam text,
qual text,
version int,
val text,
PRIMARY KEY (key, fam, qual, version)
) WITH
bloom_filter_fp_chance=0.010000 AND
caching='KEYS_ONLY' AND
comment='' AND
dclocal_read_repair_chance=0.000000 AND
gc_grace_seconds=864000 AND
index_interval=128 AND
read_repair_chance=0.100000 AND
replicate_on_write='true' AND
populate_io_cache_on_flush='false' AND
default_time_to_live=0 AND
speculative_retry='99.0PERCENTILE' AND
memtable_flush_period_in_ms=0 AND
compaction={'class': 'SizeTieredCompactionStrategy'} AND
compression={'sstable_compression': 'LZ4Compressor'};
cqlsh:fiddle> select * from foo;
key | fam | qual | version | val
-------+------+------+---------+--------
Clint | info | hair | 5 | brown
Clint | info | hair | 10 | blonde
(2 rows)
cqlsh:fiddle> select val from foo where key='Clint' and fam='info' and
qual='hair' and version <= 5;
val
-------
brown
(1 rows)
cqlsh:fiddle> delete val from foo where key='Clint' and fam='info' and
qual='hair' and version <= 5;
Bad Request: Invalid operator LTE for PRIMARY KEY part version
I assume the only way I can implement the functionality I'm looking
for is to do a select, get a list of all of the elements that I want
to delete, and then delete them in a big batch statement. Is that
correct?
Thanks!
Best regards,
Clint