以增量方式将 Parquet 和 Iceberg 表克隆到 Delta Lake
可以使用 Azure Databricks 克隆功能以增量方式将 Parquet 或 Iceberg 数据源中的数据转换为托管或外部的 Delta 表。
适用于 Parquet 和 Iceberg 的 Azure Databricks 克隆结合了用于克隆 Delta 表和将表转换为 Delta Lake 的功能。 本文介绍此功能的用例和限制并提供示例。
重要
此功能目前以公共预览版提供。
注意
此功能需要 Databricks Runtime 11.3 或更高版本。
何时使用克隆以增量方式引入 Parquet 或 Iceberg 数据
Azure Databricks 提供许多选项用于将数据引入湖屋。 Databricks 建议在以下情况下使用克隆引入 Parquet 或 Iceberg 数据:
注意
术语“源表”是指要克隆的表和数据文件,而“目标表”是指操作创建或更新的 Delta 表。
- 你正在执行从 Parquet 或 Iceberg 到 Delta Lake 的迁移,但需要继续使用源表。
- 你需要在目标表与接收追加、更新和删除操作的生产源表之间保持仅限引入的同步。
- 你想要为报告、机器学习或批处理 ETL 创建源数据的 ACID 合规快照。
克隆的语法是什么?
适用于 Parquet 和 Iceberg 的克隆使用的基本语法与用于克隆 Delta 表的语法相同,支持浅度克隆和深度克隆。 有关详细信息,请参阅克隆类型。
Databricks 建议对大多数工作负载使用增量克隆。 对 Parquet 和 Iceberg 的克隆支持使用 SQL 语法。
注意
适用于 Parquet 和 Iceberg 的克隆的要求和保证与克隆 Delta 表或转换为 Delta 表不同。 请参阅克隆 Parquet 和 Iceberg 表的要求和限制。
若要使用文件路径深度克隆 Parquet 或 Iceberg 表,请使用以下语法:
CREATE OR REPLACE TABLE <target-table-name> CLONE parquet.`/path/to/data`;
CREATE OR REPLACE TABLE <target-table-name> CLONE iceberg.`/path/to/data`;
若要使用文件路径浅度克隆 Parquet 或 Iceberg 表,请使用以下语法:
CREATE OR REPLACE TABLE <target-table-name> SHALLOW CLONE parquet.`/path/to/data`;
CREATE OR REPLACE TABLE <target-table-name> SHALLOW CLONE iceberg.`/path/to/data`;
还可为注册到元存储的 Parquet 表创建深度或浅度克隆,如以下示例所示:
CREATE OR REPLACE TABLE <target-table-name> CLONE <source-table-name>;
CREATE OR REPLACE TABLE <target-table-name> SHALLOW CLONE <source-table-name>;
有关克隆 Parquet 和 Iceberg 表的要求与限制
无论使用深度克隆还是浅度克隆,克隆发生后应用于目标表的更改都无法同步回到源表。 与克隆的增量同步是单向的,允许将源表的更改自动应用于目标 Delta 表。
将克隆用于 Parquet 和 Iceberg 表时,以下附加限制适用:
- 在克隆和使用表名来标识源表之前,必须将包含分区的 Parquet 表注册到某个目录(例如 Hive 元存储)。 不能对包含分区的 Parquet 表使用基于路径的克隆语法。
- 不能克隆经历过分区演变的 Iceberg 表。
- 不能克隆经历过更新、删除或合并操作的 Iceberg“读取时合并”表。
- 以下是使用截断列上定义的分区克隆 Iceberg 表的限制:
- 在 Databricks Runtime 12.2 LTS 及更低版本中,唯一支持的截断列类型是
string
。 - 在 Databricks Runtime 13.3 LTS 及更高版本中,可以使用
string
、long
或int
类型的截断列。 - Azure Databricks 不支持使用
decimal
类型的截断列。
- 在 Databricks Runtime 12.2 LTS 及更低版本中,唯一支持的截断列类型是
- 增量克隆会同步源表中的架构更改和属性,从本地写入克隆表的所有架构更改和数据文件将被替代。
- Unity Catalog 不支持浅表克隆。
- 定义路径时不能使用 glob 模式。
注意
在 Databricks Runtime 11.3 中,此操作不会收集文件级统计信息。 因此,目标表无法受益于 Delta Lake 数据跳过。 Databricks Runtime 12.2 LTS 及更高版本中会收集文件级统计信息。