Cassandra - 遍历表格行

时间:2017-10-04 21:24:52

标签: cassandra pagination erlang cql

我的目标是浏览我的cassandra数据库,其中的每个条目,并检查某个字段以查看是否需要执行操作。我正在使用这里找到的erlang cql驱动程序:https://github.com/matehat/cqerl

当我在2000年的表中运行select * from keyspace.table limit 10;时,我获得前10个结果......但是我需要获得下一个1990年。如何使用CQL获得接下来的10个?我看到有支持分页但没有关于如何在cql中执行此操作的文档。

我已经广泛研究了这个问题,似乎关于这个主题的唯一答案是不完整的,许多关于这些问题的评论者没有得到他们想要的答案:Iterating through Cassandra wide row with CQL3

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

感谢@Atomic_alarm,我找到了答案。

此处的文档:https://www.datastax.com/dev/blog/client-side-improvements-in-cassandra-2-0指定如何使用CQL进行自动分页。

我没有像文档那样使用cql命令行,而是使用了erlang驱动程序代码。首先,我在表中插入1000行,然后运行下面的函数。它遍历所有1000个结果,一次2页:

test_page() ->
       {ok, Client} = cqerl:get_client({}),
       {ok, Res} = cqerl:run_query(Client, #cql_query{statement = "SELECT * FROM dks.devices;",
                       page_size = 2}),
       get_more(Res, 0).
   get_more(Res, Num) ->
       case cqerl:has_more_pages(Res) of
           true ->
               {ok, Res2} = cqerl:fetch_more(Res),
               get_more(Res2, Num+1);
           false -> 
               Num
       end.