Можно ли установить TTL каждого элемента на карте разных столбцов с помощью одной команды обновления в Кассандре - PullRequest
1 голос
/ 29 января 2020

предположим, что имя таблицы: company_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'}

Здесь я хотел установить TTL для employee_id_name_map element "{'1': 'john'} " как 30 и для employee_id_department_map element " {'1': 'tech'} " как 40 есть ли способ обновить оба элемента с помощью одной команды Cassandra?

Я пытался установить 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. хорошо, но я хотел получить одну запись на кассандре, любое хорошее предложение мне очень помогает.

Заранее спасибо

1 Ответ

0 голосов
/ 29 января 2020

Нет, вы не можете устанавливать разные TTL в одном операторе CQL. Но вы можете использовать пакеты для объединения нескольких команд в одну запись 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;
...