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 集合,需要将整个内容放入内存并作为单个列发送。没有分页。
我需要将数据从一个 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 集合,需要将整个内容放入内存并作为单个列发送。没有分页。