我需要将数据从一个表移动到另一个表,但是表的定义有些不同:
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的元素?我找不到关于此的任何文档。
答案 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集合,需要将整个内容放入内存并作为单个列发送出去。没有分页。