Как искать по диапазону дат в Кассандре?

например,

SELECT *
FROM api_call_log
WHERE account_sid='XXXXXXXXXXXX'            AND
created_time >= 01-02-2016 00:00:00   AND
created_time <= 31-02-2016 23:59:59
ALLOW FILTERING

Я получаю записи с первого месяца, хотя я искал второй месяц.

0

Решение

Трудно сказать, не видя структуру таблицы или соответствующие части вашего набора результатов. Но я заметил, что ты не указание смещения по Гринвичу, что означает, что вы эффективно запрос по вашему локальному смещению по умолчанию. Проблема в том, что Кассандра хранит по Гринвичу + 0000.

Например, если у вас отрицательное смещение по Гринвичу, скажем, -0600 (как и у меня), запрос по GMT-0600 пропустит данные за 6 часов с 1 февраля. Например, если у меня есть ряд для 2016-02-01 01:00:00+0000этот запрос не вернет его:

aploetz@cqlsh:stackoverflow> SELECT * FROm events WHERe monthbucket='201602'
AND eventdate >= '2016-02-01 00:00:00';

monthbucket | eventdate | beginend | eventid | eventname
-------------+-----------+----------+---------+-----------

(0 rows)

И это потому, что 2016-02-01 01:00:00+0000 по существу 2016-01-31 19:00:00-0600, Так что, если я добавлю смещение по Гринвичу 0000Я вижу строку.

aploetz@cqlsh:stackoverflow> SELECT * FROm events WHERe monthbucket='201602'
AND eventdate >= '2016-02-01 00:00:00+0000';

monthbucket | eventdate                | beginend | eventid                              | eventname
-------------+--------------------------+----------+--------------------------------------+-------------------
201602 | 2016-02-01 01:00:00+0000 |        b | 78d2c2b7-c4ec-408f-be37-eccc0c05727d | test month border

(1 rows)

Я думаю, что у вас, вероятно, есть противоположная проблема (дополнительные строки по сравнению с отсутствующими строками) из-за наличия положительный Смещение по Гринвичу. Если вы не укажете свое смещение в запросе, это может быть причиной того, что он включает строки предыдущего месяца. И если это так, то вы можете захотеть эти строки.

Кроме того, не используйте ALLOW FILTERING, Как обычно.

1

Другие решения

Попробуй это

SELECT * FROM api_call_log WHERE account_sid='XXXXXXXXXXXX' AND jobs.created_at between '01-02-2016 00:00:00' and '31-02-2016 23:59:59';

А также проверьте формат ДАТА / ВРЕМЯ столбца даты

0

По вопросам рекламы [email protected]