[
https://issues.apache.org/jira/browse/CALCITE-3055?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16836665#comment-16836665
]
Volodymyr Vysotskyi commented on CALCITE-3055:
----------------------------------------------
[~KazydubB], I was able to reproduce this issue in Calcite only. Here is the
branch with the test: [https://github.com/vvysotskyi/calcite/tree/CALCITE-3055].
Except for the test case itself, was added testing code for expanding views
and modified testing code connected with dynamic tables to reflect real use
case (dynamic table cannot be {{RelOptTable}} since the last one is used during
re nodes creation, but at that time it is forbidden to update row type
dynamically).
[~julianhyde], that's absolutely correct that Drill depends deeply on Calcite
internals, and it is the root cause why it is sometimes is not tested on the
release candidates. AFAIK [~KazydubB] started updating Calcite before the
release, but due to some breaking Calcite changes, a lot of unit tests in Drill
failed, and he investigated whether the reason was in Drill or Calcite.
Regarding the proposed fix, the discussion was started in CALCITE-3020, and
there were provided arguments in favor of adding row type to the description.
Except for this change, another possible way for resolving this issue is
reverting a part of the fix for CALCITE-2454 where {{Pair.of(digest,
rel.getRowType())}} usage was replaced with {{digest}} only.
Do you have other proposals on how to resolve this issue?
Besides Drill, this change (CALCITE-2454) also breaks other projects (perhaps
Flink in CALCITE-3020), so I think that we should treat this Jira and
CALCITE-3020 as blockers for the upcoming release.
> TableScan type mismatch in VolcanoPlanner
> -----------------------------------------
>
> Key: CALCITE-3055
> URL: https://issues.apache.org/jira/browse/CALCITE-3055
> Project: Calcite
> Issue Type: Bug
> Affects Versions: 1.19.0
> Reporter: Bohdan Kazydub
> Assignee: Danny Chan
> Priority: Major
>
> In Drill with Calcite updated to 1.19.0 we observe following problem:
> the following query
> {code}
> CREATE VIEW nation_view_testunionall_expandable_star AS select n_name,
> n_nationkey FROM cp.`tpch/nation.parquet`;
> (SELECT n_comment, n_regionkey FROM cp.`tpch/nation.parquet` LIMIT 5) UNION
> ALL (SELECT * FROM nation_view_testunionall_expandable_star LIMIT 5)
> {code}
> fails with
> {code}
> 15:46:06.005 [2333c7f1-89f3-0b80-8369-68e24895729e:foreman] ERROR
> o.a.drill.exec.work.foreman.Foreman - SYSTEM ERROR: AssertionError: Type
> mismatch:
> left:
> RecordType(DYNAMIC_STAR **, ANY n_comment, ANY n_regionkey) NOT NULL
> right:
> RecordType(DYNAMIC_STAR **, ANY n_comment, ANY n_regionkey, ANY n_name, ANY
> n_nationkey) NOT NULL
> {code}
> when Volcano planner is registering rel nodes. The initial plan is the
> following:
> {code}
> LogicalUnion(all=[true]): rowcount = 10.0, cumulative cost = \{520.0 rows,
> 940.755032994728 cpu, 0.0 io, 0.0 network, 0.0 memory}, id = 74
> LogicalSort(fetch=[5]): rowcount = 5.0, cumulative cost = \{205.0 rows,
> 365.377516497364 cpu, 0.0 io, 0.0 network, 0.0 memory}, id = 68
> LogicalProject(n_comment=[$1], n_regionkey=[$2]): rowcount = 100.0,
> cumulative cost = \{200.0 rows, 301.0 cpu, 0.0 io, 0.0 network, 0.0 memory},
> id = 67
> EnumerableTableScan(table=[[cp, tpch/nation.parquet]]): rowcount =
> 100.0, cumulative cost = \{100.0 rows, 101.0 cpu, 0.0 io, 0.0 network, 0.0
> memory}, id = 29
> LogicalSort(fetch=[5]): rowcount = 5.0, cumulative cost = \{305.0 rows,
> 565.377516497364 cpu, 0.0 io, 0.0 network, 0.0 memory}, id = 73
> LogicalProject(n_name=[$0], n_nationkey=[$1]): rowcount = 100.0,
> cumulative cost = \{300.0 rows, 501.0 cpu, 0.0 io, 0.0 network, 0.0 memory},
> id = 72
> LogicalProject(n_name=[$3], n_nationkey=[$4]): rowcount = 100.0,
> cumulative cost = \{200.0 rows, 301.0 cpu, 0.0 io, 0.0 network, 0.0 memory},
> id = 71
> EnumerableTableScan(table=[[cp, tpch/nation.parquet]]): rowcount =
> 100.0, cumulative cost = \{100.0 rows, 101.0 cpu, 0.0 io, 0.0 network, 0.0
> memory}, id = 34
> {code}
> It contains two EnumerableTableScan operators with different row types
> specified in the error message above. In the scope of CALCITE-2454 was
> removed rel data type from the key in the \{{VolcanoPlanner.mapDigestToRel}}
> map.
> To fix this, `{{TableScan` should include rowType}} item in
> {{AbstractRelNode#explainTerms(RelWriter)}} method because in case of dynamic
> tables there is the same digest for different operators. The same thing was
> done for Values operator and literals in conditions.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)