2011-08-31 22 views
3

私は、Cassandra-0.7.8でBETWEEN、ORDER BY、ASC/DSC命令などのSQL操作を実行したかったのです。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 Query Language)を使用していますか? –

答えて

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. 

カサンドラにおける二次インデックスの問い合わせは、少なくとも一つの平等の用語が必要なので、私はあなたがDEPT =「IT」AND ENO> = XとENO < = Yを行うことができると思う、それだけではないBETWEENスタイルのクエリ。

これは、従業員番号をキーとした各従業員の列と適切なコンパレータを使用して、すべての列が自動的に従業員番号順にソートされるように、独自のインデックス行を作成することで実行できます。その行の範囲問合せを実行して一致する従業員のリストを取得できますが、非正規化しない限り、従業員(dobなど)ごとに他のデータを検索する必要があります。 。あなたは依然としてクライアントでdobの注文を行う必要があります。私は列がパーティ でソートされますあなたは、列ファミリを作成し、あなたの意見 にソートするためclustringキーを使用して、列の家族に行できコンパレータによってソートされます知っているように

+0

多くのDNAをありがとう。私はこれらのアイデアを試してみます。 – Thamizh

1

私はあなたがこの論文を読むことをお勧め
Cassandra The Definitive Guide Chapter 6

関連する問題