BigQuery执行CREATE OR REPLACE语句是否会导致表产生downtime?
CREATE OR REPLACE TABLE 执行期间原表可用性解答
核心结论
绝大多数主流数据库、数据仓库产品下,执行CREATE OR REPLACE TABLE sample AS (...)的过程中,sample表全程可正常访问,不会出现404 Not Found类的表不存在异常。
具体逻辑说明
- 底层执行时,整个操作是原子性的:首先会先完整执行AS后的查询逻辑,生成新的表数据,这个阶段所有外部查询访问的仍然是原
sample表的旧数据,不会受任何影响。 - 新表数据、元信息全部校验完成后,才会执行毫秒级的元数据切换操作,直接用新表的元数据覆盖旧表元数据,整个切换过程没有中间的“表删除”状态,外部查询要么拿到切换前的旧数据,要么拿到切换后的新数据,不存在找不到表的时间窗口。
- 只有非原子的手动替换流程(比如先执行
DROP TABLE sample再执行CREATE TABLE sample AS ...)才会存在表不存在的间隙,可能导致其他查询报错。
适用范围
以上特性支持所有主流产品,包括但不限于:云数据仓库(BigQuery、Snowflake、MaxCompute等)、开源关系型数据库(PostgreSQL 12+、MySQL 8.0+等)。只有极少数已淘汰的老旧数据库不支持该操作的原子性,才可能出现异常。
内容的提问来源于stack exchange,提问作者Rob
相关产品推荐
相关产品推荐

