[fix](planner)allow infer predicate for external table (#24227)

CREATE EXTERNAL TABLE `dim_server` (
    `col1` varchar(50) NOT NULL,
    `col2` varchar(50) NOT NULL
    )
create view ads_oreo_sid_report
    (
    `col1` ,
        `col2`
    )
    AS
    select
    tmp.col1,tmp.col2
    from (
    select 'abc' as col1,'def' as col2
    ) tmp
    inner join dim_server ds on tmp.col1 = ds.col1  and tmp.col2 = ds.col2;

select * from ads_oreo_sid_report where col1='abc' and col2='def';

before this pr,  col1='abc' and col2='def' can't be pushed to dim_server. now the 2 predicates can be pushed to odbc table.
This commit is contained in:
starocean999
2023-09-13 17:22:39 +08:00
committed by GitHub
parent 86aa3802cf
commit 231038f050
7 changed files with 85 additions and 25 deletions

View File

@ -88,6 +88,10 @@ public class MysqlScanNode extends ExternalScanNode {
return output.toString();
}
output.append(prefix).append("Query: ").append(getMysqlQueryStr()).append("\n");
if (!conjuncts.isEmpty()) {
Expr expr = convertConjunctsToAndCompoundPredicate(conjuncts);
output.append(prefix).append("PREDICATES: ").append(expr.toSql()).append("\n");
}
return output.toString();
}

View File

@ -2047,7 +2047,8 @@ public class SingleNodePlanner {
throw new UserException("Not supported table type: " + tblRef.getTable().getType());
}
if (scanNode instanceof OlapScanNode || scanNode instanceof EsScanNode
|| scanNode instanceof FileQueryScanNode) {
|| scanNode instanceof OdbcScanNode || scanNode instanceof JdbcScanNode
|| scanNode instanceof FileQueryScanNode || scanNode instanceof MysqlScanNode) {
if (analyzer.enableInferPredicate()) {
PredicatePushDown.visitScanNode(scanNode, tblRef.getJoinOp(), analyzer);
}

View File

@ -220,6 +220,10 @@ public class JdbcScanNode extends ExternalScanNode {
return output.toString();
}
output.append(prefix).append("QUERY: ").append(getJdbcQueryStr()).append("\n");
if (!conjuncts.isEmpty()) {
Expr expr = convertConjunctsToAndCompoundPredicate(conjuncts);
output.append(prefix).append("PREDICATES: ").append(expr.toSql()).append("\n");
}
return output.toString();
}

View File

@ -104,6 +104,10 @@ public class OdbcScanNode extends ExternalScanNode {
return output.toString();
}
output.append(prefix).append("QUERY: ").append(getOdbcQueryStr()).append("\n");
if (!conjuncts.isEmpty()) {
Expr expr = convertConjunctsToAndCompoundPredicate(conjuncts);
output.append(prefix).append("PREDICATES: ").append(expr.toSql()).append("\n");
}
return output.toString();
}