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