Как избежать РАЗРЕШЕННОЙ ФИЛЬТРАЦИИ Cassandra?

#cassandra

#cassandra

Вопрос:

У меня есть следующая модель данных :-

  campaigns {
  id int PRIMARY KEY,
  scheduletime text,
  SchduleStartdate text,
  SchduleEndDate text,
  enable boolean,
  actionFlag boolean,
.... etc   
 }
  

Здесь мне нужно извлечь данные на основе даты начала и конечных данных с помощью out ALLOW FILTERING .
Я получил больше предложений по перепроектированию схемы для полного выполнения требования, но я не могу фильтровать данные на основе id, поскольку мне нужны данные в черно-белых датах.

Кто-нибудь дает мне хорошее предложение по полному заполнению этого сценария для выполнения следующего запроса :-

select * from campaings WHERE startdate='XXX' AND endDate='XXX' ; // Без возможности разрешить фильтрацию

Комментарии:

1. ((startdate, enddate,(id)) — сохранение начала и конца в качестве раздела и идентификатора в качестве кластеризации — если вашим требованием является только приведенный выше запрос, но опять же это будет зависеть от того, сколько данных у вас будет в каждом диапазоне дат — или же вы можете подробнее объяснить требования и характер данных?

2. можете ли вы обновить таблицу с помощью упомянутого вами синтаксиса? Спасибо за быстрый ответ. У меня есть только один первичный ключ. Но мне это не нужно для извлечения данных кампаний, поскольку у каждой кампании разные идентификаторы кампаний. Это было необходимо на основе даты начала и окончания

3. СОЗДАЙТЕ ТАБЛИЦУ campaigns (текст SchduleStartdate, текст SchduleEndDate, идентификатор int, текст scheduletime, включить логическое значение, ПЕРВИЧНЫЙ КЛЮЧ ((SchduleStartdate, текст SchduleEndDate), идентификатор));

4. Можете ли вы заставить его ответить и расширить объяснение, чтобы оно было полезно новичкам, в моем случае оно работает..

Ответ №1:

 CREATE TABLE campaigns (
SchduleStartdate text, 
SchduleEndDate text, 
id int, 
scheduletime text,
enable boolean, 
PRIMARY KEY ((SchduleStartdate, SchduleEndDate),id));
  

Вы можете выполнять приведенные ниже запросы к таблице,

 slect * from campaigns where  SchduleStartdate = 'xxx' and SchduleEndDate = 'xx'; -- to get the answer to above question.

slect * from campaigns where  SchduleStartdate = 'xxx' and SchduleEndDate = 'xx' and id = 1; -- if you want to filter the data again for specific ids
  

Здесь SchduleStartdate и SchduleEndDate используются в качестве ключа раздела, а идентификатор используется в качестве ключа кластеризации, чтобы убедиться, что записи уникальны.

Таким образом, вы можете фильтровать на основе start, end, а затем id, если это необходимо.

Одним из недостатков этого будет то, что вам нужно будет фильтровать только по идентификатору, что будет невозможно, поскольку вам нужно сначала ограничить ключи раздела.

Комментарии:

1. Как ограничить ключи раздела .. ? не могли бы вы обновить это, если сможете, плз.. На самом деле get operation теперь просит меня использовать РАЗРЕШИТЬ фильтрацию. Поскольку я новичок, мне нужно спросить вас. Как ограничить ключи раздела в операции Get

2. Я добавил два запроса Get — надеюсь, это поможет

3. Этот вопрос помог тому, что задано, но это нарушило существующий поток. Итак, я только что проголосовал, надеюсь, вы понимаете, я создал 2 таблицы и обработал данные в соответствии с необходимостью