Как я могу упорядочить свои результаты по вторичному индексу или столбцу в Кассандре? - PullRequest
0 голосов
/ 11 февраля 2019

Я хочу построить таблицу, которая позволит мне фильтровать строки по отметке времени и региону.Вот что я имею ниже:

  CREATE TABLE event_start(  
        user_id text,  
        ts timestamp,  
        region text,  
        PRIMARY KEY(ts, region)  
    )  
    WITH CLUSTERING ORDER BY(region DESC);

Когда я пытаюсь выбрать и упорядочить результаты по регионам, я сталкиваюсь с тем, что «ORDER BY поддерживается только тогда, когда ключ раздела ограничен эквалайзером или IN."Я думаю, что понимаю сообщение об ошибке, но у меня возникают проблемы при поиске решения.Будет ли это связано с первичным ключом против ключа кластеризации?

Спасибо!

1 Ответ

0 голосов
/ 12 февраля 2019

Вы не можете напрямую запрашивать эту таблицу путем кластеризации столбца.Вы должны предоставить ключ раздела (ts).

Вы можете выполнять запрос без ключа раздела - только путем кластеризации столбцов: НО это заставляет Cassandra сканировать ВСЕ разделы !!!!Для этого вам необходимо добавить ALLOW FILTERING в вашем запросе.

Ниже приведен порядок запроса:

  1. Сначала - необходимо указатьключ разделения
  2. Столбцы кластеризации могут следовать после
  3. . Может выполнять запросы равенства (=) или диапазона для столбцов кластеризации
  4. Все сравнения на равенство должны предшествовать сравнению неравенства
  5. Поиск по диапазонам - это двоичный поиск с последующим линейным чтением

Вы можете вернуть ключевые столбцы для удовлетворения вашего запроса:

CREATE TABLE event_start(  
      user_id text,  
      ts timestamp,  
      region text,  
      PRIMARY KEY(region, ts)  
  );
...