我正在使用他们的Java API与Cassandra进行交互。我有mapper对象用来执行CRUD操作的实体类。我需要一个自定义查询来从特定的时间跨度检索所有我的购买对象。但是,当我在下面运行我的查询时,我从来没有得到任何回报。有趣的事实是,经过更广泛的测试,查询确实对我的同事运行Cassandra 3.11.2的Mac有效。我的机器正在运行Windows和Cassandra 3.9.0。
String query = String.format("SELECT * FROM purchase WHERE timestamp >= %s AND timestamp <= %s ALLOW FILTERING;", startTimestamp, endTimestamp);
purchases = session.execute(query);
我也尝试过使用IN操作,但我无法找到有关它实际操作的信息,虽然它没有抛出任何异常,但它根本找不到任何购买:
String query = String.format("SELECT * FROM purchase WHERE timestamp IN (%s , %s);", startTimestamp, endTimestamp);
答案 0 :(得分:0)
我终于设法解决了。事实证明,如果使用Cassandra时间戳数据类型存储某些内容,则无法再选择具有long的项目。您必须在字符串上使用日期格式。像这样解决了:
startDate = simpleDateFormat.format(Long.valueOf(startTimestamp));
endDate = simpleDateFormat.format(Long.valueOf(endTimestamp));
query = String.format("SELECT * FROM purchase WHERE timestamp >= '%s' AND timestamp <= '%s' ALLOW FILTERING;", startDate, endDate);