在另一个 Databricks 工作区中运行联合查询
本文介绍如何设置 Lakehouse Federation,以对另一个 Databricks 工作区中的 Databricks 数据运行联合查询。 若要详细了解 Lakehouse Federation,请参阅“什么是 Lakehouse Federation?”。
重要
Databricks-to-Databricks Lakehouse Federation 是一个很好的工具,用于对另一个 Databricks 工作区的 Hive 或 AWS Glue 元存储管理的数据运行查询。 对于大多数其他方案,其他 Azure Databricks 工作流更高效:
- 如果 Azure Databricks 工作区共享相同的 Unity Catalog 元存储,则可以使用标准 Unity Catalog 查询和数据治理工具来管理跨工作区查询。
- 如果希望以只读方式访问附加到其他 Unity Catalog 元存储的 Databricks 工作区中的数据,无论是否在 Azure Databricks 帐户中,增量共享都是更好的选择。
在这两种方案中,都无需设置 Lakehouse Federation。
若使用 Lakehouse Federation 连接到另一个工作区中的 Databricks 目录,必须在 Azure Databricks Unity Catalog 元存储中创建以下内容:
- Databricks 工作区中的群集或 SQL 仓库。
- 与群集或 SQL 仓库的连接。
- Unity Catalog 元存储中的外部目录,镜像可从群集或 SQL 仓库访问的其他 Databricks 目录,以便可以使用 Unity Catalog 查询语法和数据治理工具来管理 Azure Databricks 用户对数据的访问。
开始之前
工作区要求:
- 已为 Unity Catalog 启用工作区。
计算要求:
从 Databricks Runtime 群集或 SQL 仓库到目标数据库系统的网络连接。 请参阅 Lakehouse Federation 网络建议。
Azure Databricks 群集必须使用 Databricks Runtime 13.3 LTS(或更高版本)和共享或单用户访问模式。
SQL 仓库必须是专业版,并且必须使用 2023.40 或更高版本。
所需的权限:
- 若要创建连接,你必须是元存储管理员或对附加到工作区的 Unity Catalog 元存储具有
CREATE CONNECTION
权限的用户。 - 若要创建外部目录,必须对元存储具有
CREATE CATALOG
权限,并且是连接的所有者或对连接具有CREATE FOREIGN CATALOG
特权。
后面每个基于任务的部分都指定了其他权限要求。
在用于配置连接的 Azure Databricks 工作区中,还必须有一个活动群集或 SQL 仓库。
创建连接
连接指定用于访问外部数据库系统的路径和凭据。 若要创建连接,可以使用目录资源管理器,或者使用 Azure Databricks 笔记本或 Databricks SQL 查询编辑器中的 CREATE CONNECTION
SQL 命令。
注意
你还可以使用 Databricks REST API 或 Databricks CLI 来创建连接。 请参阅 POST /api/2.1/unity-catalog/connections 和 Unity Catalog 命令。
所需的权限:具有 CREATE CONNECTION
特权的元存储管理员或用户。
目录资源管理器
在 Azure Databricks 工作区中,单击 “目录”。
在“目录”窗格顶部,单击 “添加”图标,然后从菜单中选择“添加连接”。
也可在“快速访问”页中单击“外部数据 >”按钮,转到“连接”选项卡,然后单击“创建连接”。
输入用户友好的连接名称。
选择 Databricks 的“连接类型”。
输入其他 Databricks 实例的以下连接属性。
- 主机:工作区实例名称。 若要了解如何获取工作区实例名称,请参阅获取工作区对象的标识符。
- HTTP 路径:SQL 仓库的 HTTP 路径。 若要获取路径,请转到边栏中的“SQL > SQL 仓库”,选择 SQL 仓库,转到“连接详细信息”选项卡,然后复制 HTTP 路径的值。
- 个人访问令牌:允许访问目标工作区的 Azure Databricks 个人访问令牌。 若要了解如何获取令牌,请参阅 Azure Databricks 个人访问令牌身份验证。 对于连接,Databricks 建议对服务主体使用个人访问令牌。
(可选)单击“测试连接”以确认它是否正常工作。
(可选)添加注释。
单击“创建”。
SQL
在笔记本或 Databricks SQL 查询编辑器中运行以下命令,替换掉以下内容:
<connection-name>
:要创建的连接的用户友好名称。<workspace-instance>
:目标工作区实例。 若要了解如何获取工作区实例名称,请参阅获取工作区对象的标识符。<sql-warehouse-path>
:SQL 仓库的 HTTP 路径。 若要获取路径,请转到边栏中的“SQL > SQL 仓库”,选择 SQL 仓库,转到“连接详细信息”选项卡,然后复制 HTTP 路径的值。<personal-access-token>
:允许访问目标工作区的 Azure Databricks 个人访问令牌。 若要了解如何获取令牌,请参阅 Azure Databricks 个人访问令牌身份验证。 对于连接,Databricks 建议使用服务主体的个人访问令牌。
CREATE CONNECTION <connection-name> TYPE databricks
OPTIONS (
host '<workspace-instance>',
httpPath '<sql-warehouse-path>',
personalAccessToken '<personal-access-token>'
);
建议对凭据等敏感值使用 Azure Databricks 机密而不是纯文本字符串。 例如:
CREATE CONNECTION <connection-name> TYPE databricks
OPTIONS (
host '<workspace-instance>',
httpPath '<sql-warehouse-path>',
personalAccessToken secret ('<secret-scope>','<secret-key-password>')
)
有关设置机密的详细信息,请参阅机密管理。
创建外部目录
外部目录会镜像外部 Databricks 工作区中的目录,以便你可以查询和管理对该外部 Databricks 目录中数据的访问权限,就像它是你自己的工作环境中的目录一样。 若要创建外部目录,请使用与已定义的外部 Databricks 工作区的连接。
若要创建外部目录,可以使用目录资源管理器,或者使用 Azure Databricks 笔记本或 Databricks SQL 查询编辑器中的 CREATE FOREIGN CATALOG
SQL 命令。
注意
你还可以使用 Databricks REST API 或 Databricks CLI 来创建目录。 请参阅 POST /api/2.1/unity-catalog/catalogs 和 Unity Catalog 命令。
所需的权限:对元存储具有 CREATE CATALOG
权限,并且具有连接的所有权或对连接具有 CREATE FOREIGN CATALOG
权限。
目录资源管理器
在 Azure Databricks 工作区中,单击 “目录”以打开目录资源管理器。
在“目录”窗格顶部,单击 “添加”图标,然后从菜单中选择“添加目录”。
也可在“快速访问”页中单击“目录”按钮,然后单击“创建目录”按钮。
按照创建目录中的说明创建外部目录。
SQL
在笔记本或 Databricks SQL 编辑器中运行以下 SQL 命令。 括号中的项是可选的。 替换占位符值替:
<catalog-name>
:要创建的外部目录的名称。<connection-name>
:指定数据源、路径和访问凭据的连接对象。<external-catalog-name>
:要镜像的外部 Databricks 工作区中的目录的名称。
CREATE FOREIGN CATALOG [IF NOT EXISTS] <catalog-name> USING CONNECTION <connection-name>
OPTIONS (catalog '<external-catalog-name>');
支持的下推
所有计算均支持以下下推:
- 筛选器
- 投影
- 限制
- 函数:仅支持筛选表达式(字符串函数、数学函数、数据、时间和时间戳函数以及其他杂项函数,例如 Alias、Cast、SortOrder)。
Databricks Runtime 13.3 LTS 及更高版本和 SQL 仓库计算支持下列下推:
- 聚合
- 以下布尔运算符:=、<、<=、>、>=、<=>
- 以下数学函数(在禁用了 ANSI 时不受支持):+、-、*、%、/
- 以下各类运算符:^、|、~
- 排序,与限制一起使用时
不支持以下下推:
- 联接
- Windows 函数