Add file:每个添加的新文件。 文件级别的事务日志 当用户创建 Delta Lake 表时,将在 _delta_log 子目录中自动创建该表的事务日志。当他或她对该表进行更改时,这些更改将作为有序的原子提交记录在事务日志中。每个提交都以 JSON 文件的形式写出,从 000000.json 开始。对表的其他更改按升序数字顺序生成后续 JSON ...
_actions: Seq[Action]_:Delta Lake 表更新操作产生的新文件(AddFile)和需要删除文件的列表(RemoveFile)。如果是 Structured Streaming 作业,还会记录 SetTransaction 记录,里面会存储作业的 query id(sql.streaming.queryId)、batchId 以及当前时间。这个就是我们需要持久化到事务日志里面的数据。 _op: DeltaOperation...
其action行为主要有以下几种:SetTransaction、AddFile、RemoveFile、Metadata、Protocol、CommitInfo和Column ...
用户对delta lake表的修改操作,如insert,update或者delete操作,delta lake会将该操作划分为一系列具体的操作步骤(一个或者多个)。 a).add file 增加一个数据文件 b).remove file 删除一个数据文件 c). update metadata 更新表的元数据,比如修改表的名称,schema 或者分区。 d).set transaction 使用给定的ID记录st...
Delta Lake 写操作最终调用 Spark 的FileFormatWriter.write方法进行的,通过这个方法的复用将我们真正的数据写入到 Delta Lake 表里面去了。 在Delta Lake 中,如果是新增文件则会在事务日志中使用 AddFile 类记录相关的信息,AddFile 持久化到事务日志里面的内容如下: ...
Delta Lake元数据 delta lake 包含Protocol、Metadata、FileAction(AddFile、RemoveFile)、CommitInfo和SetTransaction这几种元数据action。 Protocol:这是delta lake自身的版本管理,一般只出现在第一次的commit日志里(之后版本升级应该也会有); Metadata:存储delta表的schema信息,第一次commit和每次修改schema时出现,以最后...
因为Delta Lake 表支持分区,所以我们可能在写数据的时候指定某个分区进行覆盖。 真正写数据的操作是txn.writeFiles函数执行的,具体实现如下: def writeFiles( data: Dataset[_], writeOptions: Option[DeltaOptions], isOptimize: Boolean): Seq[AddFile]={ ...
由于上面的元数据更新只对 Column 的 NDV 和 total Size 进行更新,对于 Trino 表的 RowCNT,以及表的 Column 的 min、max、null cnt,Trino 是基于 Deltalake 事务日志的 AddFile 的统计信息来进行计算。 Deltalake 在 1.2 版本之后,支持 AddFile 中生成 File 以及的列的统计信息,MR 参考:https://github.com...
Delta Lake 所有的元数据操作都被抽象成了相应的 Action 操作,也就是所有表的元数据都是由 Action 子类实现的,让我们看目前都有哪些 Action: Metadata:保存表的 Schema,Partition 列,及表配置等信息。 AddFile:commit 中新加入的有效的数据文件。 RemoveFile:commit 中删除标记为无效的文件。
其action行为主要有以下几种:SetTransaction、AddFile、RemoveFile、Metadata、Protocol、CommitInfo和Column Mapping。 Checkpoints 代码语言:javascript 复制 ./_delta_log/00000000000000000010.checkpoint.parquet checkpoints文件也存储在 _delta_log 目录中,可以为任何版本的表创建。检查点包含在此版本之前的所有操作的完整...