【Iceberg表规范】Manifests(manifest files)、Snapshots和Table Metadata

1. Manifests(manifest files)

manifest file也是一个data file,使用Iceberg的表format、schemas、column projection列投影

一个manifest file要么指向data files,要么指向delete files。在数据Scanning时,会先读取delete files

avro格式的manifest file包含如下key:value数据:

v1v2KeyValue
requiredrequiredschemamanifest file的json格式schema
optionalrequiredschema-id字符串形式的schema ID
requiredrequiredpartition-specjson格式的表分区字段
optionalrequiredpartition-spec-id字符串形式的partition-spec ID
optionalrequiredformat-version字符串形式的表格式版本号
空白requiredcontent数据文件的内容形式: data或deletes

上面的schema各字段说明如下:

v1v2字段ID,字段名称数据类型描述
requiredrequired0 statusint,含义: 0: EXISTING 1: ADDED 2: DELETED用于追踪是data file还是delete file
requiredoptional1 snapshot_idlongdata file或delete file所属的snapshot id
空白optional3 sequence_numberlong当是data file时,所对应的Sequence number
requiredrequired2 data_filedata_file struct

data_file struct各字段说明如下:

v1v2Field id, nameTypeDescription
空白required134 contentint,含义: 0: DATA, 1: POSITION DELETES, 2: EQUALITY DELETES数据文件的内容类型:0:data file,1:position类型的delete file,2:值等式类型的delete file
requiredrequired100 file_pathstring数据文件的Path(带文件系统schema)
requiredrequired101 file_formatstring数据文件的格式:avro、orc、parquet
requiredrequired102 partitionstruct<…>Partition data tuple
requiredrequired103 record_countlong数据文件中数据的行数
requiredrequired104 file_size_in_byteslong数据文件的大小
required空白105 block_size_in_byteslongDeprecated. Always write a default in v1. Do not write in v2.
optional空白106 file_ordinalintDeprecated. Do not write.
optional空白107 sort_columnslist<112: int>Deprecated. Do not write.
optionaloptional108 column_sizesmap<117: int, 118: long>key为字段唯一ID,value为字段数据占磁盘的大小。对于avro行式数据格式,column_sizes等于null
optionaloptional109 value_countsmap<119: int, 120: long>key为字段唯一ID,value为字段数据中值的数量(包含null和NaN)
optionaloptional110 null_value_countsmap<121: int, 122: long>key为字段唯一ID,value为字段数据中null值的数量
optionaloptional137 nan_value_countsmap<138: int, 139: long>为字段唯一ID,value为字段数据中NaN值的数量
optionaloptional111 distinct_countsmap<123: int, 124: long>key为字段唯一ID,value为字段数据去重后的值数量
optionaloptional125 lower_boundsmap<126: int, 127: binary>key为字段唯一ID,value为字段数据的最小值,最小值被序列化为二进制,序列化方式参考:<Single-value serialization>
optionaloptional128 upper_boundsmap<129: int, 130: binary>key为字段唯一ID,value为字段数据的最大值,最大值被序列化为二进制,序列化方式参考:<Single-value serialization>
optionaloptional131 key_metadatabinaryImplementation-specific key metadata for encryption
optionaloptional132 split_offsetslist<133: long>data file的Split offsets
空白optional135 equality_idslist<136: int>值等式形式的delete file中,用于进行值等式计算的多个字段ID
optionaloptional140 sort_order_idintSort order ID
  • sort_order_id:只有data file和值等式形式的delete file需要,position delete file不需要sort order id

2. Snapshots

元数据信息位于vN.metadata.json中

v1v2字段名称描述
requiredrequiredsnapshot-idlong类型的唯一ID
optionaloptionalparent-snapshot-id该snapshot的上一个snapshot id
空白requiredsequence-numberA monotonically increasing long that tracks the order of changes to a table
requiredrequiredtimestamp-mssnapshot创建的时间
optionalrequiredmanifest-list该snapshot对应的manifest list的Path
optional空白manifests该snapshot对应的多个manifest file的Path列表
optionalrequiredsummaryA string map that summarizes the snapshot changes, including operation
optionaloptionalschema-idsnapshot创建时的schema ID

summary的operation字段可取的值有:

  • append:只添加data files
  • replace:添加data files和delete files,但表数据并为改变。比如compaction操作
  • overwrite:添加data files和delete files,但表数据改变。比如overwrite操作
  • delete:添加delete files

2.1 Manifest List

manifest list也是一个data file,使用Iceberg的表format、schemas、column projection列投影。manifest list各字段含义如下:

v1v2Field id, nameTypeDescription
requiredrequired500 manifest_pathstringmanifest file的Path
requiredrequired501 manifest_lengthlongmanifest file的长度
requiredrequired502 partition_spec_idintpartition spec ID
空白required517 contentint,含义: 0: data, 1: deletesmanifest file对应的文件类型,date files或delete files
空白required515 sequence_numberlongmanifest file对应的sequence number
空白required516 min_sequence_numberlongmanifest file对应的data files或delete files的最小sequence number
requiredrequired503 added_snapshot_idlongmanifest file对应的snapshot id
optionalrequired504 added_files_countintmanifest file对应的data file数量
optionalrequired505 existing_files_countintmanifest file对应的data file数量 + delete file数量
optionalrequired506 deleted_files_countintmanifest file对应的delete file数量
optionalrequired512 added_rows_countlongmanifest file对应的所有data file的数据量
optionalrequired513 existing_rows_countlongmanifest file对应的所有data file的数据量 + 所有delete file的数据量
optionalrequired514 deleted_rows_countlongmanifest file对应的所有delete file的数据量
optionaloptional507 partitionslist<508: field_summary>manifest file对应的多个分区字段的汇总信息列表
optionaloptional519 key_metadatabinaryImplementation-specific key metadata for encryption

field_summary的数据类型为struct,各字段信息如下:

v1v2Field id, nameTypeDescription
requiredrequired509 contains_nullbooleanmanifest file对应的一个分区字段是否有一个null分区
optionaloptional518 contains_nanbooleanmanifest file对应的一个分区字段是否有一个NaN分区
optionaloptional510 lower_boundbytes [1]manifest file对应的一个分区字段的分区最小值(不含null和NaN),最小值被序列化为二进制,序列化方式参考:<Single-value serialization>
optionaloptional511 upper_boundbytes [1]manifest file对应的一个分区字段的分区最大值(不含null和NaN),最大值被序列化为二进制,序列化方式参考:<Single-value serialization>

2.2 Scan Planning

当读取data files的时候,同时满足下面条件的delete files也会被读取

对于position delete files:

  1. delete file的分区字段和分区值,和data file的一样
  2. delete file的sequence number小于等于data file的sequence number

对于等式值delete files:
3. delete file的分区字段和分区值,和data file的一样
4. delete file的sequence number小于data file的sequence number

2.3 Snapshot Reference快照引用

Iceberg的表有多个Snapshot,每个Snapshot都有一个tag作为label,而Branches可以看作是一个可变的Snapshot列表,main branch指向最新的Snapshot,而老的branch会因为Snapshot expire而被删除。下面是Snapshot Reference各字段的信息:

v1v2字段名称数据类型描述
requiredrequiredsnapshot-idlong一个reference的snapshot id
requiredrequiredtypestringreference的类型, 可选的参数为:tag、branch
optionaloptionalmin-snapshots-to-keepint只用于branch类型。当所有snapshot都过期时,默认最小保留多少个snapshot不过期。默认为表属性history.expire.min-snapshots-to-keep
optionaloptionalmax-snapshot-age-mslong只用于branch类型。最大的snapshot过期时间。默认为表属性history.expire.max-snapshot-age-ms
optionaloptionalmax-ref-age-mslong对于snapshot references(除了main branch,main branch永远不会过期),默认最大snapshot references过期时间。默认为表属性history.expire.max-ref-age-ms

有效的snapshot reference储存在table metadata的refs map中。序列化请参考:<JSON serialization>部分

3. Table Metadata

Table metadata是一种json格式的数据,其实就是vN.metadata.json文件。各字段信息如下,序列化请参考:<JSON serialization>部分

v1v2字段名称描述
requiredrequiredformat-version表规范的版本号,可选的值为1、2
optionalrequiredtable-uuid表创建时生成的UUID
requiredrequiredlocation表数据储存的HDFS根path,如hdfs://nnha/user/iceberg/warehouse/test_db/test_tb
空白requiredlast-sequence-number表的snapshot的最新sequence number
requiredrequiredlast-updated-ms表最后一次更新的时间
requiredrequiredlast-column-id表的最大column id,确保以后指定的column id不重复
required空白schema表当前的schema,在版本2被Deprecated,使用schemas和current-schema-id替换
optionalrequiredschemasschema列表,每个元素都包含schema-id
optionalrequiredcurrent-schema-id表当前schema的id
required空白partition-spec表当前的partition spec,只储存fields。只是用于writer进行数据分区。已经被Deprecated,使用partition-specs和default-spec-id进行替换
optionalrequiredpartition-specspartition spec列表
optionalrequireddefault-spec-idwrite默认使用的当前partition spec id
optionalrequiredlast-partition-id最大的分区字段id,确保以后指定的partition字段id不重复
optionaloptionalproperties储存定义的表属性
optionaloptionalcurrent-snapshot-id表当前snapshot id
optionaloptionalsnapshots一个有效的snapshot列表
optionaloptionalsnapshot-log一个列表,每个元素是包含两个key(timestamp和snapshot id)的map。列表中的元素有新的commit时在新的vN.metadata.json会新增,snpashot过期在新的vN.metadata.json则会删除
optionaloptionalmetadata-log一个列表,每个元素是包含两个key(timestamp和历史vN.metadata.json文件的path)的map
optionalrequiredsort-orderssort order列表
optionalrequireddefault-sort-order-id表默认sort order id. 用于write进行写数据排序
空白optionalrefs一个列表,每个元素的key是表的snapshot reference唯一名称,value是snapshot reference objects
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值