如何在使用命令行时使用CQL获取当前时间戳?

65

我正试图通过命令行向我的CQL表插入数据。我能够插入所有内容。但是如果我有一个时间戳列,那么我如何从命令行插入时间戳列呢?基本上,每当我插入我的CQL表时,我想插入当前时间戳 -

目前,每当我插入下面的CQL表时,我都会硬编码时间戳 -

CREATE TABLE TEST (ID TEXT, NAME TEXT, VALUE TEXT, LAST_MODIFIED_DATE TIMESTAMP, PRIMARY KEY (ID));

INSERT INTO TEST (ID, NAME, VALUE, LAST_MODIFIED_DATE) VALUES ('1', 'elephant',  'SOME_VALUE', 1382655211694);

是否有一种在CQL中使用预定义函数获取当前时间戳的方法,以便在将数据插入到上述表格时,可以使用该方法获取当前时间戳并将其插入到上述表格中?

3个回答

116
您可以使用timeuuid函数now()dateof()(或在Cassandra的后续版本中使用toTimestamp()),例如,
INSERT INTO TEST (ID, NAME, VALUE, LAST_MODIFIED_DATE)
                  VALUES ('2', 'elephant',  'SOME_VALUE', dateof(now()));
now函数不带参数并生成一个新的唯一时间UUID(在使用该语句时执行)。dateOf函数需要一个时间UUID参数并提取嵌入式时间戳。 (摘自有关 timeuuid函数的CQL文档)。

Cassandra >= 2.2.0-rc2

dateof()在Cassandra 2.2.0-rc2中已弃用。对于更高版本,您应该使用以下方式替换其用途:toTimestamp()
INSERT INTO TEST (ID, NAME, VALUE, LAST_MODIFIED_DATE)
                  VALUES ('2', 'elephant',  'SOME_VALUE', toTimestamp(now()));

@lorcan:我在这里的问题中可能还会使用timeuuid函数。你能帮我回答我的问题吗?因为我相信你可能能够帮助我解决这个问题。 - AKIWEB
如何更改默认时间戳...Cassandra中的时间戳始终带有时区...但我不想在时间戳中包含时区...因此我想更改默认格式...有没有办法可以更改? - User12345
太棒了!这正是我在寻找的那种函数。 - asgs
我的本地机器时区是IST,但时间戳采用UTC时区并存储值。可能出了什么问题? - bhargavaravalik

17
在新版的中,可以使用函数。请注意,函数已被废弃
例如:
insert into dummy(id, name, size, create_date) values (1, 'Eric', 12, toTimestamp(now()));

在Cassandra的新版本中,是指哪个版本?是3.0还是2.x已经支持了呢? - Alexis Wilke
1
@AlexisWilke toTimestamp() 在 3.0 版本中肯定是支持的,但似乎自 2.2 版本以来就已经支持了,您可以查看:https://www.instaclustr.com/blog/2015/12/18/5-things-you-need-to-know-about-cassandra-2-2/ - Eric
toTimestamp() 函数在 Cassandra 版本 2.1.8 中不可用,我刚刚验证了。 - Vinod Jayachandran

0

实际上,有两种不同的方法用于不同的目的来插入当前时间戳。从文档中了解:

插入当前时间戳

使用函数将当前日期插入到日期或时间戳字段中,如下所示:

将当前日期和时间插入时间戳字段:toTimestamp(now()) 将时间戳设置为协调器的当前时间。

将当前日期(午夜)插入时间戳字段:toTimestamp(toDate(now())) 将时间戳设置为当天开始的当前日期(午夜)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接