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

use*_*499 4 cql cassandra cqlsh spring-data-cassandra cassandra-3.0

我在 cassandra 表中存储了时间戳类型列的值,格式为 2018-10-27 11:36:37.950000+0000(GMT 日期)。当我运行下面的查询来获取数据时,我得到Unable to coerce '2018-10-27 11:36:37.950000+0000' to a formatted date (long) 。

select create_date from test_table where create_date='2018-10-27 11:36:37.950000+0000' allow filtering;
Run Code Online (Sandbox Code Playgroud)

如果数据已存储在表中(格式为 2018-10-27 11:36:37.950000+0000)并且还对create_date列执行范围(>= 或 <=)操作,如何使查询工作?

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'也尝试过。

是否可以对这种时间戳类型的数据进行过滤呢?

PS 使用 cqlsh 在 cassandra 表上运行查询。

Ale*_*Ott 5

在第一种情况下,问题是您使用微秒指定时间戳,而 Cassandra 使用毫秒进行操作 - 尝试删除最后三位数字 -.950而不是(有关详细信息,.950000请参阅本文档)。时间戳在 Cassandra 中存储为 64 位数字,然后在打印结果时使用datetimeformat选项指定的格式进行格式化cqlshrc(请参阅doc)。没有明确时区的日期将需要在 中指定默认时区cqlshrc

关于过滤数据的问题 - 此查询仅适用于少量数据,并且在较大数据量上很可能会超时,因为它需要扫描集群中的所有数据。此外,数据将无法正确排序,因为排序仅发生在单个分区内。

如果你想执行这样的查询,那么Spark Cassandra Connector可能会是更好的选择,因为它可以有效地选择所需的数据,然后你可以执行排序等。尽管这将需要更多的资源。

我建议参加DataStax Academy 的DS220课程,了解如何为 Cassandra 进行数据建模。

  • 谢谢!亚历克斯. 我已经尝试删除最后三位数字 - 0.950 而不是 0.950000,但没有运气。我还检查了 datastax 参考,以检查 cassandra 如何存储和格式化时间戳。似乎我还需要检查将 HH:MM:SS.sss 更改为其他时区时间戳(可能类似于存储在 cassandra 之前的实际格式)。 (2认同)