Parquet v2

在 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.version1.0.0

有关完整语法,请参阅 REORG TABLE

限制

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。