Выделите все строки из Кассандры, создав в этом диапазоне - PullRequest
1 голос
/ 13 апреля 2020

У меня есть таблица Кассандры, которая имеет следующую структуру:

CREATE TABLE testKeySpace.table1 (
    field1 text,
    field2 text,
    field3 text,
    field4 text,
    id uuid,
    created_on timestamp,
    updated_on timestamp,
    PRIMARY KEY ((field1, field2, item_id), field3, field4)
) WITH CLUSTERING ORDER BY (field3 ASC, field4 ASC)

Данные были добавлены с течением времени. И в соответствии с последними требованиями я должен извлекать данные из этой таблицы на основе созданного_ *. 1004 *

Запрос на выборку выглядит следующим образом: Учитывая 2 временные метки t1 и t2, я должен получить все строки, которые были созданы между t1 и t2.

Теперь я использую следующий запрос для получения всех этих данных:

select * from testKeySpace.table1 where created_on >= t1 and created_on <=t2;

Это дает мне следующую ошибку: InvalidRequest: Error from server: code=2200 [Invalid query] message="Predicates on non-primary-key columns (created_on) are not yet supported for non secondary index queries

Что я пробовал: Еще один вопрос по stackoverflow

Я добавил индекс на creat_on с помощью запроса: CREATE INDEX indexKey ON testKeySpace.table1 (created_on);

По-прежнему безуспешно. Я получаю ту же ошибку. Может ли кто-нибудь помочь мне здесь. Я из домена sql и не особо подвержен воздействию кассандры.

1 Ответ

1 голос
/ 13 апреля 2020

Cassandra не работает таким образом - вы можете выполнять запросы диапазона только для столбцов кластеризации и в ограниченном количестве случаев - обычно это делается внутри одного раздела. Вторичные индексы предоставляют вам возможность выполнять запрос, но только для точного значения, а не для диапазона значений. В SASI есть очень экспериментальная поддержка запросов диапазона, но она очень глючная и не рекомендуется для использования.

Если вы используете DataStax Enterprise (DSE), вы можете создать индекс поиска DSE для этого столбца, и вы получите необходимую функциональность. Если у вас нет DSE, вы можете выполнить такой запрос через Spark, но он будет очень медленным, так как вам нужно будет загрузить все данные из вашей базы данных, чтобы выполнить фильтрацию данных.

I рекомендую пройти курс DS201 по DataStax Academy , чтобы понять, как работает Cassandra, и курс DS220, чтобы узнать, как моделировать данные в Cassandra (подсказка: модель данных в Cassandra начинается с запросов, которые будут выполняться для этих данных).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...