Re: SQL queries on the Ignite cache fail, cannot find table

classic Classic list List threaded Threaded
1 message Options
ilya.kasnacheev ilya.kasnacheev
Reply | Threaded
Open this post in threaded view
|

Re: SQL queries on the Ignite cache fail, cannot find table

Hello!

Have you tried SELECT * FROM "PersonCache".PERSON?

Regards,
--
Ilya Kasnacheev


вс, 14 февр. 2021 г. в 01:33, PunxsutawneyPhil3 <[hidden email]>:
I am trying to configure Ignite to act as a cache with a Postgres database.

I have started with the example on the Ignite website, using an xml
configuration to define a mapping between a Person Object and a Person
table.

From the client side I am able retrieve the cache by name, and after I call
loadCache(null), it has the correct size.

However when I try to execute queries on the cache, I get the following
error :

Failed to parse query. Table "PERSON" not found; SQL statement:
select * from PERSON
If I try and execute this query in Postgres directly it works however:


ngen=# select * from PERSON;
 id |     name
----+--------------
  0 | Zappa, Frank
  1 | Zappa, Moon
(2 rows)

I have also tried the following query variants with no luck, all reporting
that it cannot find the table:
"select * from person",
"select * from \"person\"",
"select * from \"Person\"",
"select * from PERSON",
"select * from public.PERSON",
"select * from public.person",
"select * from public.\"person\""

Any ideas on where I have this wrong?

*Client side Java code:
*
final String personCacheName = "PersonCache";
IgniteCache<Integer, Person> personCache =
WSUtil.getIgnite().cache(personCacheName);

log.info("cache size: " + personCache.size() );
personCache.loadCache(null);           
log.info("cache size: " + personCache.size() );
SqlFieldsQuery sql = new SqlFieldsQuery("select * from PERSON");
try (QueryCursor<List&lt;?>> cursor = idsCache.query(sql)) {
    for (List<?> row : cursor)
        System.out.println("person=" + row.get(0) +","+ row.get(1));
}catch(Exception e) {
    log.error("SQL failed", e);
}
*Cache Configuration:*


                <bean
class="org.apache.ignite.configuration.CacheConfiguration">
                    <property name="name" value="PersonCache"/>
                    <property name="cacheMode" value="PARTITIONED"/>
                    <property name="atomicityMode" value="ATOMIC"/>
                    <property name="cacheStoreFactory">
                        <bean
class="org.apache.ignite.cache.store.jdbc.CacheJdbcPojoStoreFactory">
                            <property name="dataSourceBean"
value="pgDataSource"/>
                            <property name="dialect">
                                <bean
class="org.apache.ignite.cache.store.jdbc.dialect.BasicJdbcDialect"/>
                            </property>
                            <property name = "types">
                                <list>
                                    <bean
class="org.apache.ignite.cache.store.jdbc.JdbcType">
                                        <property name="cacheName"
value="PersonCache"/>
                                        <property name="keyType"
value="java.lang.Integer"/>
                                        <property name="valueType"
value="com.niksun.services.Person.Person"/>
                                        <property name="databaseTable"
value="PERSON"/>
                                        <property name="keyFields">
                                            <list>
                                                <bean
class="org.apache.ignite.cache.store.jdbc.JdbcTypeField">
                                                    <constructor-arg>
                                                        <util:constant
static-field="java.sql.Types.INTEGER"/>
                                                    </constructor-arg>
                                                    <constructor-arg
value="id"/>
                                                    <constructor-arg
value="int"/>
                                                    <constructor-arg
value="id"/>
                                                </bean>
                                            </list>
                                        </property>
                                        <property name="valueFields">
                                            <list>
                                                <bean
class="org.apache.ignite.cache.store.jdbc.JdbcTypeField">
                                                    <constructor-arg>
                                                            <util:constant
static-field="java.sql.Types.INTEGER"/>
                                                    </constructor-arg>
                                                    <constructor-arg
value="id"/>
                                                    <constructor-arg
value="int"/>
                                                    <constructor-arg
value="id"/>
                                                </bean>
                                                <bean
class="org.apache.ignite.cache.store.jdbc.JdbcTypeField">
                                                    <constructor-arg>
                                                        <util:constant
static-field="java.sql.Types.VARCHAR"/>
                                                    </constructor-arg>
                                                    <constructor-arg
value="name"/>
                                                    <constructor-arg
value="java.lang.String"/>
                                                    <constructor-arg
value="name"/>
                                                </bean>
                                            </list>
                                        </property>
                                    </bean>
                                </list>
                            </property>
                        </bean>
                    </property>
                    <property name="readThrough" value="true"/>
                    <property name="writeThrough" value="true"/>

                    <property name="queryEntities">
                        <list>
                            <bean
class="org.apache.ignite.cache.QueryEntity">
                                <property name="keyType"
value="java.lang.Integer"/>
                                <property name="valueType"
value="com.niksun.services.Person.Person"/>
                                <property name="keyFieldName" value="id"/>
                                <property name="keyFields">
                                    <list>
                                        <value>id</value>
                                    </list>
                                </property>
                                <property name="fields">
                                    <map>
                                        <entry key="name"
value="java.lang.String"/>
                                        <entry key="id"
value="java.lang.Integer"/>
                                    </map>
                                </property>
                            </bean>
                        </list>
                    </property>
                </bean>
*Table Definition:*

CREATE TABLE PERSON ( id INTEGER PRIMARY KEY,  name VARCHAR(30));
*Stack Trace:*

[INFO] [Sat Feb 13 21:33:41 2021]
[ajp-nio-0:0:0:0:0:0:0:1-8009-exec-6|.....] cache size: 0
[INFO] [Sat Feb 13 21:33:57 2021]
[ajp-nio-0:0:0:0:0:0:0:1-8009-exec-6|.....] cache size: 2
[ERROR] [Sat Feb 13 21:40:33 2021]
[ajp-nio-0:0:0:0:0:0:0:1-8009-exec-6|.....] SQL failed
javax.cache.CacheException: Failed to parse query. Table "PERSON" not found;
SQL statement:
select * from PERSON [42102-197]
        at com.company.dao.....
        at
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native
Method)
        at
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown
Source)
        at
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown
Source)
        at java.base/java.lang.reflect.Method.invoke(Unknown Source)
        at
org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:333)
        at
org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190)
        at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
        at
org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99)
        at
org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:282)
        at
org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
        at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
        at
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:213)
        at com.sun.proxy.$Proxy59....(Unknown Source)
        at com.company.........
        at
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native
Method)
        at
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown
Source)
        at
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown
Source)
        at java.base/java.lang.reflect.Method.invoke(Unknown Source)
        at
org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:333)
        at
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207)
        at com.sun.proxy.$Proxy61.retrieveAllRule(Unknown Source)
        at com.company......
        at
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native
Method)
        at
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown
Source)
        at
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown
Source)
        at java.base/java.lang.reflect.Method.invoke(Unknown Source)
        at
org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory.lambda$static$0(ResourceMethodInvocationHandlerFactory.java:52)
        at
org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher$1.run(AbstractJavaResourceMethodDispatcher.java:124)



--
Sent from: http://apache-ignite-users.70518.x6.nabble.com/