[英]Paging large resultsets in Cassandra with CQL3 with varchar keys
我正在將舊的基於節儉的代碼更新為CQL3。
代碼的一部分是遍歷包含20M +行的表的整個數據集。 這部分最初是由於內存使用而使程序崩潰,因此我創建了RowIterator類,該類使用TokenRanges(和Hector)遍歷列族。
當嘗試使用CQL3重寫此代碼時,我在分頁數據時遇到問題。 我在http://www.datastax.com/documentation/cql/3.0/cql/cql_using/paging_c.html上找到了一些信息,但是在第一個“頁面”嘗試此代碼時
resultSet = session.execute("select * from " + TABLE + " where token(key) <= token(" + offset + ")");
我得到錯誤
com.datastax.driver.core.exceptions.InvalidTypeException:CQL類型varchar的值0的無效類型,需要類java.lang.String但提供了類java.lang.Integer
當然,該鏈接上的示例使用數字鍵。 有辦法用varchar(UTF8Type)鍵嗎?
似乎現在已經為此提供了內置功能( https://issues.apache.org/jira/browse/CASSANDRA-4415 ),但是我找不到使我前進的示例。 此外,我現在必須解決Cassandra 1.2.9的問題。
因此,簡單的答案是升級到Cassandra 2.0.X並使用新的內置分頁功能。 但是要在Cassandra 1.2上完成它,您的方向正確。 您的語法應該正常工作,如果您在cqlsh中運行查詢,是否會遇到相同的錯誤? 當像這樣進行分頁時,最好在示例中使用“>”,這可能是問題所在。 您select * from table limit 100
開始,然后select * from table where token(key)>token('last key') limit 100
我也會嘗試使用准備好的語句。 字符串操作可能會對偏移量產生影響。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.