2017-12-08 14 views
1

私はcassandraの初心者です。私はcassandraの初心者ですが、私は "sort"に問題があります。

私のテーブルには、それそれのような、非常に簡単です:

CREATE TABLE test.user_daily_report (
    stringdate bigint, 
    m_date date, 
    users int, 
    PRIMARY KEY (stringdate, m_date) 
) WITH CLUSTERING ORDER BY (m_date DESC) 
    AND read_repair_chance = 0.0 
    AND dclocal_read_repair_chance = 0.1 
    AND gc_grace_seconds = 864000 
    AND bloom_filter_fp_chance = 0.01 
    AND caching = { 'keys' : 'ALL', 'rows_per_partition' : 'NONE' } 
    AND comment = '' 
    AND compaction = { 'class' : 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy', 'max_threshold' : 32, 'min_threshold' : 4 } 
    AND compression = { 'chunk_length_in_kb' : 64, 'class' : 'org.apache.cassandra.io.compress.LZ4Compressor' } 
    AND default_time_to_live = 0 
    AND speculative_retry = '99PERCENTILE' 
    AND min_index_interval = 128 
    AND max_index_interval = 2048 
    AND crc_check_chance = 1.0; 

しかし、結果はソートのいずれかの効果を持っていない:私はm_dateで注文しようとすると

enter image description here

私はこれを満たします号:

enter image description here

私を助けてください、それは私がたくさん混乱させる。パーティションキー(あなたの例ではstringdate)にWHERE条件を指定する場合、すなわち、select * from table where stringdate = 'something' order by m_date desc - - この場合にはデータがに関連する唯一のパーティション内部カサンドラORDER BY作品に

おかげで、従来のリレーショナル・データベースとは対照的に

答えて

2

、特にstringdateは、同じパーティションにあるためソートされます。

あなたが 'ALLOW FILTERING'を追加したため、あなたはCassandraのすべての結果を受け取っています - この場合、Cassandraは条件を使用してクラスタ全体のスキャンを実行し、データを取得してそれをあなたに返します。並べ替えを実行しませんでした。

私は「DS220:データモデリング」鑑賞することをお勧めしますDataStaxアカデミーからコースを -

P.S. ...彼らは多くの有用な情報を提供どのようなタスクを解決したいのですか?データモデルを変更する必要があると私は信じています。

+0

解決策は機能しません。 stringdateは一意のプライマリキーではないため、複合キーなので、フィルタリングが必要です。私はそれを試してエラーを得る。 私の仕事については、チャートをプロットするためにquerryデータが必要です。 UIから、私はstart_dateとend_date(例えば、2017-12-06)でバックエンドへのリクエストを投稿しています。そして、私はuser_daily_reportテーブルのuser(users)数をm_dateに従わせる必要があります。 m_dateで昇順/降順にソートする必要があります。私はすでに[start_date、end_date]の範囲内のすべてのレコードを選択しています。しかし、私はそれらを注文することはできません。助けてください –

+0

申し訳ありませんが、私は少し質問を誤解しましたが、とにかく - 私の答えは正しい - あなたの状況では、データの並べ替えを実行することができますカサンドラは、実際には、すでに指定された注文です) –

+0

親愛なるアレックス、私は私のデータベースにあなたのクエリを試みました。そしてそれはうまくいかなかった。それは補強を可能にする必要がある。私の仕事については、私は2つの主要なフィールド、日付とユーザーがあります。私は2つの異なる日付の間にリストのユーザーを取得する必要があります。そして、私はクエリresulが日付順にソートされたかった。それは私が必要とするものです。 Pls help me –

関連する問題