apache ignite交叉缓存查询-无法分析sql

apache ignite交叉缓存查询-无法分析sql,ignite,Ignite,我正在尝试做一个在两个类之间有内部子查询的查询。但每次我尝试它时,它都会给我一个sql解析错误。 因此,为了解决这个问题,我做了一个非常基本的交叉缓存查询,它给出了相同的解析错误。有什么想法吗 CacheConfiguration<Integer, MyClass1> cfg = new CacheConfiguration<>("class1Cache"); cfg.setIndexedTypes(Integer.class, MyClass1.class); Ign

我正在尝试做一个在两个类之间有内部子查询的查询。但每次我尝试它时,它都会给我一个sql解析错误。 因此,为了解决这个问题,我做了一个非常基本的交叉缓存查询,它给出了相同的解析错误。有什么想法吗

CacheConfiguration<Integer, MyClass1> cfg = new CacheConfiguration<>("class1Cache");
cfg.setIndexedTypes(Integer.class, MyClass1.class);

IgniteConfiguration ignitionConfig = new IgniteConfiguration();
ignitionConfig.setCacheConfiguration(cfg);

Ignite ignite = Ignition.getOrStart(ignitionConfig);

IgniteCache<Integer, MyClass1> cache = ignite.getOrCreateCache(cfg);

StringBuilder builder = new StringBuilder();

builder.append(" SELECT ");
builder.append("    c.name ");
builder.append(" FROM  ");
builder.append("    MyClass1 c,  \"class2Cache\".MyClass2 b  ");
builder.append(" WHERE  ");
builder.append("    c.name = b.name   ");


SqlFieldsQuery qry = new SqlFieldsQuery(builder.toString());

// Execute the query and obtain the query result cursor.
List<List<?>> res = cache.query(qry).getAll();
但是仍然无法让我的内部子查询工作

builder.append(" SELECT ");
builder.append("    COALESCE(SEL1.NAME, SEL2.NAME) AS NAME, ");
builder.append("    COALESCE(SEL1.ACCOUNT, SEL2.ACCOUNT) AS ACCOUNT, ");
builder.append("    SEL1.TOTAL_POS, SEL2.TOTAL_NEG, LEAST(TOTAL_POS, TOTAL_NEG) AS LBS,  ");
builder.append("    RESULT.PERIOD,   ");
builder.append("    (LBS/PERIOD) * 100 AS TOTAL_RESULT   ");
builder.append(" FROM  ");

builder.append("    (  ");
builder.append("        SELECT  ");
builder.append("            ACCOUNT, TYPE, SUM(ITEM*COST) AS TOTAL_POS, NAME  ");
builder.append("        FROM  ");
builder.append("            MyClass1 ");
builder.append("        WHERE  ");
builder.append("            NAME = ?  ");
builder.append("        AND  ");
builder.append("            TYPE = 'Buy'  ");
builder.append("        GROUP BY  ");
builder.append("            TYPE  ");
builder.append("    ) AS SEL1,  ");

builder.append("    (  ");
builder.append("        SELECT  ");
builder.append("            ACCOUNT, TYPE, SUM(ITEM*COST) AS TOTAL_NEG, NAME ");
builder.append("        FROM  ");
builder.append("            MyClass1 ");
builder.append("        WHERE  ");
builder.append("            NAME = ?  ");
builder.append("        AND  ");
builder.append("            TYPE = 'Sell'  ");
builder.append("        GROUP BY  ");
builder.append("            TYPE  ");
builder.append("    ) AS SEL2  ");


builder.append("    (  ");
builder.append("        SELECT  ");
builder.append("            AVG(B.D_REC) AS PERIOD, account, NAME  ");
builder.append("        FROM  ");
builder.append("        (  ");
builder.append("            SELECT  ");
builder.append("                SUM(PRICE) AS D_REC, DATE, account, NAME ");
builder.append("            FROM  ");
builder.append("            (  ");
builder.append("                SELECT  ");
builder.append("                    b.NAME, b.account, b.PRICE, b.DATE");
builder.append("                FROM  ");
builder.append("                    class2cache.MyClass2 b ");
builder.append("                WHERE  ");
builder.append("                    b.NAME = ?  ");
builder.append("            ) A  ");
builder.append("        GROUP BY  ");
builder.append("            DATE, ACCOUNT, NAME ");
builder.append("        ) B  ");
builder.append("        GROUP BY ");
builder.append("            ACCOUNT, NAME ");
builder.append("    ) AS RESULT  ");
builder.append(" WHERE  ");
builder.append("    SEL1.ACCOUNT = SEL2.ACCOUNT  ");
builder.append(" AND  ");
builder.append("    RESULT.ACCOUNT = SEL1.ACCOUNT  ");
编辑:因此我的SQL失败,因为它似乎无法获取聚合字段的结果:

(LBS/PERIOD) * 100 AS TOTAL_RESULT
如果我做一些随机计算它的工作

(20/10) *100 AS TOTAL_RESULT

有什么想法吗?

错误是什么?错误是什么?
CacheConfiguration<Integer, MyClass1> cfg = new CacheConfiguration<>("class1Cache");
cfg.setIndexedTypes(Integer.class, MyClass1.class);

IgniteConfiguration ignitionConfig = new IgniteConfiguration();
ignitionConfig.setCacheConfiguration(cfg);

Ignite ignite = Ignition.getOrStart(ignitionConfig);

IgniteCache<Integer, MyClass1> cache = ignite.getOrCreateCache(cfg);

StringBuilder builder = new StringBuilder();

builder.append(" SELECT ");
builder.append("    c.name ");
builder.append(" FROM  ");
builder.append("    MyClass1 c,  \"class2Cache\".MyClass2 b  ");
builder.append(" WHERE  ");
builder.append("    c.name = b.name   ");


SqlFieldsQuery qry = new SqlFieldsQuery(builder.toString());

// Execute the query and obtain the query result cursor.
List<List<?>> res = cache.query(qry).getAll();