Да, это ожидаемое поведение.
Согласно the cassandra docs и здесь here, cassandra хранит временные метки как «миллисекунды с момента стандартного базового времени, известного как эпоха».
Когда вы вставляете свои данные, вы добавляете значение миллисекунды с более высокой степенью детализации, чем ваше «2013-08-01 15:02:56» (миллисекундное значение «сейчас», всего за секунды и 0 миллисекунд). Оператор EQ никогда не будет соответствовать, ЕСЛИ ваша вставленная метка времени имеет 0 миллисекунд.
Это будет работать
SELECT * FROM myTable WHERE timestamps >= '2013-08-01 15:02:56'
AND timestamps < '2013-08-01 15:02:57'
Итак, когда вы запрашиваете его через cqlsh ваш DateTime переводится в целое число (в миллисекундах), который просто отличается от значения, вставленный первоначально. Ваше вставленное значение будет несколько миллисекунд ПОСЛЕ «2013-08-01 15:02:56». Вы запрашиваете ТОЧНО «2013-08-01 15:02:56» (и 0 миллисекунд). Использование оператора GT или LT будет соответствовать, оператор EQ не будет.
Надеюсь, что это поможет!
благодарит @ominbear, что поле является меткой времени, а не TimeUUID. Я также попробовал запрос с часовыми поясами, но результаты были такими же. Существуют ли какие-либо правила, в соответствии с которыми такое поведение кассандры. Также мне просто интересно, зачем использовать временную метку вообще, когда есть TimeUUID? –
взгляните на обновленный ответ. – omnibear