什么是 Lakehouse Federation?

本文介绍 Lakehouse Federation,这是一个查询联合平台,支持使用 Azure Databricks 对多个外部数据源运行查询。 它还介绍了如何在 Unity Catalog 元存储中设置 Lakehouse Federation 连接和创建外部目录。

什么是 Lakehouse Federation?

Lakehouse Federation 是 Azure Databricks 的查询联合平台。 术语“查询联合”是指一系列功能,它们使用户和系统能够针对多个数据源运行查询,而无需将所有数据迁移到一个统一的系统。

Azure Databricks 使用 Unity Catalog 来管理查询联合。 可以使用 Pro SQL 仓库、无服务器 SQL 仓库和 Databricks Runtime 群集中包含的驱动程序来配置与常用数据库解决方案的只读连接。 Unity Catalog 的数据治理和数据世系工具可确保为 Azure Databricks 工作区中的用户进行的所有联合查询管理和审核数据访问。

为什么要使用 Lakehouse Federation?

Lakehouse 强调集中存储数据,以减少数据冗余和隔离。 你的组织可能在生产中拥有大量数据系统,并且你可能出于多种原因要在连接的系统中查询数据:

  • 特别报告。
  • 概念证明工作。
  • 新 ETL 管道或报表的探索阶段。
  • 在增量迁移期间支持工作负载。

在这些方案中,查询联合可以更快地获得见解,因为可以就地查询数据并避免复杂且耗时的 ETL 处理。

Lakehouse Federation 适用于以下用例:

  • 不想将数据引入 Azure Databricks。
  • 你希望查询能够利用外部数据库系统中的计算。
  • 你希望获得 Unity Catalog 接口和数据治理的优势,包括精细访问控制、数据世系和搜索。

Lakehouse Federation 设置概述

若要使用 Lakehouse Federation 使数据集可用于只读查询,请创建以下内容:

  • 连接,Unity Catalog 中的安全对象,指定用于访问外部数据库系统的路径和凭据。
  • 外部目录,Unity Catalog 中的安全对象,可镜像外部数据系统中的数据库,使你能够在 Azure Databricks 工作区中对该数据系统执行只读查询,使用 Unity Catalog 管理访问权限。

支持的数据源

Lakehouse Federation 支持连接到以下数据库类型:

连接要求

工作区要求:

  • 已为 Unity Catalog 启用工作区。

计算要求:

  • 从 Databricks Runtime 群集或 SQL 仓库到目标数据库系统的网络连接。 请参阅 Lakehouse Federation 网络建议
  • Azure Databricks 群集必须使用 Databricks Runtime 13.3 LTS(或更高版本)和共享或单用户访问模式。
  • SQL 仓库必须是 Pro 或无服务器仓库,且必须使用 2023.40 或更高版本。

所需的权限:

  • 若要创建连接,你必须是元存储管理员或对附加到工作区的 Unity Catalog 元存储具有 CREATE CONNECTION 权限的用户。
  • 若要创建外部目录,必须对元存储具有 CREATE CATALOG 权限,并且是连接的所有者或对连接具有 CREATE FOREIGN CATALOG 特权。

后面的每个基于任务的部分中都指定了其他权限要求。

创建连接

连接指定用于访问外部数据库系统的路径和凭据。 若要创建连接,可以使用目录资源管理器,或者使用 Azure Databricks 笔记本或 Databricks SQL 查询编辑器中的 CREATE CONNECTION SQL 命令。

注意

你还可以使用 Databricks REST API 或 Databricks CLI 来创建连接。 请参阅 POST /api/2.1/unity-catalog/connectionsUnity Catalog 命令

所需的权限:具有 CREATE CONNECTION 特权的元存储管理员或用户。

目录资源管理器

  1. 在 Azure Databricks 工作区中,单击 “目录”图标目录”。

  2. 在“目录”窗格顶部,单击 添加或加号图标“添加”图标,然后从菜单中选择“添加连接”

    也可在“快速访问”页中单击“外部数据 >”按钮,转到“连接”选项卡,然后单击“创建连接”

  3. 输入用户友好的连接名称

  4. 选择“连接类型”(数据库提供程序,例如 MySQL 或 PostgreSQL)。

  5. 输入连接属性(例如主机信息、路径和访问凭据)。

    每种连接类型所需的连接信息各不相同。 请参阅左侧目录中列出的适用于你的连接类型的文章。

  6. (可选)单击“测试连接”以确认它是否正常工作。

  7. (可选)添加注释。

  8. 单击“创建”。

SQL

在笔记本或 SQL 查询编辑器中运行以下命令。 此示例适用于与 PostgreSQL 数据库的连接。 选项因连接类型而异。 请参阅左侧目录中列出的适用于你的连接类型的文章。

CREATE CONNECTION <connection-name> TYPE postgresql
OPTIONS (
  host '<hostname>',
  port '<port>',
  user '<user>',
  password '<password>'
);

建议对凭据等敏感值使用 Azure Databricks 机密而不是纯文本字符串。 例如:

CREATE CONNECTION <connection-name> TYPE postgresql
OPTIONS (
  host '<hostname>',
  port '<port>',
  user secret ('<secret-scope>','<secret-key-user>'),
  password secret ('<secret-scope>','<secret-key-password>')
)

有关设置机密的详细信息,请参阅机密管理

有关管理现有连接的信息,请参阅管理 Lakehouse Federation 的连接

创建外部目录

外部目录镜像外部数据系统中的数据库,以便可以使用 Azure Databricks 和 Unity Catalog 查询和管理对该数据库中数据的访问。 若要创建外部目录,请使用与已定义的数据源的连接。

若要创建外部目录,可以使用目录资源管理器,或者使用 Azure Databricks 笔记本或 SQL 查询编辑器中的 CREATE FOREIGN CATALOG SQL 命令。

注意

还可以使用 Unity Catalog API。 请参阅 Azure Databricks 参考文档

每次与目录交互时,外部目录元数据都会同步到 Unity Catalog 中。 有关 Unity Catalog 和数据源之间的数据类型映射,请查看每个数据源的文档数据类型映射部分。

所需的权限:对元存储具有 CREATE CATALOG 权限,并且具有连接的所有权或对连接具有 CREATE FOREIGN CATALOG 权限。

目录资源管理器

  1. 在 Azure Databricks 工作区中,单击 “目录”图标“目录”以打开目录资源管理器。

  2. 在“目录”窗格顶部,单击 添加或加号图标“添加”图标,然后从菜单中选择“添加目录”

    也可在“快速访问”页中单击“目录”按钮,然后单击“创建目录”按钮。

  3. 按照创建目录中的说明创建外部目录。

SQL

在笔记本或 SQL 查询编辑器中运行以下 SQL 命令。 括号中的项是可选的。 替换占位符值替:

  • <catalog-name>:Azure Databricks 中目录的名称。
  • <connection-name>:指定数据源、路径和访问凭据的连接对象
  • <database-name>:要在 Azure Databricks 中镜像为目录的数据库的名称。 对于使用双层命名空间的 MySQL 不是必需的。
  • <external-catalog-name>:仅限 Databricks 至 Databricks:要镜像的外部 Databricks 工作区中的目录的名称。 请参阅创建外部目录
CREATE FOREIGN CATALOG [IF NOT EXISTS] <catalog-name> USING CONNECTION <connection-name>
OPTIONS (database '<database-name>');

有关管理和使用外部目录的信息,请参阅管理和使用外部目录

Lakehouse 联合和具体化视图

创建具体化视图时,Databricks 建议使用 Lakehouse Federation 加载外部数据。 请参阅 在 Databricks SQL 中使用具体化视图

使用 Lakehouse 联合身份验证时,用户可以引用联合数据,如下所示:

CREATE MATERIALIZED VIEW xyz AS SELECT * FROM federated_catalog.federated_schema.federated_table;

查看系统生成的联合查询

Lakehouse Federation 会将 Databricks SQL 语句转换为可向下推送到联合数据源的语句。 若要查看生成的 SQL 语句,请单击查询配置文件图形视图中的外数据源扫描节点,或运行 EXPLAIN FORMATTED SQL 语句。 有关覆盖范围,请参阅每个数据源文档的“支持的下推”部分。

限制

  • 查询是只读的。
  • 使用 Databricks SQL 并发查询限制确定连接限制。 每个连接跨仓库没有限制。 请参阅专业和经典 SQL 仓库的排队和自动扩缩
  • 不支持名称在 Unity Catalog 中无效的表和架构,在创建外部目录时,Unity Catalog 会忽略这些表和架构。 请参阅限制中的命名规则和限制列表。
  • 在 Unity Catalog 中,表名和架构名称都转换为小写。 查找也必须使用小写名称。 如果存在小写名称重复的表或架构,则仅将其中一个表或架构导入到外部目录中。
  • 对于每个引用的外表,Azure Databricks 都会在远程系统中安排一个子查询以从该表返回数据的子集,然后通过单个流将结果返回到一个 Azure Databricks 执行器任务。 如果结果集太大,执行程序可能会耗尽内存。
  • 单用户访问模式仅适用于拥有连接的用户。
  • Lakehouse Federation 无法将外表与 Azure Synapse 连接或 Redshift 连接的区分大小写的标识符联合。

资源配额

Azure Databricks 对所有 Unity Catalog 安全对象强制实施资源配额。 这些配额列在资源限制中。 外部目录及其包含的全部对象都包含在总配额使用量中。

如果预期超过这些资源限制,请联系 Azure Databricks 帐户团队。

你可以使用 Unity Catalog 资源配额 API 来监视配额使用情况。 请参阅监视 Unity Catalog 资源配额的使用情况

其他资源