转换为 Delta Lake

CONVERT TO DELTA SQL 命令将 Parquet 和 Iceberg 表一次性转换为 Delta Lake 表。 有关将 Parquet 或 Iceberg 表增量转换为 Delta Lake 的信息,请参阅以增量方式将 Parquet 和 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 及更高版本中,可以使用 stringlongint 类型的截断列。
    • Azure Databricks 不支持使用 decimal 类型的截断列。

只要对存储位置拥有写入访问权限,你就可以将 Parquet 数据文件的目录转换为 Delta Lake 表。 有关使用 Unity Catalog 配置访问权限的信息,请参阅使用 Unity Catalog 连接到云对象存储

注意

Unity Catalog 需要 Azure Data Lake Storage Gen2。

CONVERT TO DELTA parquet.`abfss://container@storageAccount.dfs.core.windows.net/parquet-data`;

CONVERT TO DELTA iceberg.`abfss://container@storageAccount.dfs.core.windows.net/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 Catalog 外部表,请参阅使用升级向导将单个 Hive 表升级为 Unity Catalog 外部表

将外部 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);