本页介绍了如何使用 Cloud Data Fusion 将数据从 Amazon Redshift 实例加载到Google Cloud 。借助 Redshift 来源连接器,您可以将表从 Redshift 数据集同步到目标位置(例如 BigQuery)。借助该连接器,您还可以创建可配置的 SQL 查询。
准备工作
- Cloud Data Fusion 6.9.0 及更高版本支持 Redshift 源。
配置 Redshift 源连接器时,您可以选择现有的可重复使用连接,也可以创建新的一次性连接。如需了解详情,请参阅管理连接。重复使用连接时,请注意以下事项:
- 您无需提供凭据。
- 现有连接会提供用于生成导入查询的架构和表名称信息。
配置插件
前往 Cloud Data Fusion 网页界面,然后点击 Studio。
检查是否已选择 Data Pipeline - Batch(而非 Realtime)。
在来源菜单中,点击 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,如果适用)。
- 在 Name(名称)字段中,输入一个名称,例如
SN-PC-Source-01-01-2024
。 - 在数据库字段中输入目标数据库名称,例如
datafusiondb
。
可重复使用的连接
如需重复使用现有连接,请按以下步骤操作:
- 开启使用连接。
- 点击浏览连接。
点击连接名称。
可选:如果不存在关联,并且您想创建新的可重复使用关联,请点击添加关联,然后参阅此页面上新关联标签页中的步骤。
在导入查询字段中,使用 Redshift 来源中的架构和表名称输入查询,例如
Select * from "public"."users"
。可选:输入高级属性,例如边界查询或分块数量。如需查看所有属性说明,请参阅属性。
- 为 Redshift 节点输入标签,例如
可选:点击验证,然后解决发现的所有错误。
点击
关闭。系统会保存属性,然后您可以在 Cloud Data Fusion 网页界面中继续构建数据流水线。
属性
属性 | 支持用于自动化的宏 | 必需属性 | 说明 |
---|---|---|---|
标签 | 否 | 是 | 数据流水线中相应节点的名称。 |
使用连接 | 否 | 否 | 浏览以找到与来源的连接。如果使用连接处于开启状态,您无需提供凭据。 |
连接 | 是 | 是 | 要使用的连接的名称。如果选择了使用连接,系统会显示此字段。数据库和表信息由连接提供。 |
JDBC 驱动程序名称 | 是 | 是 | 要使用的 JDBC 驱动程序的名称。如果未选择使用连接,则会显示此字段。 |
主机 | 是 | 是 | Amazon Redshift 集群的端点。如果未选择使用连接,系统会显示此字段。 |
Port(端口) | 是 | 否 | Redshift 运行的端口。如果未选择使用连接,则会显示此字段。 |
用户名 | 是 | 否 | 用于连接到指定数据库的用户身份。如果未选择使用连接,系统会显示此字段。 |
密码 | 是 | 否 | 用于连接到指定数据库的密码。如果未选择使用连接,系统会显示此字段。 |
连接参数 | 是 | 否 | 作为连接参数的任意字符串键值对列表。 这些参数会作为连接参数传递给 JDBC 驱动程序,以便可能需要额外配置的 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 (precision,
scale)/decimal (precision, scale) |
decimal |
精度为 0 的 numeric |
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 中访问集群,请按以下步骤操作:
- 获取必须连接到 Redshift 集群的Google Cloud 上的服务或机器的外部 IP 地址,例如代理服务器 IP(请参阅查看 IP 地址)。对于 Dataproc 集群,请获取所有主节点和子节点的 IP 地址。
为机器 IP 地址创建入站规则,将 IP 地址添加到安全群组中的许可名单。 Google Cloud
在 Wrangler 中添加连接属性并对其进行测试:
- 在网页界面中打开 Cloud Data Fusion 实例。
- 依次点击 Wrangler > 添加连接,然后为 Redshift 创建新连接。
- 输入所有连接属性。
- 点击测试连接,然后解决所有问题。
如需创建多个分块,请使用边界查询
对于多个分块,请使用边界查询来管理多节点集群。如果您从 Redshift 中提取数据并将负载均匀分布在每个节点上,请在 Redshift 源连接器属性中配置边界查询。
- 在 Cloud Data Fusion 流水线的 Studio 页面上,找到 Redshift 节点,然后点击属性。
在高级属性中,指定以下内容:
- 输入要创建的分块数量。
- 输入每个分块的提取大小。
- 输入要应用于多节点 Redshift 集群的边界查询。
- 输入分屏列字段名称。
例如,假设您有以下用例:
- 您有一个包含 1,000 万条记录的表。
- 它有一个名为
id
的唯一 ID 列。 - Redshift 集群有 4 个节点。
目标:为了充分利用集群的潜力,您计划生成多个分块。为此,请使用以下属性配置:
在边界查询字段中,输入以下查询:
SELECT MIN(id), MAX(id) FROM tableName
在此查询中,
id
是应用分块的列的名称。在分屏列字段中,输入列名称
id
。输入分块数量和提取大小。这些属性是相互关联的,可让您根据提取大小计算分块,反之亦然。在此示例中,请输入以下内容。
在分块数字段中,输入
40
。在此示例中,表包含 1,000 万条记录,如果创建 40 个分块,则每个分块将包含 25 万条记录。在提取大小字段中,输入
250,000
。