在 Databricks Runtime 18.1 及更高版本中提供,Parquet v2 使用高级编码、v2 数据页标头和时间戳来改进查询性能,并减少 Delta Lake 和 INT64 Apache Iceberg 表的存储。
Parquet v2 的工作原理
Parquet v2 引入了对减少存储并提高读取性能的数据文件格式的改进:
- 高级编码:与 Parquet v1 中使用的编码相比,整数列和字符串列使用具有更高效的压缩和解码 的新编码 。
- V2 数据页眉:页面级统计信息和索引可改进谓词下推和数据跳过,从而减少在查询时扫描的数据量。
-
INT64 时间戳:
INT64时间戳取代了旧INT96时间戳,改进了列统计信息,以及时间戳编码和压缩。
启用 Parquet v2
Azure Databricks自动将兼容的 Unity 目录托管表升级到 Parquet v2。 请参阅 自动升级。
若要手动启用 Parquet v2,请将 parquet.format.version 表属性设置为 2.12.0 使用表类型的相应前缀。 在手动启用之前,请查看 限制。
若要在现有表上启用 Parquet v2,请:
Delta Lake
ALTER TABLE <table_name> SET TBLPROPERTIES ('delta.parquet.format.version' = '2.12.0');
Iceberg
ALTER TABLE <table_name> SET TBLPROPERTIES ('iceberg.parquet.format.version' = '2.12.0');
在新表上启用 Parquet v2:
Delta Lake
CREATE TABLE <table_name> (...)
TBLPROPERTIES ('delta.parquet.format.version' = '2.12.0');
Iceberg
CREATE TABLE <table_name> (...)
USING iceberg
TBLPROPERTIES ('iceberg.parquet.format.version' = '2.12.0');
设置属性后,所有后续写入都使用 v2 编码。 Parquet v1 和 v2 文件可以共存在同一个表中。 不会自动重写现有数据文件。 对于 Delta Lake 表,若要将现有文件重写为 v2 格式,请在 Databricks Runtime 18.2 及更高版本中使用 REORG TABLE:
REORG TABLE <table_name> APPLY (SET PARQUET (FORMAT_VERSION = '2.12.0'));
有关完整表 属性引用,请参阅表属性参考 。
回退到 Parquet v1
在 Databricks Runtime 18.2 及更高版本中,若要将单个表回滚到 v1 编码,请使用 REORG TABLE 选项运行 SET PARQUET:
REORG TABLE <table_name> APPLY (SET PARQUET (FORMAT_VERSION = '1.0.0'));
此命令使用 v1 编码重写所有数据文件,并将表属性重置 delta.parquet.format.version 为 1.0.0。
限制
Parquet v2 具有以下限制:
- 对于外部引擎而言,某些 Apache Iceberg 读取器可能不支持 Iceberg 表的 Parquet v2 格式。 在 Iceberg 表上启用 Parquet v2 之前,必须验证 Iceberg 读取器是否兼容。
- 对于 OpenSharing,在启用 Parquet v2 之前,请验证 OpenSharing 收件人的读取器客户端是否支持 Parquet v2 编码。
- 物化视图和流式表不会自动升级到 Parquet v2。 对于 Databricks Runtime 18.1 及以上版本中的这些表类型,可以手动启用 Parquet v2。