2016-08-19 8 views

答えて

4

カサンドラ唯一の支持体はによってクラスタリングキー、および内のパーティション・キーを注文する結果セットなので。あなたのケースでは、"SeqNum"がパーティションキーであり、クラスタリングキーが定義されていません。

去年はarticle describing this functionality for Planet Cassandraと書いてあります。ここで注意すべき

> SELECT userid, token(userid), posttime FROM postsbyuser; 

userid | token(userid)  | posttime 
--------+----------------------+-------------------------- 
     1 | -4069959284402364209 | 2015-01-25 13:25:00-0600 
     1 | -4069959284402364209 | 2015-01-25 13:22:00-0600 
     0 | -3485513579396041028 | 2015-01-25 13:21:00-0600 
     2 | -3248873570005575792 | 2015-01-25 13:28:00-0600 
     2 | -3248873570005575792 | 2015-01-25 13:27:00-0600 
     2 | -3248873570005575792 | 2015-01-25 13:26:00-0600 

いくつかのこと:

を私は6行を挿入して、テーブルを照会した場合

CREATE TABLE postsbyuser (
    userid bigint, 
    posttime timestamp, 
    postid uuid, 
    postcontent text, 
    PRIMARY KEY ((userid), posttime) 
) WITH CLUSTERING ORDER BY (posttime DESC); 

:記事で私の第二の例に続いて、このテーブル定義を考えます

  1. useridはパーティションキーであり、行はその値によって順にではなく、です。

  2. 値は、実際にで「並べ替え」しているあなたはuserid列にtoken関数を適用から見ることができるように、パーティション・キーのためのトークン値をハッシュ化されました。

  3. テーブルでは、クラスタリングキーとしてposttimeが定義されていますが、結果セットはその列でもソートされません。しかし、それぞれuserid内では、の結果はであり、注文はposttimeです。これにより、で、クエリー結果はCassandraでバインドされていないクエリ(WHERE句なしのクエリ)でソートできないことがわかります。

  4. 結果セットにソート順を適用するには、ORDER BY句を使用する必要はありません。

私は彼らのポストの時間が注文した投稿をしたい場合は、私は(この場合は)特定のユーザーのIDを提供する必要があります:あなたが見ることができるように

> SELECT userid, token(userid), posttime 
FROM postsbyuser 
WHERE userid=2; 

userid | token(userid)  | posttime 
--------+----------------------+-------------------------- 
     2 | -3248873570005575792 | 2015-01-25 13:28:00-0600 
     2 | -3248873570005575792 | 2015-01-25 13:27:00-0600 
     2 | -3248873570005575792 | 2015-01-25 13:26:00-0600 

を、Aの結果パーティションキーによるクエリフィルタリングは、実際には表の定義で定義されている降順で行われます()。また、複数のパーティションからデータを返すクエリは、実行不可能であり、反パターンとみなされます。

関連する問題