改一批数据,最怕像换书里几页,却不小心撕掉整章。Delta Lake——给数据湖文件补上事务日志、保障更新与并发写入的开放表格式——在 4.3 中补强了覆盖写入:据 Delta Lake 官方文档,DataFrame API 新增 replaceUsing 和 replaceOn,可只替换符合条件的数据,而不是笼统覆盖整张表或整个分区。
replaceUsing 按指定列匹配:它会原子地删除目标表中与输入数据键值相同的行,再写入新行;“原子地”意味着删除和插入作为一个完整动作提交。若要把 NULL 视为相等,或表达更复杂的判断,则用支持自定义布尔条件的 replaceOn。两者都适用于分区表、非分区表和采用 liquid clustering 的表。
另一处变化关乎治理。Catalog——记录表名、位置、权限和元数据的数据资产登记处——现在负责 catalog-managed table 的发现与提交协调,客户端必须经由它访问,不能绕过目录直接按存储路径操作。官方发布说明还提到并发事务下 V2 checkpoint 的改进,并阻止用 REPLACE 把普通表直接变成 catalog-managed table。换句话说,4.3 不只让“替换哪部分”更清楚,也让“谁有权提交”更统一。