如何在 Apache Cassandra 中操作时间戳列
How to manipulate timestamp columns in Apache Cassandra
我有一个 table 和 timestamp
列,我想操纵该列的值。例如,我需要做一些事情:
UPDATE mytable SET datetimecolumn = datetimecolumn + 10mins
在 Apache Cassandra 中是如何完成的?
更新:答案似乎是"you can't"。但是选择的答案显然是我们能得到的最接近的答案。
read-before-write 是 cassandra 中的 anti-pattern。您已在客户端操纵该值并照常更新;
换句话说:您必须搜索 (select) 值,进行更改(增加 10 分钟)并在 cassandra 上更新新值。
可以查询类似这个,只要数据类型是计数器。
使用计数器:
A counter is a special column used to store a number that is changed in increments. For example, you might use a counter column to count the number of times a page is viewed.
Define a counter in a dedicated table only and use the counter data type. You cannot index, delete, or re-add a counter column. All non-counter columns in the table must be defined as part of the primary key.
示例:
CREATE TABLE mytable (
pk1 int PRIMARY KEY,
datetimecolumn counter
);
此处必须使用以毫秒为单位的日期时间列值。
第一次,您必须使用以毫秒为单位的时间更新查询,比方说 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
我有一个 table 和 timestamp
列,我想操纵该列的值。例如,我需要做一些事情:
UPDATE mytable SET datetimecolumn = datetimecolumn + 10mins
在 Apache Cassandra 中是如何完成的?
更新:答案似乎是"you can't"。但是选择的答案显然是我们能得到的最接近的答案。
read-before-write 是 cassandra 中的 anti-pattern。您已在客户端操纵该值并照常更新;
换句话说:您必须搜索 (select) 值,进行更改(增加 10 分钟)并在 cassandra 上更新新值。
可以查询类似这个,只要数据类型是计数器。
使用计数器:
A counter is a special column used to store a number that is changed in increments. For example, you might use a counter column to count the number of times a page is viewed.
Define a counter in a dedicated table only and use the counter data type. You cannot index, delete, or re-add a counter column. All non-counter columns in the table must be defined as part of the primary key.
示例:
CREATE TABLE mytable (
pk1 int PRIMARY KEY,
datetimecolumn counter
);
此处必须使用以毫秒为单位的日期时间列值。
第一次,您必须使用以毫秒为单位的时间更新查询,比方说 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