2015-08-13 3 views
2

Моя таблица:диапазон на несколько столбцов в Кассандре

CREATE TABLE user_position (
    geopart text, // first 3 characters of geohash 
    geohash text, 
    datetime timestamp, 
    userId bigint, 
    PRIMARY KEY ((geopart), geohash, datetime, user_id) 
); 

Мой фиктивный запрос:

select * from user_position where geopart = 'abc' and geohash > 'a' and geohash < 'z' and datetime >= '2015-08-08 15:08:58+0530'; 

Ошибка:

Bad Request: PRIMARY KEY column "datetime" cannot be restricted (preceding column "geohash" is restricted by a non-EQ relation) 

Вопрос:

Что я делаю неправильно ? Если диапазон в нескольких столбцах невозможен в Cassandra, то как я могу это достичь?

ответ

5

Кассандра является довольно ограничительным, когда дело доходит до запросов, поскольку это не общая цель, как РСУБД. Вы не можете выполнить запрос диапазона для нескольких столбцов в Cassandra. Следующие правила применяются также:

  • Если не делать отборное все, что вам нужно будет предоставить ключ раздела, так Cassandra может найти узел с данными, который вы ищете
  • Вы можете фильтровать только по столбцам которые находятся в первичном ключе (раздел ключа и столбцы кластеризации)
  • Важным является порядок столбцов в определении первичного ключа - так Кассандра сохраняет данные на диске
  • Вы можете фильтровать только кластеризацию если столбец «предыдущий» также фильтруется (в порядке определения первичного ключа)
  • После выполнения запроса диапазона, вы не можете дополнительно фильтровать на последующем кластерном колонке

Все эти правила существуют, чтобы избежать бегущих людей антишаблоны в Кассандре.

Один из вариантов, который вы должны выполнить запрос диапазона для нескольких столбцов и иметь более надежный метод извлечения ваших данных, - это интегрироваться с поисковой платформой, такой как Solr.

+0

Могу ли я поставить запрос 'IN' после запроса диапазона? –

+0

Нет, после фильтрации с использованием диапазона на одном из ваших столбцов в Cassandra вы даже не можете использовать фильтр = для последующего столбца кластеризации. –

Смежные вопросы