Запрос Cassandra не удалось выполнить c - Хотите узнать причину - PullRequest
0 голосов
/ 07 августа 2020

Я работаю над созданием службы планировщика, для которой требуется структура таблицы Cassandra, как показано ниже.

CREATE TABLE IF NOT EXISTS spc_cmd_scheduler (
id timeuuid,
router_id text,
account_id text,    
mode text,
triggered_by text,
retry_count smallint,
PRIMARY KEY ((triggered_by,retry_count),id)
)WITH CLUSTERING ORDER BY (id ASC);

Когда я делаю запрос с помощью PK, я получаю ошибку ниже. Могу ли я узнать причину?

select count(*) from spc_cmd_scheduler  where triggered_by = 'ROUTER_ONBOARD' and retry_count < 3;

InvalidRequest: Error from server: code=2200 [Invalid query] message="Cannot execute this query as it might involve data filtering and thus may have unpredictable performance. If you want to execute this query despite the performance unpredictability, use ALLOW FILTERING"

Я понимаю, что «РАЗРЕШЕНИЕ ФИЛЬТРАЦИИ» решит мою проблему, но хотел узнать, что не так со структурой таблицы. Каков оптимальный способ создать эту таблицу, которая соответствует моим требованиям.

Просто чтобы дать представление о моем требовании, мне нужно запустить планировщик для сканирования этой таблицы и выполнить команду и удалить запись после ее успешного выполнения. Если команда не работает, мне нужно повторить попытку 3 раза. Таким образом, для этой таблицы требуются операции SELECT, UPDATE и DELETE.

1 Ответ

1 голос
/ 07 августа 2020

В вашем случае проблема в том, что столбец retry_count является частью ключа раздела, и мы можем использовать только операторы равенства (= или IN) для столбца ключа раздела. Операции неравенства (<, >, et c.) Поддерживаются только для столбцов кластеризации, и необходимо указать все предыдущие столбцы кластеризации.

...