Извините, что название может/не может дать точное описание того, что я намеревался.Cassandra select с диапазоном ключей кластеризации, у которого может не быть первичного ключа
В этом проблема. Мне нужно выбрать данные на основе диапазонов дат, и большинство наших запросов имеют поле «id», которое используется в наших запросах.
Итак, я создал модель данных с идентификатором в качестве первичного ключа и дату как ключ кластеризации.
По существу, как показано ниже (я просто использую поддельные/примерные утверждения, так как я не могу дать фактические данные).
create table tab1(
id text,
col1 text,
... coln text,
rec_date date,
rec_time timestamp,
PRIMARY KEY((id),rec_date,rec_time)
) WITH CLUSTERING ORDER BY rec_date DESC, rec_time DESC;
Он работает для большинства запросов и отлично работает.
Однако, я пытался оптимизировать ниже сценарий.
-> Все записи, которые больше, чем дата ABCD-ху-кх
Какой из приведенных ниже подходов было бы хорошо для меня.? Или что-нибудь лучше, чем эти два.
1) очень простой или простой подход. Используйте запрос:
select * from tab1 where id > '0' AND rec_date > 'abcd-xy-kl'
Каждая запись будет существенно больше, чем «0». Он может по-прежнему выполнять полное сканирование таблицы.
2) Создание вторичного индекса на rec_date и просто использовать запрос:
select * from tab1 where rec_date > 'abcd-xy-kl'
Кроме того, одна ключевая вещь, это я с помощью искры и с помощью cassandraSqlContext.sql, чтобы получить dataframe.
Итак, учитывая все вышеперечисленные детали, какой подход будет лучше.?