我想问一下是否可能从cassandra那里得到ttl(生存时间)大于0的行。因此在下一步中,我可以用ttl0更新这些行。目标基本上是将db中每个条目的所有列的ttl更改为0。
我试过了 SELECT * FROM table where ttl(column1) > 0
,但似乎无法在where子句中使用ttl()函数。
我还找到了一种方法,可以将所有行导出到csv,删除表中的数据,然后使用新的ttl从csv再次导入它们。这是可行的,但它是危险的,因为我们有超过百万的作品,我们不知道它会如何表现。
1条答案
按热度按时间mwngjboj1#
您不能仅使用cql来实现这一点-您需要一些工具的支持,例如:
dsbulk—您可以将所有数据卸载到csv文件中,并使用新的ttl集进行加载(如果将其设置为0,则只需加载数据即可)。下面是一篇博客文章,展示了如何将dsbulk与ttl结合使用。但你不能有条件的ttl,这就是为什么你需要卸载所有的数据
使用spark cassandra连接器(即使在本地主模式下)点火。版本2.5.0支持DataFrameAPI中的ttl(早期版本仅支持RDDAPI)-对于Spark2.4,您需要正确注册函数。这可以做一次,直接在
spark-shell
使用这样的方法(您需要在select
&filter
声明):