Как я могу без «разрешить фильтрацию» иметь условный запрос в CQL? - PullRequest
1 голос
/ 24 апреля 2019

Я новичок в CQL. У меня есть стол (рестораны). Благодаря внедренным «ресторанам desc», он показывает информацию в информация о ресторанах

Как выполнить следующий запрос без использования «разрешить фильтрацию», select name from restaurants where borough = 'brooklyn';

Каковы необходимые шаги, чтобы можно было выполнить запрос без «разрешить фильтрацию»?

Большое спасибо.

1 Ответ

5 голосов
/ 24 апреля 2019

С Cassandra (CQL) вам необходимо использовать подход моделирования на основе запросов.Это означает, что вам понадобится таблица, специально разработанная для обслуживания запросов на borough.

. Хороший вопрос для начала, почему (в вашей текущей структуре таблицы) id ваш единственный первичный ключ?Нужно ли поддерживать запрос по id?Если нет, то вам не нужен этот стол.Однако, поскольку borough не является уникальным, имеет смысл объединить дополнительные столбцы в определение первичного ключа.

Я бы выбрал что-то вроде этого:

CREATE TABLE stackoverflow.restaurants_by_borough (
    borough text,
    name text,
    id int,
    buildingnum text,
    cuisinetype text,
    phone text,
    street text,
    zipcode int,
    PRIMARY KEY (borough, name, id)
) WITH CLUSTERING ORDER BY (name ASC, id ASC);

Теперь этот запрос будет работать:

select name from restaurants_by_borough
where borough = 'brooklyn';

Он вернет данные для каждого района, отсортированные по name.Кроме того, если в любых двух ресторанах одинаковый name (возможно, в Бруклине более одного McDonalds), в конец ключа добавляется id, чтобы обеспечить уникальность.

...