CONVERT TO DELTA SQL 命令将 Parquet 和 Apache Iceberg 表一次性转换为 Delta Lake 表。 有关 Parquet 或 Iceberg 表到 Delta Lake 的增量转换,请参阅 增量克隆 Parquet 和 Apache Iceberg 表到 Delta Lake。
Unity Catalog 支持针对存储在 Unity Catalog 管理的外部位置的 Parquet 和 Iceberg 表执行 CONVERT TO DELTA SQL 命令。
可以在 Unity Catalog 中将现有 Parquet 数据文件配置为外部表,然后将其转换为 Delta Lake,从而解锁 Databricks 湖屋的所有功能。
有关技术文档,请参阅转换到 Delta。
将位于一个外部位置中的 Parquet 或 Iceberg 文件目录转换为 Delta Lake
注意
- 转换 Iceberg 表的功能目前处于公共预览版阶段。
- Databricks Runtime 10.4 LTS 和更高版本支持转换 Iceberg 表。
- 不支持转换 Iceberg 元存储表。
- 不支持转换经历过分区演变的 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 及以下版本中,唯一支持的截断列类型是
只要对存储位置拥有写入访问权限,你就可以将 Parquet 数据文件的目录转换为 Delta Lake 表。 有关使用 Unity 目录配置访问权限的信息,请参阅 使用 Unity 目录连接到云对象存储。
注意
Unity 目录需要 Azure Data Lake Storage。
CONVERT TO DELTA parquet.`abfss://container@storageAccount.dfs.core.chinacloudapi.cn/parquet-data`;
CONVERT TO DELTA iceberg.`abfss://container@storageAccount.dfs.core.chinacloudapi.cn/iceberg-data`;
若要将转换后的表作为外部表加载到 Unity Catalog,则需要具有外部位置的 CREATE EXTERNAL TABLE 权限。
注意
对于 Databricks Runtime 11.3 LTS 及更高版本,CONVERT TO DELTA 会自动推断注册到 Hive 元数据库的表的分区信息。 你必须为 Unity Catalog 外部表提供分区信息。
在 Unity Catalog 中将托管表和外部表转换为 Delta Lake
CONVERT TO DELTA 语法只能用于创建 Unity Catalog 外部表。 使用 CTAS 语句,将旧版 Hive 元数据存储托管的 Parquet 表直接转换为 Unity Catalog 托管的 Delta Lake 表,请参阅使用 CREATE TABLE AS SELECT 将 Hive 表升级为 Unity Catalog 托管表。
若要将外部 Parquet 表升级到 Unity 目录外部表,请参阅 使用升级向导将架构或表从 Hive 元存储升级到 Unity 目录外部表。
将外部 Parquet 表注册到 Unity Catalog 后,即可将其转换为外部 Delta Lake 表。 如果已对 Parquet 表进行分区处理,则必须提供分区信息。
CONVERT TO DELTA catalog_name.database_name.table_name;
CONVERT TO DELTA catalog_name.database_name.table_name PARTITIONED BY (date_updated DATE);