什么是 Lakehouse Federation

重要

此功能目前以公共预览版提供。

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

什么是 Lakehouse Federation?

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

Azure Databricks 使用 Unity Catalog 来管理查询联合。 可以使用 Pro 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.1(或更高版本)和共享或单用户访问模式。

  • SQL 仓库必须是专业版。

所需的权限:

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

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

创建连接

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

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

目录资源管理器

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

  2. 在左窗格中,展开“外部数据”菜单,然后选择“连接”。

  3. 单击“创建连接”。

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

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

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

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

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

  8. (可选)添加注释。

  9. 单击“创建”。

Sql

在笔记本或 Databricks 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 笔记本或 Databricks SQL 查询编辑器中的 CREATE FOREIGN CATALOG SQL 命令。

所需的权限:对元存储的 CREATE CATALOG 权限以及连接的所有权或对连接的 CREATE FOREIGN CATALOG 特权。

目录资源管理器

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

  2. 单击“创建目录”按钮。

  3. 在“创建新目录”对话框中,输入目录的名称,然后为“类型”选择“外部”。

  4. 选择针对要镜像为 Unity Catalog 目录数据库提供访问权限的连接

  5. 输入要镜像为目录的数据库的名称。

    该要求因数据源而异:

    • MySQL 使用两层命名空间,因此不需要数据库名称。
    • 若要连接到另一个 Databricks 工作区中的目录,请输入 Databricks 目录 名称,而不是数据库名称。
  6. 单击“创建”。

Sql

  1. 在笔记本或 Databricks 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>');
    

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

限制

  • 查询是只读的。

  • 使用 Databricks SQL 并发查询限制确定连接限制。 每个连接跨仓库没有限制。 请参阅专业和经典 SQL 仓库的排队和自动扩缩

  • 不支持名称在 Unity Catalog 中无效的表和架构,在创建外部目录时,Unity Catalog 会忽略这些表和架构。 例如,在 Unity Catalog 中,表名会转换为小写,这意味着查找必须使用小写名称。 请参阅 Unity Catalog 限制中的命名规则和限制的列表。

  • 对于每个引用的外表,Azure Databricks 都会在远程系统中安排一个子查询以从该表返回数据的子集,然后通过单个流将结果返回到一个 Azure Databricks 执行器任务。

  • 单用户访问模式仅适用于拥有连接的用户。