本页面介绍如何使用 Cloud Data Fusion 将数据从 Amazon Redshift 实例加载到Google Cloud 。借助 Redshift 源连接器,您可以将 Redshift 数据集中的表同步到目标位置(例如 BigQuery)。您还可以使用该连接器创建可配置的 SQL 查询。
准备工作
- Cloud Data Fusion 6.9.0 版及更高版本支持 Redshift 数据源。
配置 Redshift 源连接器时,您可以选择可重复使用的现有连接,也可以创建一次性新连接。如需了解详情,请参阅管理连接。重复使用连接时,请注意以下事项:
- 您无需提供凭据。
- 现有连接提供用于生成导入查询的架构和表名称信息。
配置插件
前往 Cloud Data Fusion 网页界面,然后点击 Studio。
检查是否已选择数据流水线 - 批量(而非实时)。
在来源菜单中,点击 Redshift。Redshift 节点会显示在流水线中。如果您在 Studio 页面上看不到 Redshift 数据源,请从 Cloud Data Fusion Hub 部署 Redshift 数据源连接器。
如需配置来源,请前往 Redshift 节点,然后点击属性。
输入以下属性。如需查看完整列表,请参阅属性。
- 输入 Redshift 节点的标签,例如
Redshift tables。 输入连接详细信息。您可以设置新的临时连接,也可以设置现有的可重复使用的连接。
新增关联项
如需添加与 Redshift 的一次性连接,请按以下步骤操作:
- 保持使用连接处于关闭状态。
- 在 JDBC 驱动程序名称字段中,输入驱动程序的名称。 Redshift 支持两种类型的 JDBC 驱动程序:CData 和 Amazon。如需了解详情,请参阅上传 JDBC 驱动程序。
- 在主机字段中,输入 Redshift 集群的端点,例如
cdf-redshift-new.example-endpoint.eu-west-1.redshift.amazonaws.com。 - 可选:在端口字段中,输入数据库端口号,例如
5439。 如果您的 Redshift 数据库需要身份验证,请执行以下操作:
- 在用户名字段中,输入数据库的名称。
- 在密码字段中,输入数据库的密码。
- 可选:在实参字段中,输入键值实参。如需使用 CData 驱动程序,请提供连接实参(例如 RTK 或 OEMKey,如果适用)。
- 在名称字段中,输入一个名称,例如
SN-PC-Source-01-01-2024。 - 在数据库字段中输入目标数据库名称,例如
datafusiondb。
可重复使用的连接
如需重复使用现有连接,请按以下步骤操作:
- 开启使用连接。
- 点击浏览连接。
点击连接名称。
可选:如果不存在连接,并且您想创建新的可重复使用的连接,请点击添加连接,然后参阅此页面上新连接标签页中的步骤。
在导入查询字段中,使用 Redshift 来源中的架构和表名称输入查询,例如
Select * from "public"."users"。可选:输入高级属性,例如边界查询或拆分次数。如需查看所有属性说明,请参阅属性。
- 输入 Redshift 节点的标签,例如
可选:点击验证,然后解决发现的所有错误。
点击 关闭。系统会保存这些属性,然后您可以在 Cloud Data Fusion 网页界面中继续构建数据流水线。
属性
| 属性 | 支持用于自动化的宏 | 必需属性 | 说明 |
|---|---|---|---|
| 标签 | 否 | 是 | 数据流水线中节点的名称。 |
| 使用连接 | 否 | 否 | 浏览与来源的连接。如果使用连接处于开启状态,您无需提供凭据。 |
| 连接 | 是 | 是 | 要使用的连接的名称。如果选择了使用连接,则会显示此字段。数据库和表信息由连接提供。 |
| JDBC 驱动程序名称 | 是 | 是 | 要使用的 JDBC 驱动程序的名称。如果未选择使用连接,则会显示此字段。 |
| 主机 | 是 | 是 | Amazon Redshift 集群的端点。如果未选择使用连接,则会显示此字段。 |
| 端口 | 是 | 否 | Redshift 运行的端口。如果未选择使用连接,则会显示此字段。 |
| 用户名 | 是 | 否 | 用于连接到指定数据库的用户身份。如果未选择使用连接,则会显示此字段。 |
| 密码 | 是 | 否 | 用于连接到指定数据库的密码。如果未选择使用连接,则会显示此字段。 |
| 连接实参 | 是 | 否 | 作为连接实参的任意字符串键值对列表。 这些实参会作为连接实参传递给可能需要额外配置的 JDBC 驱动程序。如果未选择使用连接,则会显示此字段。 |
| 参考名称 | 否 | 是 | 唯一标识此来源,用于沿袭、注释元数据和其他服务。 |
| 数据库 | 是 | 是 | Redshift 数据库名称。如需选择数据,请点击浏览数据库。 |
| 导入查询 | 是 | 是 | 用于从指定表中导入数据的 SELECT 查询。 |
| 边界查询 | 是 | 否 | 返回 splitBy 字段中最小值和最大值的 SQL 查询。例如:SELECT MIN(id),MAX(id) FROM table如果 numSplits 设置为 1,则此字段不是必需字段。 |
| 拆分列 | 是 | 否 | 用于生成拆分的字段名称。如果 numSplits 设置为 1,则此字段不是必需字段。 |
| 分片数 | 是 | 否 | 要生成的分片数。 |
| 大小 | 是 | 否 | 每次提取的行数(按拆分)。较大的提取大小可以加快导入速度,但会增加内存用量。如果您未指定此项,则默认设置为 1000。 |
数据类型映射
下表列出了 Redshift 数据类型及其对应的 CDAP 类型:
| Redshift 数据类型 | CDAP 架构数据类型 |
|---|---|
bigint |
long |
boolean |
boolean |
character |
string |
character varying |
string |
date |
date |
double precision |
double |
geometry |
bytes |
hllsketch |
string |
integer |
int |
json |
string |
numeric(精度,比例)/decimal(精度,比例) |
decimal |
numeric(精确度为 0) |
string |
real |
float |
smallint |
int |
super |
string |
text |
string |
time [ (p) ],无时区 |
time |
time [ (p) ],有时区 |
string |
timestamp [ (p) ],无时区 |
timestamp |
timestamp [ (p) ],有时区 |
timestamp |
varbyte |
byte |
xml |
string |
最佳做法
从Google Cloud连接到 Redshift 集群时,请遵循以下最佳实践。
使用 IP 地址许可名单
为防止来自未经授权的来源的访问,并限制对特定 IP 地址的访问,请在 Redshift 集群上启用访问权限控制。
如果您使用 Redshift 访问权限控制,请按以下步骤操作,以便在 Cloud Data Fusion 中访问集群:
- 获取Google Cloud 上必须连接到 Redshift 集群的服务或机器的外部 IP 地址,例如代理服务器 IP(请参阅查看 IP 地址)。对于 Managed Service for Apache Spark 集群,获取所有主节点和子节点的 IP 地址。
通过为 Google Cloud 机器 IP 地址创建入站规则,将 IP 地址添加到安全组的许可名单中。
在 Wrangler 中添加连接属性并进行测试:
- 在网页界面中打开 Cloud Data Fusion 实例。
- 依次点击 Wrangler > 添加连接,然后为 Redshift 创建新连接。
- 输入所有连接属性。
- 点击测试连接,然后解决所有问题。
如需创建多个拆分,请使用边界查询
对于多次拆分,请使用边界查询来管理多节点集群。如果您需要从 Redshift 中提取数据,并将负载均匀分配到每个节点,请在 Redshift 源连接器属性中配置边界查询。
- 在 Studio 页面上的 Cloud Data Fusion 流水线中,前往 Redshift 节点,然后点击属性。
在高级属性中,指定以下内容:
- 输入要创建的分割数。
- 为每个拆分输入提取大小。
- 输入要应用于多节点 Redshift 集群的边界查询。
- 输入拆分列字段名称。
例如,假设您有以下使用情形:
- 您有一个包含 1,000 万条记录的表。
- 它有一个名为
id的唯一 ID 列。 - Redshift 集群有 4 个节点。
目标:为了充分发挥集群的潜力,您计划生成多个分片。为此,请使用以下属性配置:
在边界查询字段中,输入以下查询:
SELECT MIN(id), MAX(id) FROM tableName在此查询中,
id是应用拆分的列的名称。在拆分列字段中,输入列名称
id。输入拆分次数和提取大小。这些属性相互关联,可让您根据提取大小计算拆分,反之亦然。在此示例中,请输入以下内容。
在拆分次数字段中,输入
40。在此示例中,假设表包含 1,000 万条记录,创建 40 个拆分后,每个拆分将包含 25 万条记录。在提取大小字段中,输入
250,000。