I want to get data from ignite cache for list of keys which I can pass in IN
clause of SQL Query. BUt since IN does not take dynamic parameters, I
followed  this
<http://apacheignite.gridgain.org/docs/sql-queries#performance-and-usability-considerations>
 
link to use JOIN to perform my task, Unfortunately I am getting below
exception. Can some one help please.


public static void test() throws InterruptedException{
                Ignite ignite = 
Ignition.start("examples/config/example-ignite.xml");
                        CacheConfiguration<Integer, Company> ccfg = new
CacheConfiguration<>("companies");
                        ccfg.setIndexedTypes(Integer.class, Company.class);
                        ccfg.setIndexedTypes(LocalDate.class, Company.class);
                        
                        IgniteCache<Integer, Company> companies = 
ignite.getOrCreateCache(ccfg);
                        List<Person> persons = new ArrayList<>();
                        List<Person> persons1 = new ArrayList<>();
                        persons.add(new Person(1, 1, "john", "Doe", "", 2000,
Date.valueOf(LocalDate.of(1989, 1, 9))));
                        persons1.add(new Person(2, 2, "Kathy", "Siera", "", 
2000,
Date.valueOf(LocalDate.of(1979, 1, 9))));
                        
                        Company c1 = new Company(Integer.valueOf(1), 
"Comp1",LocalDate.of(1990,
9, 3), Date.valueOf(LocalDate.of(2016, 03, 03)),
Arrays.asList("bangalore","US"),persons);
                        Company c2 = new Company(Integer.valueOf(2), 
"comp2",LocalDate.of(1995,
6, 1), Date.valueOf(LocalDate.of(2016, 03, 03)),
Arrays.asList("Mumbai","UK"),persons1);
                        Company c3 = new Company(Integer.valueOf(3), 
"comp3",LocalDate.of(1997,
8, 5), Date.valueOf(LocalDate.of(2016, 03, 03)),
Arrays.asList("CA","US"),persons);
                        Company c4 = new Company(Integer.valueOf(4), 
"comp4",LocalDate.of(2005,
3, 21), Date.valueOf(LocalDate.of(2016, 03, 03)),
Arrays.asList("GGN","US"),persons1);
                        Company c5 = new Company(Integer.valueOf(5), 
"GG",LocalDate.of(2010, 2,
23), Date.valueOf(LocalDate.of(2016, 03, 03)),
Arrays.asList("GM","US"),persons);
                        Company c6 = new Company(Integer.valueOf(6), 
"APache",LocalDate.of(2013,
9, 13), Date.valueOf(LocalDate.of(2016, 03, 03)),
Arrays.asList("RS","US"),persons1);
                        companies.put(c1.getId(), c1);
                        companies.put(c2.getId(), c2);
                        companies.put(c3.getId(), c3);
                        companies.put(c4.getId(), c4);
                        companies.put(c5.getId(), c5);
                        companies.put(c6.getId(), c6);
                        
                        String sortby = "id";
                        String orderBy = "desc";
                        String startdate = "3Mar16";
                        List list = Arrays.asList(2,3,6);

                        String sql ="select * from COMPANY p join table(id 
bigint = ?) i on p.id
= i.id";
                        SqlQuery<Integer, Company> query1 =  new 
SqlQuery<>(Company.class, sql);
                        query1.setArgs(list.toArray());
                        long start = System.currentTimeMillis();
                        List<Entry&lt;Integer, Company>> res1=  
companies.query(query1).getAll();
                        Thread.sleep(1000);
                        long end = System.currentTimeMillis();
                        System.out.println("time tken : "+(end-start)/1000);
                        for (Entry<Integer, Company> entry : res1) {
                                System.out.println(entry.getKey()+ " 
"+entry.getValue());
                        }       
        }
        
        public class Company {

        @QuerySqlField(index=true)
        private int id ;

        @QuerySqlField(index=true)
        private String name;
        @QuerySqlField
        private LocalDate startDate;
        @QuerySqlField(index=true)
        private Date inaguration;
        @QuerySqlField
        private List<String> offices = new ArrayList<>();
        @QuerySqlField
        private List<Person> employees = new ArrayList<>();
        .......setters/getters
        }

Exception :

Exception in thread "main" javax.cache.CacheException: class
org.apache.ignite.IgniteException: Failed to parse query: SELECT
"companies".Company._key, "companies".Company._val from COMPANY p join
table(id bigint = ?) i on p.id = i.id
        at
org.apache.ignite.internal.processors.cache.IgniteCacheProxy.query(IgniteCacheProxy.java:700)
        at com.test.ignite.sample.DataGrid.test(DataGrid.java:78)
        at com.test.ignite.sample.DataGrid.main(DataGrid.java:27)
Caused by: class org.apache.ignite.IgniteException: Failed to parse query:
SELECT "companies".Company._key, "companies".Company._val from COMPANY p
join table(id bigint = ?) i on p.id = i.id
        at
org.apache.ignite.internal.processors.query.GridQueryProcessor.queryTwoStep(GridQueryProcessor.java:837)
        at
org.apache.ignite.internal.processors.cache.IgniteCacheProxy.query(IgniteCacheProxy.java:682)
        ... 2 more
Caused by: class org.apache.ignite.IgniteCheckedException: Failed to parse
query: SELECT "companies".Company._key, "companies".Company._val from
COMPANY p join table(id bigint = ?) i on p.id = i.id
        at
org.apache.ignite.internal.processors.query.GridQueryProcessor.executeQuery(GridQueryProcessor.java:1787)
        at
org.apache.ignite.internal.processors.query.GridQueryProcessor.queryTwoStep(GridQueryProcessor.java:830)
        ... 3 more
Caused by: javax.cache.CacheException: Failed to parse query: SELECT
"companies".Company._key, "companies".Company._val from COMPANY p join
table(id bigint = ?) i on p.id = i.id
        at
org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing.queryTwoStep(IgniteH2Indexing.java:1074)
        at
org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing.queryTwoStep(IgniteH2Indexing.java:1001)
        at
org.apache.ignite.internal.processors.query.GridQueryProcessor$5.applyx(GridQueryProcessor.java:832)
        at
org.apache.ignite.internal.processors.query.GridQueryProcessor$5.applyx(GridQueryProcessor.java:830)
        at
org.apache.ignite.internal.util.lang.IgniteOutClosureX.apply(IgniteOutClosureX.java:36)
        at
org.apache.ignite.internal.processors.query.GridQueryProcessor.executeQuery(GridQueryProcessor.java:1769)
        ... 4 more
Caused by: org.h2.jdbc.JdbcSQLException: Column "companies.COMPANY._KEY" not
found; SQL statement:
SELECT "companies".Company._key, "companies".Company._val from COMPANY p
join table(id bigint = ?) i on p.id = i.id [42122-175]
        at org.h2.message.DbException.getJdbcSQLException(DbException.java:332)
        at org.h2.message.DbException.get(DbException.java:172)
        at org.h2.message.DbException.get(DbException.java:149)
        at 
org.h2.expression.ExpressionColumn.optimize(ExpressionColumn.java:144)
        at org.h2.command.dml.Select.prepare(Select.java:810)
        at org.h2.command.Parser.prepareCommand(Parser.java:240)
        at org.h2.engine.Session.prepareLocal(Session.java:436)
        at org.h2.engine.Session.prepareCommand(Session.java:379)
        at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1138)
        at 
org.h2.jdbc.JdbcPreparedStatement.<init>(JdbcPreparedStatement.java:70)
        at org.h2.jdbc.JdbcConnection.prepareStatement(JdbcConnection.java:267)
        at
org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing.prepareStatement(IgniteH2Indexing.java:366)
        at
org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing.queryTwoStep(IgniteH2Indexing.java:1058)
        ... 9 more



--
View this message in context: 
http://apache-ignite-users.70518.x6.nabble.com/Getting-exception-in-SQL-Query-JOINS-tp6674.html
Sent from the Apache Ignite Users mailing list archive at Nabble.com.

Reply via email to