У меня проблема с Apache Ignite SQL.В настоящее время я использую Ignite v2.6, но также видел ту же проблему с предыдущей версией.
Существует кэш, определенный следующим образом:
<bean class="org.apache.ignite.configuration.CacheConfiguration">
<property name="name" value="Tasks"/>
<property name="cacheMode" value="PARTITIONED" />
<property name="backups" value="1" />
<property name="storeKeepBinary" value="true" />
<property name="atomicityMode" value="TRANSACTIONAL"/>
<property name="writeSynchronizationMode" value="FULL_SYNC"/>
<property name="nodeFilter" ref="TaskNodeFilter" />
<property name="queryEntities">
<list>
<bean class="org.apache.ignite.cache.QueryEntity">
<property name="keyType" value="java.util.UUID"/>
<property name="valueType" value="Tasks" />
<property name="fields">
<map>
<entry key="id" value="java.util.UUID"/>
<entry key="created" value="java.lang.Long"/>
<entry key="jobId" value="java.util.UUID"/>
<entry key="exception" value="java.lang.Object"/>
<entry key="lastAction" value="java.lang.Long"/>
<entry key="jobId" value="java.util.UUID"/>
<entry key="masterId" value="java.util.UUID"/>
<entry key="identifier" value="java.lang.String"/>
<entry key="status" value="java.lang.Integer"/>
<entry key="nodeId" value="java.util.UUID"/>
<entry key="status" value="java.lang.Integer"/>
<entry key="progressMax" value="java.lang.Long"/>
<entry key="progressAt" value="java.lang.Long"/>
<entry key="actionType" value="java.lang.String"/>
</map>
</property>
<property name="indexes">
<list>
<bean class="org.apache.ignite.cache.QueryIndex">
<constructor-arg value="jobId"/>
</bean>
<bean class="org.apache.ignite.cache.QueryIndex">
<constructor-arg value="status"/>
</bean>
<bean class="org.apache.ignite.cache.QueryIndex">
<constructor-arg value="actionType"/>
</bean>
<bean class="org.apache.ignite.cache.QueryIndex">
<constructor-arg value="created"/>
</bean>
<bean class="org.apache.ignite.cache.QueryIndex">
<constructor-arg value="masterId"/>
</bean>
</list>
</property>
</bean>
</list>
</property>
</bean>
Запись "созданная" являетсяотметка времени из System.currentTimeMillis (), поэтому в Java это длинное значение.Поэтому я установил это поле в конфигурации кэша на «Java.lang.Long».
Теперь, когда я ищу с помощью SQL, я получаю разные результаты в зависимости от моего запроса, но всегда с тем же диапазоном:
select COUNT(id) as ANZAHL
FROM "Tasks".Tasks
where created BETWEEN 1543705200000 AND 1545433200000;
возвращает 0 (неправильно!)
select COUNT(id) as ANZAHL
FROM "Tasks".Tasks
where CAST(created AS BIGINT) BETWEEN 1543705200000 AND 1545433200000;
возвращает 1142 (это ожидаемое значение)
select COUNT(*) as ANZAHL
FROM "Tasks".Tasks
where CAST(created AS BIGINT) BETWEEN 1543705200000 AND 1545433200000;
возвращает 0 (неправильно!)
Я что-то не так делаю?Зачем мне приводить значение к BIGINT, если его длинного значения должно быть достаточно?Кроме того, почему существует разница между COUNT (id) и COUNT (*)?
Спасибо!