Vis*_*mud 7 timestamp cassandra cql3
如图所示,使用精确时间戳查询(2013-08-01 15:02:56)并未返回任何结果,但存在具有该时间戳的行但在查询时返回该行的结果
timestamps > '2013-08-01 15:02:56'
这是Cassandra的正常行为吗?

Joh*_*ohn 11
是的,这是预期的行为.
根据该卡桑德拉文档和这里这里,Cassandra是存储时间戳为"自被称为历元的标准基准时间毫秒".
插入数据时,插入的粒度高于"2013-08-01 15:02:56"的毫秒值("now"的毫秒值vs秒和0毫秒).EQ运算符永远不会匹配,因此插入的时间戳为0毫秒.
这会奏效
SELECT * FROM myTable WHERE timestamps >= '2013-08-01 15:02:56'
AND timestamps < '2013-08-01 15:02:57'
Run Code Online (Sandbox Code Playgroud)
因此,当您通过cqlsh查询它时,您的日期时间将转换为一个整数(毫秒),该整数与您最初插入的值不同.您插入的值将在"2013-08-01 15:02:56"之后的几毫秒内完成.您查询完全"2013-08-01 15:02:56"(和0毫秒).使用GT或LT运算符将匹配,EQ运算符不会.
希望有所帮助!
Car*_*des 11
像omnibear一样,我认为你的问题是时间戳以毫秒> 0存储.
要查看启动下一个查询:
select blobAsBigint(timestampAsBlob(timestamps)) where timestamps > '2013-08-01 15:02:56';
Run Code Online (Sandbox Code Playgroud)
然后检查最后的数字,即毫秒.
如果最后的数字> 0(这是我所期望的),那么这就解释了为什么你的=断言是错误的.
所以你有两个选择:
...在15:02:56之后但在15:02:57之前给我一些事件:
where timestamps >= '2013-08-01 15:02:56' and timestamps < '2013-08-01 15:02:57'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18157 次 |
| 最近记录: |