Cassandra 迭代集合的元素

Cassandra iterate over elements of set

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

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
)

我需要在新 table 中为旧 table 的每个集合元素创建一行。

如何在cql语句中遍历set的元素?我找不到这方面的任何文档。

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

您只能通过编程来做到这一点——CQL 不支持这一点。

根据您可能需要的数据量,您可能需要使用 Spark Cassandra connector,或者编写将遍历所有标记范围的代码,获取数据并将它们重新加工成新结构。

我认为你的新 table 看起来像:

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

那么每个id都会有一个名字和一组唯一的other_ids.

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

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