4

我有一个 Cassandra 1.2 集群,我正在使用 cql 库从 Python 中使用它。现在我需要使用 get_slice 实现一些看起来非常简单的分页功能,但是我无法从 cql 库中找到任何关于如何使用此类内容的文档:

get_slice("key" : table_key,
      "column_parent" : {"column_family" : "MyColumnFamily"},
      "predicate" :
       { "slice_range" : 
 { "start" : "SomeStartID", 
 "end" : "Z", 
 "reverse" : "false", 
 "count : "100" }
 } )

我在 get_slice 的随机文档中看到了这种类型的语法,它看起来不像 CQL 3 语法,我如何从 Python 运行这种类型的查询到 Cassandra 1.2 集群?,这是当前使用 get_slice 的方式还是有新的语法或 CQL 3 替代方案?

提前致谢!

4

2 回答 2

4

您可以以几乎相同的方式进行分页:设置一个限制并从一个大于前一个接收到的列名开始。例如,我在键空间 ks1 中创建了一个表 test1:

CREATE TABLE test1 (
  a text,
  b text,
  PRIMARY KEY (a, b)
)

这里 a 是我的行键, b 是列名。然后我插入了 12 条记录,其中 a=a 和 b 从 a 到 l。所以

cqlsh:ks1> select * from test1;

 a | b
---+---
 a | a
 a | b
 a | c
 a | d
 a | e
 a | f
 a | g
 a | h
 a | i
 a | j
 a | k
 a | l

然后我使用 CQL 驱动程序与这个 python 进行了分页:

import cql
con = cql.connect('localhost', keyspace='ks1', cql_version='3.0.0')
cursor = con.cursor()
last = ""
while last != None:
    cursor.execute("select * from test1 where a=:a and b>:b limit 5", {"a": "a", "b": last})
    last = None
    for row in cursor:
        print row
        last = row[1]

分批 5 个页面。输出为:

[u'a', u'a']
[u'a', u'b']
[u'a', u'c']
[u'a', u'd']
[u'a', u'e']
[u'a', u'f']
[u'a', u'g']
[u'a', u'h']
[u'a', u'i']
[u'a', u'j']
[u'a', u'k']
[u'a', u'l']
于 2013-06-06T09:32:57.087 回答
0

现代版 Cassandra 的更新。所有 CQL3 原生驱动程序都可以使用服务器端分页(从 Cassandra 2.0 开始),因此不再需要手动设置它的麻烦。

于 2014-12-15T21:26:08.233 回答