2012-09-13 39 views
1

赫:赫克託 - 核心1.0-5卡桑德拉 - 1.1.2卡桑德拉赫克託:IndexedSliceQuery對於給定的行鍵和二級指標

我需要一個查詢中赫像模式:

select * from table1 where rowkey='x' and secondary_indexed_column='y' 

如果我使用setStartKey設置爲rowKey'x'的IndexedSliceQuery,我仍然得到所有包含secondary_indexed_column ='y'的行。 如果我在addEqualsExpression添加row_key場(「row_key」,「X」),我得到以下異常:

org.apache.thrift.protocol.TProtocolException: Required field 'value' was not present! Struct: IndexExpression(column_name:64 65 76 69 63 65 5F 69 64, op:EQ, value:null) 
    at org.apache.cassandra.thrift.IndexExpression.validate(IndexExpression.java:562) 
    at org.apache.cassandra.thrift.IndexExpression.write(IndexExpression.java:499) 
    at org.apache.cassandra.thrift.IndexClause.write(IndexClause.java:521) 
    at org.apache.cassandra.thrift.Cassandra$get_indexed_slices_args.write(Cassandra.java:13469) 
    at org.apache.cassandra.thrift.Cassandra$Client.send_get_indexed_slices(Cassandra.java:793) 
    at org.apache.cassandra.thrift.Cassandra$Client.get_indexed_slices(Cassandra.java:781) 
    at me.prettyprint.cassandra.service.KeyspaceServiceImpl$19.execute(KeyspaceServiceImpl.java:732) 

那麼,如何限制我的indexedSliceQuery只爲給定的行鍵返回結果?

+0

所以,我有點困惑。您正在提供想要搜索特定列的行鍵?您不需要索引,只需讀取行並檢查列名和值。 IndexedSliceQuery將返回一組包含指定列名/值的行(在指定的起始點)。 – libjack

回答

0

另一種選擇是,如果你的分區數據,你可以做playOrm這個查詢,你在一個表中要支持數百萬行的分區(不突破1000萬,雖然),並儘可能多的分區。然後,你只是做查詢

@NoSqlQuery(NAME = 「findSomething」,查詢= 「分區,T(:partitionid的)選擇T FROM表爲T,其中日期>:一些和YYYY <:秒」)

注意:請注意,查詢沒有限制,除非它在分區內,並且您可以執行JOINS以及!