2017-01-03 10 views
0

テーブルを作成しました。その主キーは((A1、A2)、A3、A4、A5)です。
私はcassandraTemplate.select(select、MyClass.class)を使用したいと思います。いくつかのレコードを選択します。「パーティションキーパーツ:他のパーツと同じようにXXXXを制限する必要があります」

select.setConsistencyLevel(com.datastax.driver.core.ConsistencyLevel.ONE); 
select.where(QueryBuilder.eq("A1", A1)) 
     .and(QueryBuilder.eq("A2", A2)) 
     .and(QueryBuilder.eq("A3", A3)).limit(100).allowFiltering() 
     .setReadTimeoutMillis(100 * 1000); 

私は、次のエラーを得た: HTTP status 500 - Request processing failed; nested exception is org.springframework.cassandra.support.exception.CassandraInvalidQueryException: Partition key parts: A4 must be restricted as other parts are;

作成スクリプト:

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' }; 
+2

テーブル作成スクリプトは、http://stackoverflow.com/questions/24949676/difference-between-partition-key-composite-key-and-clustering-key-in-cassandraに記載されているので、表示することはできますか? A3、A4、A5はパーティションキーの一部ではないことも記述しています –

+0

さらに、 'allowFiltering()'を削除してください。あなたのクエリ*が機能するために* ALLOW FILTERINGを必要とするならば、あなたはあなたのモデルを間違って作りました。また、読み取りタイムアウトを100秒に設定すると、ノードをヒントするのに適しています。 – Aaron

+0

@Aaron allowFiltering()を取り除いた後、同じエラーが発生しました。コマンドラインでは、cql文を直接実行しましたが、同じエラーが発生しました。 – niaomingjian

答えて

1
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)、A5)です。

関連する問題