endianness—是否可以使用cassandra中的单个update命令设置不同列的Map中每个元素的ttl

qnakjoqk  于 2021-06-10  发布在  Cassandra
关注(0)|答案(1)|浏览(399)

假设表名为:company\u employee

select * from company_employee ;
company_id  | company_name | employee_id_name_map         | employee_id_department_map
------------+--------------+------------------------------+---------------------------
123         |      abc     | {'1': 'john'} ,{'2': 'jack'} | {'1': 'tech'} ,{'2': 'hr'}

在这里,我想将employee\id\u name\uMap元素{'1':'john'}的ttl设置为30,将employee\id\u department\uMap元素{'1':'tech'}的ttl设置为40有没有办法使用单个cassandra命令更新这两个元素?
我已经尝试过使用下面的单个命令为map中的单个元素设置ttl

UPDATE company_employee USING TTL 30 SET employee_id_name_map['1']='john' WHERE company_id='123' and company_name = 'abc';
UPDATE company_employee USING TTL 40 SET employee_id_department_map['1']='tech' WHERE company_id='123' and company_name = 'abc';

使用上面的Cassandra命令它的工作很好,但我想在一个单一的Cassandra写,任何好的建议帮助我很多。。
提前谢谢

6fe3ivhb

6fe3ivhb1#

不,不能在一个cql语句中设置不同的ttl。但是您可以使用批处理将多个命令组合到一个cassandra写操作中(如果您使用相同的分区键)。这样地:

BEGIN BATCH
UPDATE company_employee USING TTL 30 SET employee_id_name_map['1']='john' WHERE company_id='123' and company_name = 'abc';
UPDATE company_employee USING TTL 40 SET employee_id_department_map['1']='tech' WHERE company_id='123' and company_name = 'abc';
APPLY BATCH;

相关问题