簡體   English   中英

Cassandra CQL3切片查詢問題 - 如何切片

[英]Cassandra CQL3 slice query issue - How to slice

我有一個使用CQL3創建的表:

create table compositetest(m_id ascii,i_id int,l_id ascii,body ascii,
  PRIMARY KEY(m_id,i_id,l_id));

插入一些隨機數據:

cqlsh:testkeyspace1> insert into compositetest(m_id,i_id,l_id,body) VALUES ('m1',1,'l1','b1');
cqlsh:testkeyspace1> insert into compositetest(m_id,i_id,l_id,body) VALUES ('m2',2,'l2','b2');
cqlsh:testkeyspace1> insert into compositetest(m_id,i_id,l_id,body) VALUES ('m1',2,'l2','b2');
cqlsh:testkeyspace1> insert into compositetest(m_id,i_id,l_id,body) VALUES ('m2',1,'l1','b1');
cqlsh:testkeyspace1> insert into compositetest(m_id,i_id,l_id,body) VALUES ('m3',3,'l1','b1');
cqlsh:testkeyspace1> insert into compositetest(m_id,i_id,l_id,body) VALUES ('m3',2,'l2','b2');
cqlsh:testkeyspace1> insert into compositetest(m_id,i_id,l_id,body) VALUES ('m3',1,'l2','b2');
cqlsh:testkeyspace1> select * from compositetest;

 m_id | i_id | l_id | body
------+------+------+------
   m1 |    1 |   l1 |   b1
   m1 |    2 |   l2 |   b2
   m2 |    1 |   l1 |   b1
   m2 |    2 |   l2 |   b2
   m3 |    1 |   l2 |   b2
   m3 |    2 |   l2 |   b2
   m3 |    3 |   l1 |   b1

當我進行查詢時

cqlsh:testkeyspace1> select * from compositetest where i_id<=3 limit 3;

 m_id | i_id | l_id | body
------+------+------+------
   m1 |    1 |   l1 |   b1
   m1 |    2 |   l2 |   b2
   m2 |    1 |   l1 |   b1

現在,如果我想獲得接下來的3行

cqlsh:testkeyspace1> ?

試圖為切片范圍編寫CQL(不確定是否可以完成)

我的CQLSh顯示Socket已關閉,我看到錯誤

TSocket read 0 bytes

在服務器端,我看到以下錯誤:

ERROR [Thrift:3] 2012-08-12 15:15:24,414 CustomTThreadPoolServer.java (line 204) Error occurred during processing of message.
java.lang.NullPointerException
    at org.apache.cassandra.cql3.statements.SelectStatement$Restriction.setBound(SelectStatement.java:1277)
    at org.apache.cassandra.cql3.statements.SelectStatement$RawStatement.updateRestriction(SelectStatement.java:1151)
    at org.apache.cassandra.cql3.statements.SelectStatement$RawStatement.prepare(SelectStatement.java:1001)
    at org.apache.cassandra.cql3.QueryProcessor.getStatement(QueryProcessor.java:215)
    at org.apache.cassandra.cql3.QueryProcessor.process(QueryProcessor.java:121)
    at org.apache.cassandra.thrift.CassandraServer.execute_cql_query(CassandraServer.java:1237)
    at org.apache.cassandra.thrift.Cassandra$Processor$execute_cql_query.getResult(Cassandra.java:3542)
    at org.apache.cassandra.thrift.Cassandra$Processor$execute_cql_query.getResult(Cassandra.java:3530)
    at org.apache.thrift.ProcessFunction.process(ProcessFunction.java:32)
    at org.apache.thrift.TBaseProcessor.process(TBaseProcessor.java:34)
    at org.apache.cassandra.thrift.CustomTThreadPoolServer$WorkerProcess.run(CustomTThreadPoolServer.java:186)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    at java.lang.Thread.run(Thread.java:680)

如何獲得接下來的3行,關於服務器端的異常,我將提交一個錯誤。 CQLSh已關閉,我現在必須退出並重新連接

自CQL2及更高版本以來,CQL具有所謂的“自動分頁”。 簡而言之,您所描述的內容已經由驅動程序處理。

當您的代碼請求新行時,服務器只發送查詢的下一行,而不是整個結果。 同樣,您可以告訴它為您提供所需的行數。

在數據庫術語中,您執行查詢,返回光標。 然后告訴游標獲取N個行,服務器發回這些行(而不是整個結果集)。

一旦沒有更多行返回,光標就完成了。

在cqlsh中,當它遍歷光標直到那一點時,你會自動顯示1k行IIRC。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM