在数据库里执行一条 UPDATE orders SET status='PAID' WHERE id=...,我们很容易把它想成“找到这一行,改掉几个字段”。把同样的语句放到湖仓表上,这个直觉会出问题。Parquet 数据文件是不可变的,Iceberg 管的是文件和元数据,不会钻进一个已经提交的 Parquet 文件里原地改几个字节。
于是,更新一行到底有多贵,不能只看 affected rows。它可能触发整个数据文件重写,也可能先增加 delete file,把合并成本推迟到查询和维护阶段。真正要算的是:命中了多少 data file、每个文件多大、产生多少 delete、读端要合并多少层,以及这些文件何时能被重新整理掉。