使用CQL遍历Cassandra表的分区键

Mat*_*ner 2 sql partitioning cql cassandra cql3

使用CQL3,如何枚举Cassandra中表的所有分区键?特别是返回不同的键并分页结果会带来一些麻烦。

Ric*_*ard 5

您可以按照以下示例进行操作。创建一个测试表:

> create table partition_keys_test (p_key text PRIMARY KEY, rest text);
Run Code Online (Sandbox Code Playgroud)

并插入一些行,例如:

> insert into partition_keys_test (p_key, rest) VALUES ('1', 'blah');
Run Code Online (Sandbox Code Playgroud)

我为p_key'1','2',...,'9'完成了此操作。

然后翻阅分区键。从...开始:

> select p_key from partition_keys_test limit 2;
 p_key
 -------
     6
     7
Run Code Online (Sandbox Code Playgroud)

获取页面大小2。然后,获取最后的p_key结果,并在下一个查询中使用它:

> select p_key from partition_keys_test where token(p_key) > token('7') limit 2;
 p_key
 -------
    9
    4
Run Code Online (Sandbox Code Playgroud)

依此类推,直到收到的结果少于页面大小的结果。

请注意,您应该期望它可以读取整个数据集。对于非常宽的行,可能不会,但是仍然会占用非常大的I / O。

此外,如果创建或删除了行,并且令牌的数量比到目前为止高,它们将出现在后续查询中。因此,如果在创建或删除行时正在运行上述分页查询,则取决于时间,分区键可能不会返回。