无法强制为格式化日期-cassandra时间戳类型

anauzrmj  于 2021-06-15  发布在  Cassandra
关注(0)|答案(2)|浏览(532)

我将时间戳类型列的值存储在cassandra表中,格式为2018-10-27 11:36:37.950000+0000(gmt日期)。当我运行下面的查询以获取数据时,我无法将“2018-10-27 11:36:37.950000+0000”强制为格式化日期(long)。

select create_date from test_table where create_date='2018-10-27 11:36:37.950000+0000' allow filtering;

如果数据已经存储在表中(格式为2018-10-27 11:36:37.950000+0000),并且还对create\u date列执行range(>=或<=)操作,如何使查询工作?
我试过了 create_date='2018-10-27 11:36:37.95Z', create_date='2018-10-27 11:36:37.95' create_date='2018-10-27 11:36:37.95' 我也是。
是否可以对这种时间戳类型的数据执行过滤?
p、 使用cqlsh对cassandra表运行查询。

yduiuuwa

yduiuuwa1#

这对我很有用

var datetime = DateTime.UtcNow.ToString("yyyy-MM-dd HH:MM:ss");
                var query = $"SET  updatedat = '{datetime}' WHERE ...
beq87vna

beq87vna2#

在第一种情况下,问题是用微秒指定时间戳,而cassandra用毫秒操作-尝试删除最后三个数字- .950 而不是 .950000 (详见本文件)。时间戳作为64位数字存储在cassandra中,然后使用 datetimeformat 选择 cqlshrc (见文件)。没有明确时区的日期将要求在中指定默认时区 cqlshrc .
关于您关于过滤数据的问题—此查询只适用于少量数据,对于较大的数据大小,很可能会超时,因为它需要扫描集群中的所有数据。而且,数据不会被正确排序,因为排序只发生在单个分区内。
如果您想执行此类查询,那么spark cassandra连接器可能是更好的选择,因为它可以有效地选择所需的数据,然后您可以执行排序等,尽管这将需要更多的资源。
我建议学习datastax学院的ds220课程,了解如何为cassandra建模数据。

相关问题