Snowflake中INSERT OVERWRITE执行时查询是否会无数据?
关于INSERT OVERWRITE执行期间查询目标表的问题
是的,完全有可能在INSERT OVERWRITE TABLEA执行期间查询不到任何数据,这和多数大数据查询引擎(如Hive、Spark SQL)对INSERT OVERWRITE的实现逻辑直接相关。
这类引擎的INSERT OVERWRITE通常遵循先截断原有数据,再写入新数据的流程:
- 语句执行的第一步就会清空目标表的全部数据
- 随后才开始加载新数据到表中,若这个加载过程耗时5分钟,那么在此期间表会处于空数据状态
- 只有当整个写入流程完全完成后,新数据才会全部对查询可见
你遇到的“执行期间表内无数据,任务完成后数据恢复”的情况,正是这种实现逻辑的典型表现。若要避免中间状态的空表问题,可参考以下方案:
- 临时表中转:先将数据写入临时表,确认写入完成后,通过原子重命名操作替换原表
- 开启原子性优化:部分引擎支持
INSERT OVERWRITE的原子性配置(如Spark的相关参数),开启后可让整个写入过程对查询透明,避免出现中间空表
内容的提问来源于stack exchange,提问作者Deepen Gajjar
相关产品推荐
相关产品推荐

