You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Big Query中同一查询两次调用CTE会重复执行吗?

问题:BigQuery中同一CTE在单语句内多次引用会重复执行吗?

用户提供的简化查询语句:

WITH test AS (
  SELECT 1 AS fieldA, 2 AS fieldB
)

SELECT fieldA, fieldB
FROM test
UNION ALL
SELECT fieldB, fieldA
FROM test;

用户疑问:我此前了解CTE仅在单个SQL语句中生效,但此场景为单语句内两次使用同一CTE,未找到相关说明。实际场景中CTE会更复杂,包含ROW_NUMBER窗口函数与JOIN,想知道BigQuery会两次执行test CTE,还是仅执行一次并在UNION ALL的两个部分共享数据?

解答

在BigQuery中,对于这类确定性的CTE(即不包含随机函数、不依赖外部动态数据或会话变量的CTE),查询优化器会默认将其执行一次并复用结果,不会重复执行两次。

如果你的CTE包含RAND()这类非确定性函数,或者依赖会话级变量、外部动态数据源,BigQuery才可能会多次执行该CTE。但对于包含ROW_NUMBER()窗口函数、JOIN的常规复杂CTE,只要逻辑是确定性的,优化器都会选择只计算一次,然后在UNION ALL的两个分支中共享数据。

你可以通过查看查询的执行计划来验证:在BigQuery控制台运行查询后,切换到「Execution」标签,会看到test CTE对应的计算步骤只会出现一次,两个SELECT分支都会引用这个步骤的输出。

内容的提问来源于stack exchange,提问作者Ido Barash

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 10:36:23