【问题标题】:Cassandra : How to set individual TTL for elements of a collection (set type to be specific)Cassandra:如何为集合元素设置单独的 TTL(具体设置类型)
【发布时间】:2019-01-08 05:24:06
【问题描述】:

我们有一个场景,我们试图更新 Cassandra 中的数据,我们有一个更新查询来更新多个字段,其中一个字段是 cassandra 中的集合类型(在本场景中为 col1)。

更新查询如下所示 -

UPDATE <table_name> USING TTL 3600 SET col1=col1+{'test_30'},col2=100 , col3=400 ;

有没有办法只为 col1 设置 TTL,即 ttl 应该是集合中的值“test_30”???

要求基本上是在设置为 ttl 的 3600 秒后,只有值 'test_30' 应该被删除。

datastax 的 cql documentation 对此没有具体说明。

【问题讨论】:

标签: cassandra datastax cql cql3 cqlsh


【解决方案1】:

我看到的第一个问题是您的查询缺少 WHERE 子句。更新语句必须有这个子句。

运行此查询时(解决上述问题后),您将在 col1、col2 和 col3 列值中为元素“test_30”指定一个 TTL。

如果您只想为“test_30”设置 TTL,您应该只使用 col1 (similar SO question) 而不是 col2 和 col3

另外,您应该注意CASSANDRA-8877。目前无法读取集合中单个值的 ttl。此外,如果您运行select ttl(col1) from &lt;table name&gt;,您将收到错误Cannot use selection function ttl on collections

关于CQL update的一些补充阅读。

【讨论】:

  • 谢谢,我错过了 where 子句。我们试图避免 2 更新,但似乎这是目前唯一的解决方案..
  • 这就是 Cassandra 的工作方式。希望我的回答对您有所帮助。
猜你喜欢
  • 1970-01-01
  • 2016-07-10
  • 1970-01-01
  • 2019-07-25
  • 2016-06-22
  • 1970-01-01
  • 1970-01-01
  • 2014-12-23
  • 1970-01-01
相关资源
最近更新 更多