Java CQL驱动程序在查询时间戳时出现无效查询异常
我试图使用基于时间跨度的查询来查询Cassandra,当从Java服务运行查询时,我遇到了InvalidQueryException 假设我有以下模式:Java CQL驱动程序在查询时间戳时出现无效查询异常,java,cassandra,cql,Java,Cassandra,Cql,我试图使用基于时间跨度的查询来查询Cassandra,当从Java服务运行查询时,我遇到了InvalidQueryException 假设我有以下模式: 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-
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 query = "SELECT * FROM user WHERE user_id = c37d661d-7e61-49ea-96a5-68c34e83db3a AND ts >= '2016-09-26T16:39:15+0000';";
有几个问题:
整数
或字符串
输入语句
类,我需要做什么才能使查询正常工作?我的服务接收ISO 8601日期格式的时间戳通过在执行之前将其转换为字符串,我可以使其正常工作
Results = cassandraSession.execute(cqlStatement.toString());
唯一能让它和时间戳一起工作的方法
如果您只需要使用where子句中的日期,这将起作用
我能够在执行之前将其转换为字符串,从而使其正常工作
Results = cassandraSession.execute(cqlStatement.toString());
唯一能让它和时间戳一起工作的方法
如果您只需要使用where子句中的日期,这将起作用
您好,您找到如何解决此问题了吗?我最近遇到了同样的问题,非常令人沮丧。相同的查询在cqlsh中运行,但不会从程序中运行。如果我复制查询表单调试日志并粘贴到cqlsh中,它运行良好…您好,您找到如何修复此问题了吗?我最近遇到了同样的问题,非常令人沮丧。相同的查询在cqlsh中运行,但不会从程序中运行。如果我复制查询表单调试日志并粘贴到cqlsh中,它运行良好。。。