1

我正在使用 Calcite 从 MySql 和 Vertica 进行查询。

运行此查询时:

statement.executeQuery(
        "SELECT a.name, b.name " +
        "FROM mysqlschema.tableA as a " +
        "INNER JOIN verticaschema.tableB as b ON a.id = b.id " +
        "WHERE a.id = 1 AND b.id = 1 "));

出于某种原因,我看到 Calcite 使用正确的谓词正确访问 tableA,但SELECT * FROM verticaschema.tableB由于某种原因它在第二个表上做。

有没有办法优化它,所以 Calcite 也会b.id=1在 tableB 上运行谓词?

谢谢

4

1 回答 1

1

Apache Calcite 有一些限制

当前限制:JDBC适配器目前只下推表扫描操作;所有其他处理(过滤、连接、聚合等)都在 Calcite 中进行。我们的目标是将尽可能多的处理下推到源系统,同时翻译语法、数据类型和内置函数。如果 Calcite 查询基于单个 JDBC 数据库中的表,则原则上整个查询都应该转到该数据库。如果表来自多个 JDBC 源,或者 JDBC 和非 JDBC 的混合,Calcite 将使用它可以使用的最有效的分布式查询方法。

你应该自己实现它。

于 2017-12-04T10:36:37.530 回答