2017-01-04 2 views
0

作成スクリプトを使用して複数のレコードを照会する方法:1つのCQL文の

Create Table TestTable (
    A1 ascii, 
    A2 int, 
    A3 int, 
    A4 ascii, 
    A5 int, 
    A6 bigint, 
    A7 bigint, 
    A8 ascii, 
    PRIMARY KEY ((A1, A2,A3, A4),A5) 
) WITH compression = { 'sstable_compression' : 'DeflateCompressor', 'chunk_length_kb' : 64 } 
    AND compaction = { 'class' : 'LeveledCompactionStrategy' }; 

パーティションのキーは(A1、A2、A3、A4)です。
(A1、A2、A3)でデータを照会して、さらにレコードを取得したいとします。
実際、100レコードを選択したいと思います。 WHERE句の条件として(A1、A2、A3、A4)を使用している場合は、10個のレコードしか取得できません。
私はwhere節の条件を少なくすることを意図しています。私はwhere節条件として(A1、A2、A3)を使うことができないことを知っています。
このクエリを実行する方法はありますか?範囲条件?または他の方法ですか?
私はちょうど1つのcqlステートメントを使ってテストを行います。私はデータモデルを変更しません。

答えて

1

あなたは何をする必要があるかを既に知っています。部分的な主キーからレコードを取得する方法はありません。これは、クラスタ内のデータの検索にパーティションキーが使用されているためです。つまり、パーティションにはというデータがあり、パーティションキータプルには欠けているコンポーネントは、パーティションが見つかりませんでした。 Cassandraは、データがどこにあるかを知ると、クラスタリングキーによって順序付けられたすべてのレコードをフェッチします。

問題を解決する方法は、(A1、A2、A3)のみをパーティションキーとして作成し、代わりにそのテーブルからレコードを取得することです。必要に応じて両方のテーブルを保持することができますが、元のモデルに(A1、A2、A3、A4)がある場合は、パーティションキーからA4を削除すると、クラスタにホットスポットが作成される可能性が高いことに注意してください。データは単一のパーティション内に収まるでしょう。

+0

私はただテストをしたいです。私は100のレコードを取得するために1つのcqlステートメントを使用したいと思います。私は無作為に100,000,000レコードをcassandraに挿入しました。私はこれらのデータの主キーを記録していません。私は主キーを知らない。今私は、テスト環境でいくつかのデータを照会する必要があります。私は1つのcqlステートメントを使用して100レコードを取得したいだけです。声明では、それが(A1、A2、A3)を含むことを願っています。 A4も可能です。 – niaomingjian

+0

あなたは無作為にテストするつもりです......あなたが汚い道を望むものを達成するために、普通の 'SELECT * FROM TestTable LIMIT 100; 'を使用してください。 – xmas79

+0

ありがとう。私はこの方法でしか使えないようだ。 – niaomingjian