2011-08-31 1 views
3

Я хотел выполнить SQL-операции, такие как BETWEEN, ORDER BY с ордером ASC/DSC на Cassandra-0.7.8.Cassandra BETWEEN & ORDER BY Операции

Как я знаю, Cassandra-0.7.8 не имеет прямой поддержки этих операций. Пожалуйста, дайте мне знать, есть ли способ сделать это путем настройки на вторичный индекс?

Ниже приводится модель моей модели данных.

Emp(KS){ 
    User(CF):{ 
     bsanderson(RowKey): { eno, name, dept, dob, email } 
    prothfuss(RowKey): { eno, name, dept, dob, email } 
} 
} 

запросов:

- Select * from emp where dept='IT' ORDER BY dob ASC. 
- Select * from emp where eno BETWEEN ? AND ? ORDER BY dob ASC. 

Спасибо заранее.

Привет,

Thamizhananl

+0

Вы используете CQL (язык запросов Cassandra) для своего запроса? –

ответ

3
Select * from emp where dept='IT' ORDER BY dob ASC. 

Можно выбрать строки, в которых столбец «DEPT» имеет определенное значение, с помощью встроенного вторичных индексов. Однако строки будут возвращены в порядке, определенном разделителем (RandomPartitioner или OrderPreservingPartitioner). Чтобы заказать по произвольным значениям, таким как DOB, вам нужно будет сортировать на клиенте.

Или вы можете поддержать этот запрос напрямую, указав строку для каждого департамента и столбец для каждого сотрудника, с ключом (и, следовательно, отсортированным) DOB. Но будьте осторожны с общими днями рождения! И вам все равно понадобятся последующие запросы для извлечения других данных (результаты вашего SELECT *) для выбранных сотрудников, если вы не денормализуете, чтобы нужные данные также хранились в индексе.

Select * from emp where eno BETWEEN ? AND ? ORDER BY dob ASC. 

Вторичный индекс выполнения запрос в Кассандре требует, по крайней мере один члена равенства, так что я думаю, что вы можете сделать отдел = «IT» И Иным> = X и Ино < = у, но не только запрос BETWEEN-стиля ,

Вы можете сделать это, создав свою собственную строку индекса, со столбцом для каждого сотрудника, с ключом на номер сотрудника, с соответствующим компаратором, чтобы все столбцы были автоматически отсортированы в порядке номеров сотрудников. Затем вы можете выполнить запрос диапазона в этой строке, чтобы получить список соответствующих сотрудников, но вам понадобятся дополнительные запросы для извлечения других данных для каждого сотрудника (dob и т. Д.), Если вы не денормализуете, чтобы нужные данные также хранились в индексе , Вам все равно нужно будет сделать заказ заказа на клиента.

+0

Большое спасибо ДНК. Я буду экспериментировать с этими идеями. – Thamizh

1

Как я знаю, что столбцы будут отсортированы по компаратор при создании столбца семьи, и вы можете использовать ключ clustring для сортировки по вашему мнению и грести в семье колонки будут отсортированы по секционирования Я предлагаю вам прочитать эту статью
Cassandra Окончательное руководство Глава 6