作者:宋军,花名嵩林,阿里云EMR技术专家。从事Spark内核优化,对SparkCore/SprakSQL有深入了解,Spark Contributor
Delta元数据解析
元数据初识
Delta有自己的元数据管理,主要有6种类型的元数据Action:
SetTransaction
AddFile
RemoveFile
Metadata
Protocol
CommitInfo
Delta的元数据统一存放在Delta的logpath下面的_delta_log
文件夹中
_delta_log文件夹位置
不管DeltaTable是分区表还是非分区表,_delta_log文件夹只有一个,都位于Delta的logpath下面
_delta_log文件夹内容
_delta_log文件夹下存储了所有Delta的相关元数据,如下所示
Delta每次事务commit都会产生一个json的元数据文件,文件内容包括本次commit做的所有action,比如AddFile/RemoveFile等等;
每产生一个新的json文件就会产生一个新的Delta的snapshot,snapshot的版本即该json文件中的数字,该数字必须是连续自增(不能缺失),Delta的某个版本的snapshot是通过顺序回放所有小于等于该snapshot版本号的所有json文件得到;
每个json文件会有一个对应的crc校验文件(源码中有相关代码,但是并没有实际去写该crc)
对元数据做checkpoint时会产生新的checkpoint文件(parquet)
如下FileNames
类用来管理_delta_log文件夹下相关文件的文件名
如下_delta_log文件示例: