检测到Schema不匹配时,Delta表是否执行了写入操作?
Schema不匹配时Delta表是否会执行写入操作?
核心问题解答
- 当你遇到贴出的Schema不匹配报错时,完全没有写入操作被执行。Delta Lake在Schema校验失败且未开启自动合并Schema的情况下,会直接抛出异常终止写入流程,不会向目标表写入任何数据,所以你不需要担心需要清理大量数据。
关于你的Schema校验逻辑
- 你实现的“检查流入数据是否包含目标表全部列,缺失则补列并赋值为None”的逻辑,是提前将流入数据的Schema对齐到目标表的Schema,这种情况下提交写入时应该不会再触发该报错。
- 若仍有顾虑,可以用小批量测试数据模拟Schema缺失场景,运行代码后通过
DESCRIBE HISTORY <你的表名>查看表的版本记录,若没有新增版本,即可确认无写入操作。
报错参数说明
- 报错中提到的
mergeSchema参数,作用是让Delta自动合并Schema(比如流入数据新增列时,自动将该列添加到目标表),这和你的手动补列逻辑方向相反:你是让数据适配表,而该参数是让表适配数据。 - 如果你想保留自己的校验逻辑,无需开启该参数;若后续需要允许流入数据新增列到目标表,可在写入时添加
.option("mergeSchema", "true")。
内容的提问来源于stack exchange,提问作者divya borse
相关产品推荐
相关产品推荐

