Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
本页介绍如何设置 Lakehouse 联邦,以对未由 Azure Databricks 管理的 Oracle 数据运行联邦查询。 若要了解有关 Lakehouse 联合的更多信息,请参阅 什么是 Lakehouse 联合?
若要使用 Lakehouse Federation 连接到 Oracle 数据库,必须在 Azure Databricks Unity Catalog 元存储中创建以下内容:
- 与 Oracle 数据库的连接。
- 一个外部目录,它镜像 Unity Catalog 中的 Oracle 数据库,以便你可使用 Unity Catalog 查询语法和数据治理工具来管理 Azure Databricks 用户对数据库的访问。
局限性
Lakehouse 联邦仅支持与 Oracle 云的传输层安全协议(TLS)连接。 与其他 Oracle 数据库的连接使用本机网络加密 (NNE)。
连接到版本为 11.2.0.3.0 及更高的实例时存在一个已知问题,这些实例没有时区值
Etc/UTC
(错误:ORA-01882: timezone region not found
)。- 解决方法:使用
spark.databricks.connector.oracle.timezoneAsRegion
的配置,这直接映射到oracle.jdbc.timezoneAsRegion
JDBC 驱动程序属性。 - 警告:解决方法可能会导致错误的夏令时(DST)行为。 如需帮助,请联系 Oracle 支持人员。
- 解决方法:使用
许可证
Oracle 驱动程序和其他必要的 Oracle JAR 文件受无点击许可协议 FDHUT 的约束。
开始之前
在开始之前,请确认你满足本部分中的要求。
Databricks 要求
工作区要求:
- 已为 Unity Catalog 启用工作区。
计算要求:
- 涵盖计算资源到目标数据库系统的网络连接。 请参阅 Lakehouse Federation 网络建议。
- Azure Databricks 计算必须使用 Databricks Runtime 16.1 或更高版本以及 标准 或 专用 访问模式。
- SQL 仓库必须是专业仓库,并且必须使用 2024.50 或更高版本。
所需的权限:
- 若要创建连接,你必须是元存储管理员或对附加到工作区的 Unity Catalog 元存储具有
CREATE CONNECTION
权限的用户。 - 若要创建外部目录,必须对元存储具有
CREATE CATALOG
权限,并且是连接的所有者或对连接具有CREATE FOREIGN CATALOG
特权。
后面每个基于任务的部分都指定了其他权限要求。
Oracle 要求
对于使用本机网络加密的连接,您必须启用至少ACCEPTED
级别的服务器端NNE。 请参阅 Oracle 文档中 的“配置网络数据加密 ”。 这不适用于改用 TLS 的 Oracle 云连接。
创建 Azure Databricks 连接
连接指定用于访问外部数据库系统的路径和凭据。 若要创建连接,可以使用目录资源管理器,或者使用 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 工作区中,单击
目录。
在左窗格中,展开“外部数据”菜单,然后选择“连接”。
单击“创建连接”。
在“设置连接”向导的“连接基本信息”页面上,输入用户友好的连接名称。
选择 Oracle 的连接类型。
(可选)添加注释。
单击 “下一步” 。
在 “身份验证 ”页上,为 Oracle 实例输入以下内容:
-
主机:例如
oracle-demo.123456.rds.amazonaws.com
-
端口:例如
1521
-
用户:例如
oracle_user
-
密码:例如
password123
-
加密协议:
Native Network Encryption
(默认)或Transport Layer Security
-
主机:例如
单击“创建连接”。
在 “目录基本信息 ”页上,输入外国目录的名称。 外部目录镜像外部数据系统中的数据库,以便可以使用 Azure Databricks 和 Unity Catalog 查询和管理对该数据库中数据的访问。
(可选)单击“测试连接”以确认它是否正常工作。
单击“创建目录”。
在 “访问 ”页上,选择用户可以在其中访问所创建的目录的工作区。 您可以选择所有工作区均具有访问权限,或单击分配到工作区,选择工作区,然后单击分配。
更改能够管理对目录中所有对象的访问的 所有者 。 开始在文本框中键入主体,然后单击返回的结果中的主体。
授予对目录的“特权”。 单击“授权”:
指定将有权访问目录中对象的 主体 。 开始在文本框中键入主体,然后单击返回的结果中的主体。
选择“特权预设”以对每个主体授权。 默认情况下,向所有帐户用户授予
BROWSE
。- 从下拉菜单中选择 “数据读取者 ”,以授予
read
对目录中对象的权限。 - 从下拉菜单中选择 “数据编辑器”,以向
read
和modify
授予目录中对象的权限。 - 手动选择要授予的权限。
- 从下拉菜单中选择 “数据读取者 ”,以授予
单击授权。
单击 “下一步” 。
在“元数据”页上,指定标记键值对。 有关详细信息,请参阅 将标记应用于 Unity 目录安全对象。
(可选)添加注释。
单击“ 保存”。
SQL
在笔记本或 Databricks SQL 查询编辑器中运行以下命令:
CREATE CONNECTION <connection-name> TYPE oracle
OPTIONS (
host '<hostname>',
port '<port>',
user '<user>',
password '<password>',
encryption_protocol '<protocol>' -- optional
);
Databricks 建议对凭据等敏感值使用 Azure Databricks 机密而不是纯文本字符串。 例如:
CREATE CONNECTION <connection-name> TYPE oracle
OPTIONS (
host '<hostname>',
port '<port>',
user secret ('<secret-scope>','<secret-key-user>'),
password secret ('<secret-scope>','<secret-key-password>'),
encryption_protocol '<protocol>' -- optional
)
如果必须在笔记本 SQL 命令中使用纯文本字符串,请避免通过使用 $
将特殊字符(如 \
)进行转义来截断字符串。 例如:\$
。
有关设置机密的详细信息,请参阅机密管理。
创建外部目录
注意
如果使用 UI 创建与数据源的连接,则包含外部目录创建,你可以跳过此步骤。
外部目录镜像外部数据系统中的数据库,以便可以使用 Azure Databricks 和 Unity Catalog 查询和管理对该数据库中数据的访问。 若要创建外部目录,请使用与已定义的数据源的连接。
要创建外部目录,可以使用目录资源管理器,或在 Azure 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
在笔记本或 SQL 查询编辑器中运行以下 SQL 命令。 括号中的项是可选的。 替换占位符值替:
-
<catalog-name>
:Azure Databricks 中目录的名称。 -
<connection-name>
:指定数据源、路径和访问凭据的连接对象。 -
<service-name>
:要在 Azure Databricks 中镜像为目录的服务名称。
CREATE FOREIGN CATALOG [IF NOT EXISTS] <catalog-name> USING CONNECTION <connection-name>
OPTIONS (service_name '<service-name>');
支持的下推
支持以下下推:
- 筛选器
- 投影
- 限制
- 聚合
- 抵消
- 强制转换
- Contains、Startswith、Endswith
数据类型映射
从 Oracle 读取到 Spark 时,数据类型映射如下所示:
Oracle 类型 | Spark 类型 |
---|---|
TIMESTAMP WITH TIMEZONE、TIMESTAMP WITH LOCAL TIMEZONE | 时间戳类型 |
DATE、TIMESTAMP | 时间戳类型/时间戳NTZ类型* |
NUMBER、FLOAT | DecimalType** |
BINARY_FLOAT | 浮点类型 |
二进制双精度 | DoubleType |
CHAR、NCHAR、VARCHAR2、NVARCHAR2 | 字符串类型 |
* DATE 和 TIMESTAMP 在 spark.sql.timestampType = TIMESTAMP_NTZ
TimestampNTZType,则会映射到 TimestampNTZType。
** 不指定精度的 NUMBER 将映射到 DecimalType(38, 10),因为 Spark 中不支持纯浮点十进制。