Я пытаюсь запросить Cassandra с запросом на основе временного интервала, и я запускаю InvalidQueryException при выполнении запроса с моей службы Java.Ошибка Java CQL Invalid Query Exception при запросе Timestamp
Скажем, у меня есть следующая схема:
CREATE TABLE user (
user_id uuid,
ts timestamp,
data text,
PRIMARY KEY (user_id, ts)
)
Использование cqlsh
Я могу запросить следующим образом:
SELECT * FROM user WHERE user_id = c37d661d-7e61-49ea-96a5-68c34e83db3a AND Time >= '2016-09-26T16:39:15+0000';
В моей службе Java, следующий код генерирует InvalidQueryException
Statement select = QueryBuilder.select().all()
.from(keyspace, tableName)
.where(eq("user_id", userUUID))
.and(gte("ts", startTime));
session.execute(select);
Исправлена ошибка:
SEVERE: Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is com.datastax.driver.core.exceptions.InvalidQueryException: Expected 8 or 0 byte long for date (24)] with root cause
com.datastax.driver.core.exceptions.InvalidQueryException: Expected 8 or 0 byte long for date (24)
При попытке выполнить запрос как String
, а не Statement
, он отлично работает. Вот пример.
String query = "SELECT * FROM user WHERE user_id = c37d661d-7e61-49ea-96a5-68c34e83db3a AND ts >= '2016-09-26T16:39:15+0000';";
пара вопросов:
- Почему я получаю исключение, говоря «ожидаемый 8 или 0 байт долго даты»? CQL documentation говорит, что мы можем ввести временную метку как
integer
илиString
. - Что мне нужно сделать, чтобы мой запрос работал с использованием класса
Statement
? Мой сервис получает отметку времени в форматеDate ISO 8601
.
Здравствуйте, вы нашли, как это исправить? Недавно я столкнулся с той же проблемой, которая очень расстраивает. Тот же запрос выполняется в cqlsh, но не запускается из программы. Если я скопирую журнал отладки формы запроса и вставляю в cqlsh, он работает отлично ... – Raj