Cassandra对set元素进行迭代

时间:2018-08-02 12:19:27

标签: cassandra cql

我需要将数据从一个表移动到另一个表,但是表的定义有些不同:

CREATE TABLE elements (
    id timeuuid PRIMARY KEY,
    other_ids set<text>,
    name text
) 

CREATE TABLE elements_new (
    id text PRIMARY KEY,
    other_id text,
    name text
)

我需要在新表中为旧表的每个set元素创建一行。

如何遍历cql语句中set的元素?我找不到关于此的任何文档。

3 个答案:

答案 0 :(得分:2)

您只能通过编程来执行此操作-CQL不支持此操作。

根据使用的数据量,您可能需要使用Spark Cassandra connector,或者编写将遍历所有令牌范围的代码,获取数据并将它们重新整理为新的结构。

答案 1 :(得分:1)

通常,您将在Cassandra中使用分页来迭代查询。大多数客户都可以使用分页。对于Java驱动程序,请点击此处:https://docs.datastax.com/en/developer/java-driver/3.2/manual/paging/

答案 2 :(得分:1)

我认为您的新表应如下所示:

CREATE TABLE elements_new (
    id text,
    name text STATIC,
    other_id text,
    PRIMARY KEY ((id), other_id)
)

然后每个ID都有一个名称和一组唯一的other_id。

这在功能上与其他表完全相同,不同之处在于,您可以使用可由语句的fetchSize控制的普通驱动程序寻呼机来遍历彼此的id。

使用CQL集合,需要将整个内容放入内存并作为单个列发送出去。没有分页。

相关问题