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

Unable to coerce to a formatted date - Cassandra timestamp type

我在 cassandra table 中为 时间戳类型 列存储了值,格式为 2018-10-27 11:36:37.950000+0000(格林威治标准时间日期)。 我 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;

如果数据已存储在 table(格式为 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'也是。

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

P.S。使用 cqlsh 运行 查询 cassandra table.

在第一种情况下,问题是您用微秒指定时间戳,而 Cassandra 以毫秒运行 - 尝试删除最后三位数字 - .950 而不是 .950000(请参阅此 document for details). The timestamps are stored inside Cassandra as 64-bit number, and then formatted when printing results using the format specified by datetimeformat options of cqlshrc (see doc).没有明确时区的日期将需要在 cqlshrc.

中指定默认时区

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

如果你想进行这样的查询,那么或许Spark Cassandra Connector会是更好的选择,因为它可以有效select需要的数据,然后你可以进行排序等。虽然这会需要更多资源。

我建议学习 DataStax Academy 的 DS220 课程,以了解如何为 Cassandra 建模数据。

这对我有用

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