#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 таблицы и обработал данные в соответствии с необходимостью