Apache ignite 按日期过滤查询
Apache ignite filtering query by date
在我的缓存中 class 我有我的 factorDate 作为 Joda DateTime 对象
@QuerySqlField(index = true)
private DateTime factorDate;
我需要获取 2 个日期之间的所有结果。为此,我有以下代码:
CacheConfiguration<Integer, MyClass> cfg = new CacheConfiguration<>("myCache");
cfg.setIndexedTypes(Integer.class, MyClass.class);
IgniteConfiguration ignitionConfig = new IgniteConfiguration();
ignitionConfig.setCacheConfiguration(cfg);
Ignite ignite = Ignition.getOrStart(ignitionConfig);
IgniteCache<Integer, MyClass> cache = ignite.getOrCreateCache(cfg);
DateTime startDateObj = DateTimeFormat.forPattern("dd-MMM-yyyy").parseDateTime(startDate);
DateTime endDateObj = DateTimeFormat.forPattern("dd-MMM-yyyy").parseDateTime(endDate);
Timestamp startTimeStamp = new Timestamp(startDateObj.getMillis());
Timestamp endTimeStamp = new Timestamp(endDateObj.getMillis());
StringBuilder builder = new StringBuilder();
builder.append(" SELECT factorDate, name FROM MyClass ");
builder.append(" WHERE factorDate >= ? AND factorDate <= ? ");
builder.append(" AND name = ? ");
SqlFieldsQuery qry = new SqlFieldsQuery(builder.toString());
qry.setArgs(startTimeStamp, endTimeStamp, "Jack Jones");
List<List<?>> res = cache.query(qry).getAll();
当我知道有结果时却没有得到任何结果。有什么想法吗?
我也尝试过使用 DateTime 对象而不是时间戳作为查询参数,但还是不行
默认二进制格式不支持自定义 Comparable
类。作为解决方法,您可以尝试使用 OptimizedMarshaller
代替:
<property name="marshaller">
<bean class="org.apache.ignite.marshaller.optimized.OptimizedMarshaller"/>
</property>
但请注意,它会在服务器节点上反序列化您的键和值,因此您必须确保 类 部署在那里。
在我的缓存中 class 我有我的 factorDate 作为 Joda DateTime 对象
@QuerySqlField(index = true)
private DateTime factorDate;
我需要获取 2 个日期之间的所有结果。为此,我有以下代码:
CacheConfiguration<Integer, MyClass> cfg = new CacheConfiguration<>("myCache");
cfg.setIndexedTypes(Integer.class, MyClass.class);
IgniteConfiguration ignitionConfig = new IgniteConfiguration();
ignitionConfig.setCacheConfiguration(cfg);
Ignite ignite = Ignition.getOrStart(ignitionConfig);
IgniteCache<Integer, MyClass> cache = ignite.getOrCreateCache(cfg);
DateTime startDateObj = DateTimeFormat.forPattern("dd-MMM-yyyy").parseDateTime(startDate);
DateTime endDateObj = DateTimeFormat.forPattern("dd-MMM-yyyy").parseDateTime(endDate);
Timestamp startTimeStamp = new Timestamp(startDateObj.getMillis());
Timestamp endTimeStamp = new Timestamp(endDateObj.getMillis());
StringBuilder builder = new StringBuilder();
builder.append(" SELECT factorDate, name FROM MyClass ");
builder.append(" WHERE factorDate >= ? AND factorDate <= ? ");
builder.append(" AND name = ? ");
SqlFieldsQuery qry = new SqlFieldsQuery(builder.toString());
qry.setArgs(startTimeStamp, endTimeStamp, "Jack Jones");
List<List<?>> res = cache.query(qry).getAll();
当我知道有结果时却没有得到任何结果。有什么想法吗?
我也尝试过使用 DateTime 对象而不是时间戳作为查询参数,但还是不行
默认二进制格式不支持自定义 Comparable
类。作为解决方法,您可以尝试使用 OptimizedMarshaller
代替:
<property name="marshaller">
<bean class="org.apache.ignite.marshaller.optimized.OptimizedMarshaller"/>
</property>
但请注意,它会在服务器节点上反序列化您的键和值,因此您必须确保 类 部署在那里。