Details
-
Improvement
-
Status: Open
-
Major
-
Resolution: Unresolved
-
None
-
None
Description
Currently, the CTE query block will be sql2rel multiple times if be referenced multiple times. If it contains a lateral join, it will generate different correlation id. See below:
String sql = "WITH a AS (SELECT ename, job, empno, r FROM emp, LATERAL TABLE (ramp(empno)) as T(r))" + " SELECT * from a a1, a a2 WHERE a1.r = a2.empno"; sql(sql).ok();
LogicalProject(ENAME=[$0], JOB=[$1], EMPNO=[$2], R=[$3], ENAME0=[$4], JOB0=[$5], EMPNO0=[$6], R0=[$7]) LogicalJoin(condition=[=($3, $6)], joinType=[inner]) LogicalProject(ENAME=[$1], JOB=[$2], EMPNO=[$0], R=[$9]) LogicalCorrelate(correlation=[$cor0], joinType=[inner], requiredColumns=[{0}]) LogicalTableScan(table=[[CATALOG, SALES, EMP]]) LogicalTableFunctionScan(invocation=[RAMP($cor0.EMPNO)], rowType=[RecordType(INTEGER I)]) LogicalProject(ENAME=[$1], JOB=[$2], EMPNO=[$0], R=[$9]) LogicalCorrelate(correlation=[$cor1], joinType=[inner], requiredColumns=[{0}]) LogicalTableScan(table=[[CATALOG, SALES, EMP]]) LogicalTableFunctionScan(invocation=[RAMP($cor1.EMPNO)], rowType=[RecordType(INTEGER I)])
It will generate two correlation id. In flink there is a subplan reuse based on the digest, the same query produce diff digest will break this functionality
Attachments
Attachments
Issue Links
- relates to
-
FLINK-32320 Same correlate can not be reused due to the different correlationId
-
- Open
-
- links to