在目标数据库中强制执行 sql 片段(具有 where 条件的视图)

force presto execute sql fragment (a view with where conditions ) in target database

在 Presto 中,我正在编写 SQL 以从具有 6 个表的视图中获取数据。这些表都很大,记录从五百万到三千万不等。 SQL如下:

select
  a, b, c, d
from db.schema.v_order
where
  f_order_code in (
    select order_code from anotherdb.schema.xxx where ......
  )

我试过从子查询中获取结果,并用内容替换子查询,然后在mysql中直接执行这个sql。索引很快。 但是当我在 Presto 中执行这个 SQL 时,我发现 Presto 总是在没有任何 where 条件的情况下获取整个视图记录。这很慢。

我可以获取子查询的结果作为视图的where条件并强制在mysql中执行这个sql片段吗?或者这个问题还有其他解决方案吗?

这是Presto的长期存在。这是由以下 Github 问题跟踪的:https://github.com/prestosql/presto/issues/18. Also, https://github.com/prestosql/presto/issues/684 是相关的。

作为解决方法,您可以直接在数据库中定义一个 VIEW(此处:mysql)。

如果半连接 (IN) 跨不同的目录,目前唯一的解决方法是从一个 table 中提取数据并将其作为常量传递给查询。