# Amazon Redshift

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

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

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

## 设置云暂存区

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

配置到 Amazon Redshift 的连接还需要您设置到 AmazonS3 云暂存区域的连接，在应用和存储数据和更改之前，该区域将暂存数据和更改。

有关设置与 AmazonS3 的连接的信息，请参阅[Amazon S3](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/TargetConnections/aws-s3-target.htm#Using2)。

## 配置连接，指向 Amazon Redshift

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

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

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

### 数据目标

#### 数据网关

信息注释此字段不适用于 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/redshift-target.htm#Driver)。

### 连接属性

* 服务器：Amazon Redshift 数据库服务器的主机名。

* 端口：用来访问您的 Amazon Redshift 数据库的端口。默认值为 5439。

### 帐户属性

用户名称和密码：经授权可访问 Amazon Redshift 数据库的用户的用户名和密码。

### 数据库属性

* 数据库名称：有两种方法可以用于指定数据库：

  * 方法 1 - 从列表中选择：单击加载数据库，然后选择一个数据库。
  * 方法 2 - 手动：选择手动输入数据库名称，然后输入数据库名称。

### S3 属性

* IAM 角色 ARN（仅当暂存到 EC2 上的 S3 时才需要）：与您在 IAM Roles Anywhere 控制台中创建的角色关联的 ARN。角色是您在账户中创建的具有特定权限的 IAM 身份。为了让 IAM Roles Anywhere 能够代入角色并提供临时 AWS 凭证，该角色必须信任 IAM Roles Anywhere 服务主体。

  有关 IAM Roles Anywhere 的更多信息，请访问 [Extend AWS IAM roles to workloads outside of AWS with IAM Roles Anywhere](https://docs.aws.amazon.com/rolesanywhere/latest/userguide/introduction.html)

### 内部属性

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

使用字段右侧的 the 新建 icon 和 the 取消 icon 按钮可以根据需要添加或删除特性。

### 名称

连接的显示名称。

## 先决条件

### 所需的权限

授予 Redshift 数据库上的以下权限：

* 授予 COPY
* 授予 INSERT
* 授予 UPDATE
* 授予 DELETE
* 授予 SELECT
* 创建模式（仅当模式不存在并且您希望 Qlik Talend Data Integration 创建它们时才需要）
* 授予 CREATE TABLE
* 授予 ALTER TABLE
* 授予 DROP TABLE

### 驱动程序设置

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

您可以使用驱动程序安装实用程序（推荐）安装 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 redshift

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

   否则，将显示 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 redshift

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

   否则，将显示 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 redshift

   将卸载 driver。

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

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

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

   sudo systemctl stop repagent

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

   sudo systemctl status repagent

   状态应如下所示：

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

3. 下载并安装连接到 Amazon Redshift 集群所需的 [LinuxSQL 客户端](https://docs.aws.amazon.com/redshift/latest/mgmt/connecting-to-cluster.html)工具。Qlik Data Gateway - Data Movement 仅需要 Amazon Redshift ODBC Driver (x64) 1.4.34.1000。

   下载驱动程序的位置：

   https://s3.amazonaws.com/redshift-downloads/drivers/odbc/1.4.65.1000/AmazonRedshiftODBC-64-bit-1.4.65.1000-1.x86\_64.rpm

   安装 ODBC 驱动程序后，按如下方式编辑 /etc/odbcinst.ini 文件：

   `[ODBC Drivers]`

   `Amazon Redshift (x64)=Installed`

   以及：

   `[Amazon Redshift (x64)]`

   `Description=Amazon Redshift ODBC Driver (64-bit)`

   `Driver=/opt/amazon/redshiftodbc/lib/64/libamazonredshiftodbc64.so`

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

   sudo systemctl start repagent

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

   sudo systemctl status repagent

   状态应如下所示：

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

有关 Amazon Redshift 支持的驱动程序列表，请参阅 [](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/TargetConnections/redshift-target.htm)http://docs.aws.amazon.com/redshift/latest/mgmt/configure-odbc-connection.html。

### 端口

Port 5439（Amazon Redshift 集群）需要打开以进行出站通信。

### CA 证书

数据移动网关 使用 SSL 连接至 AWS。这需要适当的 CA 证书才能驻留在 数据移动网关 计算机上；否则，连接将失败。CA 证书的目的是验证 AWS 服务器证书的所有权。

确保所需的 CA 证书存在于 Linux 计算机上的以下位置：

/etc/pki/tls/certs/ca-bundle.crt

如果它不存在，最简单的解决方案是从另一台 Linux 机器复制证书包。

### 一般先决条件和考虑事项

* 如果数据源有 4 个字节的表情符号字符，请使用转换将数据类型从 WSTRING(n ) 转换为 WSTRING ( n\*2 )。

* 确保 数据移动网关 计算机上的时间和时区设置准确。这是为了确保：

  * 正确同步满负载和 CDC 任务
  * 交易日志时间与实际时间的相互关系

* 您无法从由 Qlik Talend Data Integration 在 Amazon Redshift 目标中创建的数据集中，将实时视图和历史记录视图读取到 Qlik Cloud 分析服务 中。

## 限制和考虑事项

* Amazon Redshift 连接器仅支持标准身份验证（用户名和密码）。

## 数据类型

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

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

信息注释在 Qlik Cloud中，字符串长度以字符为单位，而在 Redshift 中，varchar 长度以字节为单位。每个字符的字节数可能因实际字符和编码而异。Qlik Cloud 假设长度为每个字符 3 个字节。这意味着，当您定义 wstring(10) 时，在实践中将表创建为 varchar(30)。

支持的数据类型

| Qlik Cloud 数据类型 | Amazon Redshift 数据类型 |
| --- | --- |
| BOOLEAN | BOOLEAN |
| BYTES | VARBINARY(length) |
| DATE | DATE |
| TIME | VARCHAR (20) |
| DATETIME | 如果刻度 =&gt; 0 且 =&lt; 6，那么：<br><br>TIMESTAMP<br><br>如果刻度 =&gt; 7 且 =&lt; 12，那么：<br><br>VARCHAR (37) |
| INT1 | INT2 |
| INT2 | INT2 |
| INT4 | INT4 |
| INT8 | INT8 |
| NUMERIC | 如果刻度 =&gt; 0 且 =&lt; 37，那么：<br><br>NUMERIC（精确度、刻度）<br><br>如果刻度 =&gt; 38 且 =&lt; 127，那么：<br><br>VARCHAR（长度） |
| REAL4 | FLOAT4 |
| REAL8 | FLOAT8 |
| STRING | 如果长度 =&gt; 1 且 =&lt; 65535，则为：<br><br>VARCHAR（以字节计算的长度）<br><br>如果长度 =&gt; 65535 且 =&lt; 2147483647，那么：<br><br>varchar(65535) |
| UINT1 | INT2 |
| UINT2 | INT4 |
| UINT4 | INT8 |
| UINT8 | NUMERIC (20,0) |
| WSTRING | 如果长度 =&gt; 1 且 =&lt; 21845，那么：<br><br>NVARCHAR（以字节计算的长度）<br><br>如果长度 =&gt; 21846 且 =&lt; 2147483647，那么：<br><br>NVARCHAR (65535) |
| BLOB | 变长字节 (16777216) |
| NCLOB | varchar(65535) |
| CLOB | varchar(65535) |
| JSON | SUPER |

不支持以下 SQL Server 数据类型。将不会读取数据。

* HLLSKETCH

以下数据类型转换为 VARCHAR (65535)：

* GEOGRAPHY

* GEOMETRY