WHERE 子句是否被推入带有 QUALIFY 子句的 VIEWS 中?

问题描述 投票:0回答:1

如果 VIEW 的定义有 QUALIFY 子句,当从视图中进行选择时,WHERE 子句是下推,还是在应用 WHERE 子句之前评估整个视图 SQL?

例如,

CREATE VIEW vw_some_table (
  table_id,
  fk_id,
  type_cd,
  insert_dt
)
AS SELECT
  table_id,
  fk_id,
  type_cd
FROM some_table
QUALIFY row_number() OVER (PARTITION BY fk_id ORDER BY insert_dt DESC) == 1

使用 SQL:

SELECT *
FROM vw_some_table
WHERE type_cd = 'TYPE1'
databricks parquet databricks-sql
1个回答
0
投票

如果我们使用您的示例,则

WHERE
子句过滤
type_cd = 'TYPE1'
可能会被下推并在窗口函数和
QUALIFY
子句之前应用,前提是优化器认为它更有效并且这样做不会影响查询,但如果优化器无法保证正确性或不支持此类优化,则将在视图的 SQL 完全评估后应用
WHERE
子句。

© www.soinside.com 2019 - 2024. All rights reserved.