# Databricks

您可以使用 Databricks 作为数据管道或复制任务中的目标数据平台。在数据管道中，可以在目标平台上执行各种 ELT 操作，包括存储数据、转换数据、创建数据集市和注册数据。另一方面，复制任务涉及将数据直接从源系统复制到具有基本转换功能的目标系统，但不支持 ELT 操作。

将 Databricks 设定为目标涉及以下方面：

* [满足先决条件](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/TargetConnections/databricks-target.htm#Prerequi2)
* 正在配置到云暂存区域的连接。如果您正在[注册现有数据](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Onboarding/Registering-data.htm)，则不需要执行此操作。
* 配置连接，指向 Databricks

信息注释仅 SQL Warehouse 群集支持

## 设置云暂存区

使用 Databricks Target 连接器时，还需要定义一个云暂存区，在应用和存储之前，数据和更改将暂存在该区域。支持以下存储平台：

* [Amazon S3](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/TargetConnections/aws-s3-target.htm)

* [Azure Data Lake Storage](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/TargetConnections/adls-target.htm)

* [Google Cloud Storage](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/TargetConnections/google-storage-target.htm)

信息注释如果您正在[注册现有数据](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Onboarding/Registering-data.htm)，则无需设置云暂存区。

## 配置到 Databricks 的连接

提供了暂存设置后，请执行以下操作：

1. 在连接中，单击创建连接。

2. 选择 Databricks目标连接器，然后提供以下设置：

### 数据目标

#### 数据网关

信息注释此字段不适用于 Qlik Talend Cloud Starter 订阅，因为此订阅层不支持 数据移动网关。

只有当目标数据库无法从 Qlik Cloud 访问时（例如，如果它位于或虚拟专用云中），才需要 数据移动网关，并且只能使用私有链接访问。如果是这种情况，请选择要通过其访问目标数据库的 数据移动网关。

根据您的使用情况，这将和从数据源移动数据时部署的 数据移动网关 相同，或者与之不同。

有关 数据移动网关 用例的信息，请参阅 [什么时候需要 数据移动网关？](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/Gateways/replication-gateway.htm#top) 和 [常见用例](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/Gateways/replication-gateway.htm#Common)。

如果可以从 Qlik Cloud 直接访问目标数据库，请选择无。

信息注释通过 数据移动网关 访问目标数据库时，还需要在 数据移动网关 计算机上安装相应的驱动程序。有关详细信息，请参阅下文的[驱动程序设置](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/TargetConnections/databricks-target.htm#Driver)。

### 连接属性

* 主机：Databricks 工作区的主机名。
* 端口：访问工作区的端口。
* HTTP 路径：指向正在使用的群集的路径。

### 身份验证

* 身份验证方法 - 选择以下其中一种：

  * OAuth： 提供以下信息：

    信息注释

    OAuth 身份验证前提条件：

    * 确保您的 Databricks 数据库已配置为使用 OAuth。有关说明，请参阅供应商的在线帮助。
    * 如果使用 数据移动网关 访问数据库，则需要 数据移动网关 2024.11.30 或更高版本。

    * 客户端 ID： 应用程序的客户端 ID。

    * 客户端密钥： 应用程序的客户端密钥。请注意，如果编辑连接，客户端密钥将被删除，作为一种保护措施，您需要重新输入。

  * 个人访问令牌： 在令牌字段中，输入您访问工作区的个人令牌。

### 目录属性

单击加载目录以加载可用的目录，然后选择一个目录。如果您的环境没有配置任何目录，请选择 hive\_metastore，这是默认目录。

信息注释

您需要通过在 Databricks 中定义外部位置来允许数据任务访问外部（非托管）表。有关指南，请参阅：

https://docs.databricks.com/data-governance/unity-catalog/manage-external-locations-and-credentials.html#manage-permissions-for-an-external-location

### 内部属性

内部属性用于特殊用例，因此不会在对话框中公开。只有在 Qlik 支持部门的指示下，您才应该使用它们。

使用字段右侧的 the Create new icon 和 the Cancel icon 按钮可以根据需要添加或删除特性。

### 名称

连接的显示名称。

## 先决条件

### 一般权限

* Qlik Talend Data Integration 服务器计算机上的时间必须准确。

* Databricks 表权限：Qlik Talend Data Integration 需要对 Databrick 表执行以下操作的权限：CREATE、DROP、TRUNCATE、DESCRIBE 和 ALTER 表。

* 在 ADLS Gen2 文件系统的访问控制 (IAM) 设置中，将“存储 Blob 数据贡献者”角色分配给 Qlik Talend Data Integration（AD 应用程序 ID）。角色可能需要几分钟才能生效。

* 为了 Qlik Talend Data Integration 通过 ODBC 连接到 Databricks 群集，用户必须在其 Databrick 帐户中被授予“可以连接到”权限。

* 访问 Databricks 需要有效的安全令牌。在端点设置中配置 Databricks ODBC 访问字段时，应指定令牌。

* 使用 Microsoft Azure Data Lake Storage (ADLS) Gen2 配置新群集时，必须将以下行添加到“Spark Config”部分。

  `spark.hadoop.hive.server2.enable.doAs false`

* 为了能够从 Databricks 集群访问存储目录，用户需要为该存储帐户及其密钥添加一个配置（在 Spark Config 中）。

  示例：

  fs.azure.account.key.&lt;storage-account-name&gt;.dfs.core.windows.net &lt;storage-account-access-key&gt;

  有关详细信息，请参阅 Databricks 联机帮助：https://docs.databricks.com/clusters/configure.html#spark-configuration

* 最佳做法是*不*要使用 Databricks 数据库的根位置 (/Usr/Hive/Warehouse/)，因为这样做可能会影响性能。

### 存储访问权限

必须配置 Databricks SQL 计算以访问云存储。有关说明，请参阅供应商的在线帮助。

### 驱动程序设置

只有通过 数据移动网关 访问数据库时才需要驱动程序。在这种情况下，您需要在 数据移动网关 计算机上安装驱动程序。

您可以使用驱动程序安装实用程序（推荐）安装 driver 或手动安装。只有在您遇到驱动程序安装实用程序发生问题的少见情况下，才应尝试手动安装。

#### 使用驱动程序安装实用程序安装驱动程序

本部分介绍如何安装所需的 driver。这个过程包括运行一个脚本，该脚本将自动下载、安装和配置所需的 driver。您还可以根据需要运行脚本来更新和卸载 driver。

准备安装

* 请确保在 数据移动 网关服务器上安装了 Python 3.6 或更高版本。

  Python 预装在大多数 Linux 发行版上。您可以通过运行以下命令来检查系统上安装了哪个 Python 版本。

  python3 --version

安装 driver

下载并安装 driver ：

1. 停止 数据移动网关 服务：

   sudo systemctl stop repagent

2. 可选择确认服务已停止：

   sudo systemctl status repagent

   状态应如下所示：

   Active: inactive (dead) since &lt;timestamp&gt; ago

3. 在 数据移动 网关计算机上，将工作目录更改为：

   opt/qlik/gateway/movement/drivers/bin

4. 然后运行以下命令：

   语法：

   ./install databricks

   如果无法下载 driver（由于访问限制或技术问题），将显示一条消息，为您指示在 数据移动 网关机器上下载 driver 的位置和复制驱动程序的位置。完成此操作后，请再次运行 install databricks 命令。

   否则，将显示 driver 的 EULA。

5. 执行以下选项之一：

   * 重复按 [Enter] 可在 EULA 中缓慢滚动。
   * 重复按空格键可快速滚动 EULA。
   * 按 q 退出许可证文本并显示 EULA 接受选项。

6. 执行以下选项之一：

   * 键入 "y" 并按 [Enter] 接受 EULA 并开始安装。

   * 键入 "n" 并按 [Enter] 拒绝 EULA 并退出安装。

   * 键入“v”并按 [Enter] 以再次查看 EULA。

   将会安装 driver。

7. 等待安装完成（以“完成！”指示），然后启动 数据移动网关 服务：

   sudo systemctl start repagent

8. 可选择确认服务已启动：

   sudo systemctl status repagent

   状态应如下所示：

   Active: active (running) since &lt;timestamp&gt; ago

更新 driver

如果要在安装提供的 driver 之前卸载以前版本的 driver，请运行 update 命令。

下载并更新 driver：

1. 停止 数据移动网关 服务：

   sudo systemctl stop repagent

2. 可选择确认服务已停止：

   sudo systemctl status repagent

   状态应如下所示：

   Active: inactive (dead) since &lt;timestamp&gt; ago

3. 在 数据移动 网关计算机上，将工作目录更改为：

   opt/qlik/gateway/movement/drivers/bin

4. 然后运行以下命令：

   语法：

   ./update databricks

   如果无法下载 driver（由于访问限制或技术问题），将显示一条消息，为您指示在 数据移动 网关机器上下载 driver 的位置和复制驱动程序的位置。完成此操作后，请再次运行 update databricks 命令。

   否则，将显示 driver 的 EULA。

5. 执行以下选项之一：

   * 重复按 [Enter] 可在 EULA 中缓慢滚动。
   * 重复按空格键可快速滚动 EULA。
   * 按 q 退出许可证文本并显示 EULA 接受选项。

6. 执行以下选项之一：

   * 键入 "y" 并按 [Enter] 接受 EULA 并开始安装。
   * 键入 "n" 并按 [Enter] 拒绝 EULA 并退出安装。
   * 键入“v”并按 [Enter] 可从头开始查看 EULA。

   将卸载旧的 driver，并安装新的 driver。

7. 等待安装完成（以“完成！”指示），然后启动 数据移动网关 服务：

   sudo systemctl start repagent

8. 可选择确认服务已启动：

   sudo systemctl status repagent

   状态应如下所示：

   Active: active (running) since &lt;timestamp&gt; ago

卸载 driver

如果要卸载 driver，请运行 uninstall 命令。

卸载 driver：

1. 停止所有配置为使用此连接器的任务。

2. 在 数据移动 网关计算机上，将工作目录更改为：

   opt/qlik/gateway/movement/drivers/bin

3. 然后运行以下命令：

   语法：

   ./uninstall databricks

   将卸载 driver。

#### 手动安装驱动程序

只有在自动驱动程序安装未成功完成的情况下，才应尝试手动安装 driver。

安装 ODBC 驱动程序

安装 数据移动网关 后，下载 SimbaSparkODBC-&lt;version&gt;-LinuxRPM-64bit.zip 文件。您可以在此路径下面找到受支持版本的直接下载链接：binary-artifacts in /opt/qlik/gateway/movement/drivers/manifests/databricks.yaml。下载完成后，将文件复制到 数据移动网关 计算机上。

1. 停止 数据移动网关 服务：

   sudo systemctl stop repagent

2. 可选择确认服务已停止：

   sudo systemctl status repagent

   状态应如下所示：

   Active: inactive (dead) since &lt;timestamp&gt; ago

3. 在 数据移动网关 计算机上安装驱动程序。

4. 安装后，确保以下部分出现在 /etc/odbcinst.ini 文件中：

   ```
   [Databricks ODBC Driver]
   Driver=/opt/databricks/databricksodbc/lib/64/libdatabricksodbc64.so
   ```

5. 启动 数据移动网关 服务：

   sudo systemctl start repagent

6. 可选择确认服务已启动：

   sudo systemctl status repagent

   状态应如下所示：

   Active: active (running) since &lt;timestamp&gt; ago

安装 JDBC 驱动程序

1. 下载 databricks-jdbc-&lt;version&gt;.jar 文件。您可以在此路径下面找到受支持版本的直接下载链接：binary-artifacts in /opt/qlik/gateway/movement/drivers/manifests/databricks.yaml。下载完成后，将 JAR 文件复制到 数据移动网关 计算机上的以下文件夹。

   /opt/qlik/gateway/movement/qcs\_agents/qdi-db-commands/lib

2. 重新启动 数据移动网关 服务，并通过运行 [数据移动网关 服务命令](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/Gateways/dm-gateway-managing.htm#Restarti) 中所述的命令检查服务是否已启动

### 端口：

需要为出站通信打开防火墙端口 443。

## 数据类型

下表显示了使用 Qlik Cloud 时支持的 Databricks 数据类型以及自 Qlik Cloud 数据类型的默认映射。

本机数据类型信息将被保留，并显示在数据集视图的本机数据类型列中。如果列不可见，则需要打开数据集视图的列选择器，然后选择本机数据类型列。

支持的数据类型

| Qlik Cloud 数据类型 | Databricks 数据类型 |
| --- | --- |
| BOOLEAN | BOOLEAN |
| BYTES | VARCHAR（以字节计算的长度） |
| DATE | DATE |
| TIME | STRING |
| DATETIME | TIMESTAMP<br><br>精确度始终为 6，即使输入列使用的精确度低于 6。<br><br>如果输入列使用的精确度高于 6，可以保留全部精确度，考虑将列转换成另一种支持的类型，如 STRING。 |
| INT1 | TINYINT |
| INT2 | SMALLINT |
| INT4 | INT |
| INT8 | BIGINT |
| NUMERIC | DECIMAL（精确度、刻度） |
| REAL4 | FLOAT |
| REAL8 | DOUBLE |
| UINT1 | SMALLINT |
| UINT2 | INT |
| UINT4 | BIGINT |
| UINT8 | DECIMAL (20, 0) |
| STRING | VARCHAR（以字节计算的长度）<br><br>当列具有 JSON 子类型且 Databricks Runtime 版本为 15.4 LTS 或更高版本时，则：<br><br>VARIANT |
| WSTRING | VARCHAR（以字节计算的长度）<br><br>当列具有 JSON 子类型且 Databricks Runtime 版本为 15.4 LTS 或更高版本时，则：<br><br>VARIANT |
| NCLOB | STRING<br><br>当列具有 JSON 子类型且 Databricks Runtime 版本为 15.4 LTS 或更高版本时，则：<br><br>VARIANT |
| CLOB | STRING<br><br>当列具有 JSON 子类型且 Databricks Runtime 版本为 15.4 LTS 或更高版本时，则：<br><br>VARIANT |
| BLOB | STRING |
| JSON | 变体<br><br>信息注释Databricks 支持将 VARIANT 数据类型作为公开预览版。 |

以下数据类型转换为 STRING(255)：

* MAP

* ARRAY

* STRUCT

## 限制和考虑事项

* 当对没有主键的表使用 Databricks on AWS 时，在登陆中重新加载表将在 Storage 应用程序中失败。要解决此问题，您可以选择

  * 在表中定义主键。

  * 在 Databricks 中将 spark.databricks.delta.alterTable.rename.enabledOnAWS 设置为 True。

  * 创建基于 SQL 的转换时，所有 VARCHAR 字段都将作为 STRING(255) 返回。

* 如果主键基于可为空的列，则不会在 Databricks 中创建它。