【问题标题】:How to manipulate timestamp columns in Apache Cassandra如何在 Apache Cassandra 中操作时间戳列
【发布时间】:2017-07-10 18:37:12
【问题描述】:

我有一个带有timestamp 列的表,我想操作该列的值。例如,我需要做一些事情:

UPDATE mytable SET datetimecolumn = datetimecolumn + 10mins

在 Apache Cassandra 中是如何完成的?

更新:答案似乎是“你不能”。但是选择的答案显然是我们能得到的最接近的答案。

【问题讨论】:

    标签: cassandra cql cql3


    【解决方案1】:

    你可以查询类似的这个,只要数据类型是计数器。

    使用计数器:

    计数器是一个特殊的列,用于存储以增量方式更改的数字。例如,您可以使用计数器列来计算页面被查看的次数。

    仅在专用表中定义计数器并使用计数器数据类型。您不能索引、删除或重新添加计数器列。表中的所有非计数器列都必须定义为主键的一部分。

    例子:

    CREATE TABLE mytable (
       pk1 int PRIMARY KEY,
       datetimecolumn counter
    );
    

    这里你必须使用以毫秒为单位的 datetimecolumn 值。
    第一次,您必须使用以毫秒为单位的时间更新查询,比如说 1487686182403

    UPDATE mytable SET datetimecolumn = datetimecolumn + 1487686182403 where pk1 = 1
    

    现在 pk = 1 的 mytable 包含 datetimecolumn = 1487686182403 值。

    如果您想将 datetimecolumn 增加 10 分钟(600000 毫秒)

    UPDATE mytable SET datetimecolumn = datetimecolumn + 600000 where pk1 = 1
    

    来源:https://docs.datastax.com/en/cql/3.1/cql/cql_using/use_counter_t.html

    【讨论】:

      【解决方案2】:

      read-before-write 是 cassandra 中的一种反模式。您已在客户端操作该值并照常更新;

      换句话说:您必须搜索(选择)值,进行更改(增加 10 分钟)并在 cassandra 更新新值。

      【讨论】:

      • 我不确定我是否理解您的回答。能否请您详细说明。
      猜你喜欢
      • 2021-10-07
      • 2015-08-25
      • 2023-04-07
      • 2017-04-30
      • 2017-01-08
      • 2017-04-02
      • 1970-01-01
      • 2013-05-08
      • 2012-05-07
      相关资源
      最近更新 更多