配置 Unity Catalog 外部表

面向 Unity Catalog 的配置方法

Databricks Unity Catalog 是 Databricks 平台中的统一数据治理与协作功能,能够提供集中化的元数据管理、安全级别和数据访问控制。它支持跨云和工作区统一的数据存储、审计跟踪、细致的数据权限管理(列级与细粒度访问控制)以及支持分析工具和机器学习工作流的数据共享,是简化数据治理、实现跨团队协作的强大工具。

Delta 格式(Delta Lake)是由 Databricks 推出的开源存储格式,基于 Apache Parquet 构建,专为大规模数据工程和分析工作负载设计。它解决了传统数据湖的一些痛点,如数据一致性、事务支持和性能优化。Delta 格式支持 ACID 事务,提供数据版本控制(时光回溯)功能,同时兼容流式和批处理数据。

ProtonBase 可以通过外部表方式与 Unity Catalog 元数据对接,支持对 Delta 格式存储的数据湖数据实现加速访问。

安装扩展

安装extension,仅需要安装一次,如果已经安装过,可以忽略。

CREATE EXTENSION delta_fdw;

创建Unity Catalog外部服务器

CREATE SERVER <server_name> FOREIGN DATA WRAPPER delta_fdw
OPTIONS (
 unity_catalog_endpoint '<endpoint_url>',
 region 'region-name',
 catalog '<catalog_name>'
);
  • unity_catalog_endpoint, Unity Catalog 对外服务的 API
  • region, Unity Catalog 服务所在云 Region
  • catalog, 数据表格文件的根目录

针对不同的 Catalog,需要创建不同的 foreign server。

-- 示例
CREATE SERVER delta_oregon FOREIGN DATA WRAPPER delta_fdw OPTIONS (
        unity_catalog_endpoint 'https://dbc-xxx.cloud.databricks.com',
        region 'us-west-2',
        catalog 'main'
);

创建用户映射

为本地用户账号授予对应的对象存储的访问权限。

CREATE USER MAPPING FOR public SERVER delta_server
OPTIONS (
   		token 'token',
        access_id 'id',
        access_key 'key'
);

创建外表

导入 Databricks 中的delta表的元数据。

IMPORT FOREIGN SCHEMA remote_schema_name
    { LIMIT TO (table_name [, ...])
    | EXCEPT (table_name [, ...]) }
    FROM SERVER server_name
    INTO local_schema_name
    [ OPTIONS (option 'value' [, ...]) ];

其中 remote_schema_name 对应 Unity Catalog 中的 schema,table_name 对应 Unity Catalog 中的 table,server_name 对应上述定义的 foreign server(注,不同 Catalog 对应不同 foreign server)

-- 将 default schema 下的 test1 的元数据导入为外表
import foreign schema "default" LIMIT TO (test1) from server delta_server into public;
 
select * FROM test1;