Schema
该Schema文件的版本从 0 开始计数,目前保留了所有版本的Schema文件。可能存在依赖旧Schema版本的旧文件,因此删除此类文件时应谨慎行事。
Schema 文件为 JSON 格式,其内容包括:
- 字段:数据字段列表,数据字段包含 ID、名称、类型,字段 ID 用于支持schema演变。
- 分区键:字段名称列表,表的分区定义,不可修改。
- 主键:字段名称列表,表的主键定义,不可修改。
举例
"version" : 3,
"id" : 0,
"fields" : [ {
"id" : 0,
"name" : "order_id",
"type" : "BIGINT NOT NULL"
}, {
"id" : 1,
"name" : "order_name",
"type" : "STRING"
}, {
"id" : 2,
"name" : "order_user_id",
"type" : "BIGINT"
}, {
"id" : 3,
"name" : "order_shop_id",
"type" : "BIGINT"
} ],
"highestFieldId" : 3,
"partitionKeys" : [ ],
"primaryKeys" : [ "order_id" ],
"options" : {
"bucket" : "5"
},
"comment" : "",
"timeMillis" : 1720496663041
}
兼容性
对于旧版本:
- 版本 1:如果没有设置桶键,则应将“bucket”(桶)选项设置为 1 。
- 版本 1 和 2:如果不存在 file.format 键,则应将 file.format -> orc 放入选项中。
数据列
DataField 表示表中的一列。
- id: 整数类型,列标识符,自动递增,用于表结构演变。
- name:字符串,列名。
- type: 数据类型方面,它与 SQL 中的字符串类型非常相似。
- description: 字符串。
更新Schema
更新Schema应当生成一个新的Schema文件。
└── default.db
└── my_table
├── schema
├── schema-0
├── schema-1
└── schema-2
该快照中提到了一个“模式”(schema)的相关内容。数值最大的模式文件通常就是最新的模式文件。
旧的模式文件不能直接删除,因为可能存在引用旧模式文件的旧数据文件。在读取表时,需要依靠它们来进行模式演变读取操作。