[ https://issues.apache.org/jira/browse/IGNITE-24752?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Sergey Korotkov updated IGNITE-24752: ------------------------------------- Ignite Flags: (was: Docs Required,Release Notes Required) > Calcite. TPC-H query #9: failed to plan query > --------------------------------------------- > > Key: IGNITE-24752 > URL: https://issues.apache.org/jira/browse/IGNITE-24752 > Project: Ignite > Issue Type: Bug > Reporter: Sergey Korotkov > Assignee: Sergey Korotkov > Priority: Major > Labels: ise, tpch > Fix For: 2.18 > > Attachments: TpchQ9Test.java > > > Always fails in planning the similar way as #5 (IGNITE-24741) and #8 > (IGNITE-24746): > Unexpected error at query optimizer. > org.apache.calcite.plan.RelOptPlanner$CannotPlanException: There are not > enough rules to produce a node with desired properties: convention=IGNITE, > sort=[0 ASC-nulls-first, 1 DESC-nulls-last], distr=single, > rewindability=one-way, correlation=uncorrelated. > > {noformat} > [2025-03-18T17:08:08,205][WARN ][test-runner-#494%tpch.TpchQ9Test%][task] > Volcano planning times out, cancels the subsequent optimization. > [2025-03-18T17:08:08,208][ERROR][test-runner-#494%tpch.TpchQ9Test%][PrepareServiceImpl] > Unexpected error at query optimizer. > org.apache.calcite.plan.RelOptPlanner$CannotPlanException: There are not > enough rules to produce a node with desired properties: convention=IGNITE, > sort=[0 ASC-nulls-first, 1 DESC-nulls-last], distr=single, > rewindability=one-way, correlation=uncorrelated. > Missing conversions are IgniteLogicalTableScan[convention: NONE -> IGNITE, > sort: [] -> [0]], IgniteLogicalTableScan[convention: NONE -> IGNITE, sort: [] > -> [0], distr: any -> single] > There are 2 empty subsets: > Empty subset 0: rel#1430:RelSubset#7.IGNITE.[0].single.one-way.uncorrelated, > the relevant part of the original plan is as follows > 309:IgniteLogicalTableScan(table=[[PUBLIC, ORDERS]], requiredColumns=[{2, 6}]) > Empty subset 1: rel#1425:RelSubset#7.IGNITE.[0].any.one-way.uncorrelated, the > relevant part of the original plan is as follows > 309:IgniteLogicalTableScan(table=[[PUBLIC, ORDERS]], requiredColumns=[{2, 6}]) > Root: rel#1401:RelSubset#12.IGNITE.[0 ASC-nulls-first, 1 > DESC-nulls-last].single.one-way.uncorrelated > Original rel: > LogicalSort(subset=[rel#345:RelSubset#13.IGNITE.[0 ASC-nulls-first, 1 > DESC-nulls-last].single.one-way.uncorrelated], sort0=[$0], sort1=[$1], > dir0=[ASC-nulls-first], dir1=[DESC-nulls-last]): rowcount = > 7.71109716796875E13, cumulative cost = IgniteCost [rowCount=Infinity, > cpu=Infinity, memory=Infinity, io=Infinity, network=Infinity], id = 343 > > LogicalAggregate(subset=[rel#342:RelSubset#12.NONE.[].any.one-way.uncorrelated], > group=[{0, 1}], SUM_PROFIT=[SUM($2)]): rowcount = 7.71109716796875E13, > cumulative cost = IgniteCost [rowCount=Infinity, cpu=Infinity, > memory=Infinity, io=Infinity, network=Infinity], id = 341 > > LogicalProject(subset=[rel#340:RelSubset#11.NONE.[].any.one-way.uncorrelated], > NATION=[$16], O_YEAR=[EXTRACT(FLAG(YEAR), $14)], AMOUNT=[-(*($8, -(1, $9)), > *($12, $7))]): rowcount = 1.0281462890625E14, cumulative cost = IgniteCost > [rowCount=Infinity, cpu=Infinity, memory=Infinity, io=Infinity, > network=Infinity], id = 339 > > LogicalJoin(subset=[rel#338:RelSubset#10.NONE.[].any.one-way.uncorrelated], > condition=[=($3, $15)], joinType=[inner]): rowcount = 1.0281462890625E14, > cumulative cost = IgniteCost [rowCount=Infinity, cpu=Infinity, > memory=Infinity, io=Infinity, network=Infinity], id = 337 > > LogicalJoin(subset=[rel#335:RelSubset#8.NONE.[].any.one-way.uncorrelated], > condition=[=($13, $4)], joinType=[inner]): rowcount = 2.7417234375E13, > cumulative cost = IgniteCost [rowCount=Infinity, cpu=Infinity, > memory=Infinity, io=Infinity, network=Infinity], id = 334 > > LogicalJoin(subset=[rel#332:RelSubset#6.NONE.[].any.one-way.uncorrelated], > condition=[AND(=($11, $6), =($10, $5))], joinType=[inner]): rowcount = > 1.21854375E10, cumulative cost = IgniteCost [rowCount=Infinity, cpu=Infinity, > memory=Infinity, io=Infinity, network=Infinity], id = 331 > > LogicalJoin(subset=[rel#329:RelSubset#4.NONE.[].any.one-way.uncorrelated], > condition=[AND(=($2, $6), =($0, $5))], joinType=[inner]): rowcount = > 6.7696875E7, cumulative cost = IgniteCost [rowCount=Infinity, cpu=Infinity, > memory=Infinity, io=Infinity, network=Infinity], id = 328 > > LogicalJoin(subset=[rel#326:RelSubset#2.NONE.[].any.one-way.uncorrelated], > condition=[true], joinType=[inner]): rowcount = 50000.0, cumulative cost = > IgniteCost [rowCount=Infinity, cpu=Infinity, memory=Infinity, io=Infinity, > network=Infinity], id = 325 > > IgniteLogicalTableScan(subset=[rel#323:RelSubset#0.NONE.[].any.one-way.uncorrelated], > table=[[PUBLIC, PART]], filters=[LIKE($t1, _UTF-8'%green%')], > requiredColumns=[{2, 3}]): rowcount = 500.0, cumulative cost = IgniteCost > [rowCount=Infinity, cpu=Infinity, memory=Infinity, io=Infinity, > network=Infinity], id = 281 > > IgniteLogicalTableScan(subset=[rel#324:RelSubset#1.NONE.[].any.one-way.uncorrelated], > table=[[PUBLIC, SUPPLIER]], requiredColumns=[{2, 5}]): rowcount = 100.0, > cumulative cost = IgniteCost [rowCount=Infinity, cpu=Infinity, > memory=Infinity, io=Infinity, network=Infinity], id = 288 > > IgniteLogicalTableScan(subset=[rel#327:RelSubset#3.NONE.[].any.one-way.uncorrelated], > table=[[PUBLIC, LINEITEM]], requiredColumns=[{2, 3, 4, 6, 7, 8}]): rowcount > = 60175.0, cumulative cost = IgniteCost [rowCount=Infinity, cpu=Infinity, > memory=Infinity, io=Infinity, network=Infinity], id = 295 > > IgniteLogicalTableScan(subset=[rel#330:RelSubset#5.NONE.[].any.one-way.uncorrelated], > table=[[PUBLIC, PARTSUPP]], requiredColumns=[{2, 3, 5}]): rowcount = 8000.0, > cumulative cost = IgniteCost [rowCount=Infinity, cpu=Infinity, > memory=Infinity, io=Infinity, network=Infinity], id = 302 > > IgniteLogicalTableScan(subset=[rel#333:RelSubset#7.NONE.[].any.one-way.uncorrelated], > table=[[PUBLIC, ORDERS]], requiredColumns=[{2, 6}]): rowcount = 15000.0, > cumulative cost = IgniteCost [rowCount=Infinity, cpu=Infinity, > memory=Infinity, io=Infinity, network=Infinity], id = 309 > > IgniteLogicalTableScan(subset=[rel#336:RelSubset#9.NONE.[].any.one-way.uncorrelated], > table=[[PUBLIC, NATION]], requiredColumns=[{2, 3}]): rowcount = 25.0, > cumulative cost = IgniteCost [rowCount=Infinity, cpu=Infinity, > memory=Infinity, io=Infinity, network=Infinity], id = 316 > at > org.apache.calcite.plan.volcano.RelSubset$CheapestPlanReplacer.visit(RelSubset.java:718) > ~[calcite-core-1.37.0.jar:1.37.0] > at > org.apache.calcite.plan.volcano.RelSubset.buildCheapestPlan(RelSubset.java:391) > ~[calcite-core-1.37.0.jar:1.37.0] > at > org.apache.calcite.plan.volcano.VolcanoPlanner.findBestExp(VolcanoPlanner.java:534) > ~[calcite-core-1.37.0.jar:1.37.0] > at > org.apache.calcite.tools.Programs$RuleSetProgram.run(Programs.java:328) > ~[calcite-core-1.37.0.jar:1.37.0] > at > org.apache.ignite.internal.processors.query.calcite.prepare.IgnitePlanner.transform(IgnitePlanner.java:381) > ~[classes/:?] > at > org.apache.ignite.internal.processors.query.calcite.prepare.PlannerHelper.optimize(PlannerHelper.java:107) > ~[classes/:?] > at > org.apache.ignite.internal.processors.query.calcite.prepare.PrepareServiceImpl.prepareQuery(PrepareServiceImpl.java:168) > ~[classes/:?] > at > org.apache.ignite.internal.processors.query.calcite.prepare.PrepareServiceImpl.prepareSingle(PrepareServiceImpl.java:94) > ~[classes/:?] > at > org.apache.ignite.internal.processors.query.calcite.CalciteQueryProcessor.lambda$parseAndProcessQuery$5(CalciteQueryProcessor.java:553) > ~[classes/:?] > at > org.apache.ignite.internal.processors.query.calcite.prepare.QueryPlanCacheImpl.lambda$queryPlan$0(QueryPlanCacheImpl.java:70) > ~[classes/:?] > at > java.base/java.util.concurrent.ConcurrentMap.computeIfAbsent(ConcurrentMap.java:330) > ~[?:?] > at > org.apache.ignite.internal.processors.query.calcite.prepare.QueryPlanCacheImpl.queryPlan(QueryPlanCacheImpl.java:70) > ~[classes/:?] > at > org.apache.ignite.internal.processors.query.calcite.CalciteQueryProcessor.lambda$parseAndProcessQuery$6(CalciteQueryProcessor.java:550) > ~[classes/:?] > at > org.apache.ignite.internal.processors.query.calcite.CalciteQueryProcessor.processQuery(CalciteQueryProcessor.java:701) > ~[classes/:?] > at > org.apache.ignite.internal.processors.query.calcite.CalciteQueryProcessor.parseAndProcessQuery(CalciteQueryProcessor.java:547) > ~[classes/:?] > at > org.apache.ignite.internal.processors.query.calcite.CalciteQueryProcessor.query(CalciteQueryProcessor.java:420) > ~[classes/:?] > at > org.apache.ignite.internal.processors.query.GridQueryProcessor$2.applyx(GridQueryProcessor.java:3119) > ~[classes/:?] > at > org.apache.ignite.internal.processors.query.GridQueryProcessor$2.applyx(GridQueryProcessor.java:3075) > ~[classes/:?] > at > org.apache.ignite.internal.util.lang.IgniteOutClosureX.apply(IgniteOutClosureX.java:36) > ~[classes/:?] > at > org.apache.ignite.internal.processors.query.GridQueryProcessor.executeQuery(GridQueryProcessor.java:3861) > ~[classes/:?] > at > org.apache.ignite.internal.processors.query.GridQueryProcessor.lambda$querySqlFields$3(GridQueryProcessor.java:3152) > ~[classes/:?] > at > org.apache.ignite.internal.processors.query.GridQueryProcessor.executeQuerySafe(GridQueryProcessor.java:3289) > [classes/:?] > at > org.apache.ignite.internal.processors.query.GridQueryProcessor.querySqlFields(GridQueryProcessor.java:3071) > [classes/:?] > at > org.apache.ignite.internal.processors.query.GridQueryProcessor.querySqlFields(GridQueryProcessor.java:2995) > [classes/:?] > at > org.apache.ignite.internal.processors.query.GridQueryProcessor.querySqlFields(GridQueryProcessor.java:2968) > [classes/:?] > at > org.apache.ignite.internal.processors.query.calcite.integration.tpch.TpchQ9Test.exec(TpchQ9Test.java:73) > [test-classes/:?] > at > org.apache.ignite.internal.processors.query.calcite.integration.tpch.TpchQ9Test.testQ9(TpchQ9Test.java:62) > [test-classes/:?] > at > java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native > Method) ~[?:?] > at > java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) > ~[?:?] > at > java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > ~[?:?] > at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[?:?] > at > org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) > [junit-4.12.jar:4.12] > at > org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) > [junit-4.12.jar:4.12] > at > org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) > [junit-4.12.jar:4.12] > at > org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) > [junit-4.12.jar:4.12] > at > org.apache.ignite.testframework.junits.GridAbstractTest$6.run(GridAbstractTest.java:2508) > [test-classes/:?] > at java.base/java.lang.Thread.run(Thread.java:829) [?:?] > [2025-03-18T17:08:08,212][ERROR][test-runner-#494%tpch.TpchQ9Test%][PrepareServiceImpl] > Root: rel#1401:RelSubset#12.IGNITE.[0 ASC-nulls-first, 1 > DESC-nulls-last].single.one-way.uncorrelated > Original rel: > LogicalSort(subset=[rel#345:RelSubset#13.IGNITE.[0 ASC-nulls-first, 1 > DESC-nulls-last].single.one-way.uncorrelated], sort0=[$0], sort1=[$1], > dir0=[ASC-nulls-first], dir1=[DESC-nulls-last]): rowcount = > 7.71109716796875E13, cumulative cost = IgniteCost [rowCount=Infinity, > cpu=Infinity, memory=Infinity, io=Infinity, network=Infinity], id = 343 > > LogicalAggregate(subset=[rel#342:RelSubset#12.NONE.[].any.one-way.uncorrelated], > group=[{0, 1}], SUM_PROFIT=[SUM($2)]): rowcount = 7.71109716796875E13, > cumulative cost = IgniteCost [rowCount=Infinity, cpu=Infinity, > memory=Infinity, io=Infinity, network=Infinity], id = 341 > > LogicalProject(subset=[rel#340:RelSubset#11.NONE.[].any.one-way.uncorrelated], > NATION=[$16], O_YEAR=[EXTRACT(FLAG(YEAR), $14)], AMOUNT=[-(*($8, -(1, $9)), > *($12, $7))]): rowcount = 1.0281462890625E14, cumulative cost = IgniteCost > [rowCount=Infinity, cpu=Infinity, memory=Infinity, io=Infinity, > network=Infinity], id = 339 > > LogicalJoin(subset=[rel#338:RelSubset#10.NONE.[].any.one-way.uncorrelated], > condition=[=($3, $15)], joinType=[inner]): rowcount = 1.0281462890625E14, > cumulative cost = IgniteCost [rowCount=Infinity, cpu=Infinity, > memory=Infinity, io=Infinity, network=Infinity], id = 337 > > LogicalJoin(subset=[rel#335:RelSubset#8.NONE.[].any.one-way.uncorrelated], > condition=[=($13, $4)], joinType=[inner]): rowcount = 2.7417234375E13, > cumulative cost = IgniteCost [rowCount=Infinity, cpu=Infinity, > memory=Infinity, io=Infinity, network=Infinity], id = 334 > > LogicalJoin(subset=[rel#332:RelSubset#6.NONE.[].any.one-way.uncorrelated], > condition=[AND(=($11, $6), =($10, $5))], joinType=[inner]): rowcount = > 1.21854375E10, cumulative cost = IgniteCost [rowCount=Infinity, cpu=Infinity, > memory=Infinity, io=Infinity, network=Infinity], id = 331 > > LogicalJoin(subset=[rel#329:RelSubset#4.NONE.[].any.one-way.uncorrelated], > condition=[AND(=($2, $6), =($0, $5))], joinType=[inner]): rowcount = > 6.7696875E7, cumulative cost = IgniteCost [rowCount=Infinity, cpu=Infinity, > memory=Infinity, io=Infinity, network=Infinity], id = 328 > > LogicalJoin(subset=[rel#326:RelSubset#2.NONE.[].any.one-way.uncorrelated], > condition=[true], joinType=[inner]): rowcount = 50000.0, cumulative cost = > IgniteCost [rowCount=Infinity, cpu=Infinity, memory=Infinity, io=Infinity, > network=Infinity], id = 325 > > IgniteLogicalTableScan(subset=[rel#323:RelSubset#0.NONE.[].any.one-way.uncorrelated], > table=[[PUBLIC, PART]], filters=[LIKE($t1, _UTF-8'%green%')], > requiredColumns=[{2, 3}]): rowcount = 500.0, cumulative cost = IgniteCost > [rowCount=Infinity, cpu=Infinity, memory=Infinity, io=Infinity, > network=Infinity], id = 281 > > IgniteLogicalTableScan(subset=[rel#324:RelSubset#1.NONE.[].any.one-way.uncorrelated], > table=[[PUBLIC, SUPPLIER]], requiredColumns=[{2, 5}]): rowcount = 100.0, > cumulative cost = IgniteCost [rowCount=Infinity, cpu=Infinity, > memory=Infinity, io=Infinity, network=Infinity], id = 288 > > IgniteLogicalTableScan(subset=[rel#327:RelSubset#3.NONE.[].any.one-way.uncorrelated], > table=[[PUBLIC, LINEITEM]], requiredColumns=[{2, 3, 4, 6, 7, 8}]): rowcount > = 60175.0, cumulative cost = IgniteCost [rowCount=Infinity, cpu=Infinity, > memory=Infinity, io=Infinity, network=Infinity], id = 295 > > IgniteLogicalTableScan(subset=[rel#330:RelSubset#5.NONE.[].any.one-way.uncorrelated], > table=[[PUBLIC, PARTSUPP]], requiredColumns=[{2, 3, 5}]): rowcount = 8000.0, > cumulative cost = IgniteCost [rowCount=Infinity, cpu=Infinity, > memory=Infinity, io=Infinity, network=Infinity], id = 302 > > IgniteLogicalTableScan(subset=[rel#333:RelSubset#7.NONE.[].any.one-way.uncorrelated], > table=[[PUBLIC, ORDERS]], requiredColumns=[{2, 6}]): rowcount = 15000.0, > cumulative cost = IgniteCost [rowCount=Infinity, cpu=Infinity, > memory=Infinity, io=Infinity, network=Infinity], id = 309 > > IgniteLogicalTableScan(subset=[rel#336:RelSubset#9.NONE.[].any.one-way.uncorrelated], > table=[[PUBLIC, NATION]], requiredColumns=[{2, 3}]): rowcount = 25.0, > cumulative cost = IgniteCost [rowCount=Infinity, cpu=Infinity, > memory=Infinity, io=Infinity, network=Infinity], id = 316 > [2025-03-18T17:08:08,213][WARN > ][test-runner-#494%tpch.TpchQ9Test%][HeavyQueriesTracker] Long running query > is finished with error: Failed to plan query > [queryId=89ae02a6-60da-4925-b3d2-afa7b0cfbcf0, > globalQueryId=2c3da017-e417-480e-912d-c2aad54ee25d_30, planningTime=40013ms, > execTime=0ms, idleTime=0ms, timeout=0ms, type=CALCITE, state=CLOSED, > schema=PUBLIC, sql='SELECT `NATION`, `O_YEAR`, SUM(`AMOUNT`) AS `SUM_PROFIT` > FROM (SELECT `N_NAME` AS `NATION`, EXTRACT(YEAR FROM `O_ORDERDATE`) AS > `O_YEAR`, `L_EXTENDEDPRICE` * (1 - `L_DISCOUNT`) - `PS_SUPPLYCOST` * > `L_QUANTITY` AS `AMOUNT` > FROM `PART`, > `SUPPLIER`, > `LINEITEM`, > `PARTSUPP`, > `ORDERS`, > `NATION` > WHERE `S_SUPPKEY` = `L_SUPPKEY` AND `PS_SUPPKEY` = `L_SUPPKEY` AND > `PS_PARTKEY` = `L_PARTKEY` AND `P_PARTKEY` = `L_PARTKEY` AND `O_ORDERKEY` = > `L_ORDERKEY` AND `S_NATIONKEY` = `N_NATIONKEY` AND `P_NAME` LIKE '%green%') > AS `PROFIT` > GROUP BY `NATION`, `O_YEAR` > ORDER BY `NATION`, `O_YEAR` DESC] > {noformat} -- This message was sent by Atlassian Jira (v8.20.10#820010)