从 Amazon Redshift 迁移架构和数据
本文档介绍了使用公共 IP 地址将数据从 Amazon Redshift 迁移到 BigQuery 的过程。
您可以使用 BigQuery Data Transfer Service 将数据从 Amazon Redshift 数据仓库复制到 BigQuery。此服务与 GKE 中的迁移代理合作,并触发从 Amazon Redshift 到 Amazon S3 存储桶中的暂存区域的卸载操作。然后,BigQuery Data Transfer Service 会将 Amazon S3 存储桶中的数据迁移到 BigQuery。
下图展示了迁移期间 Amazon Redshift 数据仓库与 BigQuery 之间的整体数据流动情况。
如果您想要通过虚拟私有云 (VPC) 在专用 IP 地址上转移 Amazon Redshift 实例中的数据,请参阅通过 VPC 迁移 Amazon Redshift 数据。
准备工作
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the BigQuery and BigQuery Data Transfer Service APIs.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the BigQuery and BigQuery Data Transfer Service APIs.
设置所需权限
创建 Amazon Redshift 转移作业的准备工作:
确保创建转移作业的主账号在包含转移作业的项目中具有以下权限:
- 创建转移作业所需的
bigquery.transfers.update
权限 - 针对目标数据集的
bigquery.datasets.get
和bigquery.datasets.update
权限
roles/bigquery.admin
预定义的 Identity and Access Management (IAM) 角色包括bigquery.transfers.update
、bigquery.datasets.update
和bigquery.datasets.get
权限。如需详细了解 BigQuery Data Transfer Service 中的 IAM 角色,请参阅访问权限控制。- 创建转移作业所需的
请参阅 Amazon S3 的相关文档,以确保您已配置启用转移作业所需的所有权限。Amazon S3 源数据必须至少应用 AWS 托管政策
AmazonS3ReadOnlyAccess
。
创建数据集
创建 BigQuery 数据集来存储数据。您不需要创建任何表。
授予对 Amazon Redshift 集群的访问权限
按照为 SQL 客户端配置入站规则中的说明,将以下 IP 地址列入许可名单。您可以将与您的数据集位置对应的 IP 地址列入许可名单,也可以将下表中的所有 IP 地址列入许可名单。以下是为 Amazon Redshift 数据迁移预留的 Google 拥有的 IP 地址。
单区域位置
区域说明 | 区域名称 | IP 地址 | |
---|---|---|---|
美洲 | |||
俄亥俄州,哥伦布 | us-east5 |
34.162.72.184 34.162.173.185 34.162.205.205 34.162.81.45 34.162.182.149 34.162.59.92 34.162.157.190 34.162.191.145 |
|
达拉斯 | us-south1 |
34.174.172.89 34.174.40.67 34.174.5.11 34.174.96.109 34.174.148.99 34.174.176.19 34.174.253.135 34.174.129.163 |
|
爱荷华 | us-central1 |
34.121.70.114 34.71.81.17 34.122.223.84 34.121.145.212 35.232.1.105 35.202.145.227 35.226.82.216 35.225.241.102 |
|
拉斯维加斯 | us-west4 |
34.125.53.201 34.125.69.174 34.125.159.85 34.125.152.1 34.125.195.166 34.125.50.249 34.125.68.55 34.125.91.116 |
|
洛杉矶 | us-west2 |
35.236.59.167 34.94.132.139 34.94.207.21 34.94.81.187 34.94.88.122 35.235.101.187 34.94.238.66 34.94.195.77 |
|
蒙特利尔 | northamerica-northeast1 |
34.95.20.253 35.203.31.219 34.95.22.233 34.95.27.99 35.203.12.23 35.203.39.46 35.203.116.49 35.203.104.223 |
|
北弗吉尼亚 | us-east4 |
35.245.95.250 35.245.126.228 35.236.225.172 35.245.86.140 35.199.31.35 35.199.19.115 35.230.167.48 35.245.128.132 35.245.111.126 35.236.209.21 |
|
俄勒冈 | us-west1 |
35.197.117.207 35.199.178.12 35.197.86.233 34.82.155.140 35.247.28.48 35.247.31.246 35.247.106.13 34.105.85.54 |
|
盐湖城 | us-west3 |
34.106.37.58 34.106.85.113 34.106.28.153 34.106.64.121 34.106.246.131 34.106.56.150 34.106.41.31 34.106.182.92 |
|
圣保罗 | southamerica-east1 |
35.199.88.228 34.95.169.140 35.198.53.30 34.95.144.215 35.247.250.120 35.247.255.158 34.95.231.121 35.198.8.157 |
|
圣地亚哥 | southamerica-west1 |
34.176.188.48 34.176.38.192 34.176.205.134 34.176.102.161 34.176.197.198 34.176.223.236 34.176.47.188 34.176.14.80 |
|
南卡罗来纳 | us-east1 |
35.196.207.183 35.237.231.98 104.196.102.222 35.231.13.201 34.75.129.215 34.75.127.9 35.229.36.137 35.237.91.139 |
|
多伦多 | northamerica-northeast2 |
34.124.116.108 34.124.116.107 34.124.116.102 34.124.116.80 34.124.116.72 34.124.116.85 34.124.116.20 34.124.116.68 |
|
欧洲 | |||
比利时 | europe-west1 |
35.240.36.149 35.205.171.56 34.76.234.4 35.205.38.234 34.77.237.73 35.195.107.238 35.195.52.87 34.76.102.189 |
|
柏林 | europe-west10 |
34.32.28.80 34.32.31.206 34.32.19.49 34.32.33.71 34.32.15.174 34.32.23.7 34.32.1.208 34.32.8.3 |
|
芬兰 | europe-north1 |
35.228.35.94 35.228.183.156 35.228.211.18 35.228.146.84 35.228.103.114 35.228.53.184 35.228.203.85 35.228.183.138 |
|
法兰克福 | europe-west3 |
35.246.153.144 35.198.80.78 35.246.181.106 35.246.211.135 34.89.165.108 35.198.68.187 35.242.223.6 34.89.137.180 |
|
伦敦 | europe-west2 |
35.189.119.113 35.189.101.107 35.189.69.131 35.197.205.93 35.189.121.178 35.189.121.41 35.189.85.30 35.197.195.192 |
|
马德里 | europe-southwest1 |
34.175.99.115 34.175.186.237 34.175.39.130 34.175.135.49 34.175.1.49 34.175.95.94 34.175.102.118 34.175.166.114 |
|
米兰 | europe-west8 |
34.154.183.149 34.154.40.104 34.154.59.51 34.154.86.2 34.154.182.20 34.154.127.144 34.154.201.251 34.154.0.104 |
|
荷兰 | europe-west4 |
35.204.237.173 35.204.18.163 34.91.86.224 34.90.184.136 34.91.115.67 34.90.218.6 34.91.147.143 34.91.253.1 |
|
巴黎 | europe-west9 |
34.163.76.229 34.163.153.68 34.155.181.30 34.155.85.234 34.155.230.192 34.155.175.220 34.163.68.177 34.163.157.151 |
|
都灵 | europe-west12 |
34.17.15.186 34.17.44.123 34.17.41.160 34.17.47.82 34.17.43.109 34.17.38.236 34.17.34.223 34.17.16.47 |
|
华沙 | europe-central2 |
34.118.72.8 34.118.45.245 34.118.69.169 34.116.244.189 34.116.170.150 34.118.97.148 34.116.148.164 34.116.168.127 |
|
苏黎世 | europe-west6 |
34.65.205.160 34.65.121.140 34.65.196.143 34.65.9.133 34.65.156.193 34.65.216.124 34.65.233.83 34.65.168.250 |
|
亚太地区 | |||
德里 | asia-south2 |
34.126.212.96 34.126.212.85 34.126.208.224 34.126.212.94 34.126.208.226 34.126.212.232 34.126.212.93 34.126.212.206 |
|
香港 | asia-east2 |
34.92.245.180 35.241.116.105 35.220.240.216 35.220.188.244 34.92.196.78 34.92.165.209 35.220.193.228 34.96.153.178 |
|
雅加达 | asia-southeast2 |
34.101.79.105 34.101.129.32 34.101.244.197 34.101.100.180 34.101.109.205 34.101.185.189 34.101.179.27 34.101.197.251 |
|
墨尔本 | australia-southeast2 |
34.126.196.95 34.126.196.106 34.126.196.126 34.126.196.96 34.126.196.112 34.126.196.99 34.126.196.76 34.126.196.68 |
|
孟买 | asia-south1 |
34.93.67.112 35.244.0.1 35.200.245.13 35.200.203.161 34.93.209.130 34.93.120.224 35.244.10.12 35.200.186.100 |
|
大阪 | asia-northeast2 |
34.97.94.51 34.97.118.176 34.97.63.76 34.97.159.156 34.97.113.218 34.97.4.108 34.97.119.140 34.97.30.191 |
|
首尔 | asia-northeast3 |
34.64.152.215 34.64.140.241 34.64.133.199 34.64.174.192 34.64.145.219 34.64.136.56 34.64.247.158 34.64.135.220 |
|
新加坡 | asia-southeast1 |
34.87.12.235 34.87.63.5 34.87.91.51 35.198.197.191 35.240.253.175 35.247.165.193 35.247.181.82 35.247.189.103 |
|
悉尼 | australia-southeast1 |
35.189.33.150 35.189.38.5 35.189.29.88 35.189.22.179 35.189.20.163 35.189.29.83 35.189.31.141 35.189.14.219 |
|
台湾 | asia-east1 |
35.221.201.20 35.194.177.253 34.80.17.79 34.80.178.20 34.80.174.198 35.201.132.11 35.201.223.177 35.229.251.28 35.185.155.147 35.194.232.172 |
|
东京 | asia-northeast1 |
34.85.11.246 34.85.30.58 34.85.8.125 34.85.38.59 34.85.31.67 34.85.36.143 34.85.32.222 34.85.18.128 34.85.23.202 34.85.35.192 |
|
中东 | |||
Dammam | me-central2 |
34.166.20.177 34.166.10.104 34.166.21.128 34.166.19.184 34.166.20.83 34.166.18.138 34.166.18.48 34.166.23.171 |
|
多哈 | me-central1 |
34.18.48.121 34.18.25.208 34.18.38.183 34.18.33.25 34.18.21.203 34.18.21.80 34.18.36.126 34.18.23.252 |
|
特拉维夫 | me-west1 |
34.165.184.115 34.165.110.74 34.165.174.16 34.165.28.235 34.165.170.172 34.165.187.98 34.165.85.64 34.165.245.97 |
|
非洲 | |||
约翰内斯堡 | africa-south1 |
34.35.11.24 34.35.10.66 34.35.8.32 34.35.3.248 34.35.2.113 34.35.5.61 34.35.7.53 34.35.3.17 |
多区域位置
多区域说明 | 多区域名称 | IP 地址 |
---|---|---|
欧盟成员国的数据中心1 | EU |
34.76.156.158 34.76.156.172 34.76.136.146 34.76.1.29 34.76.156.232 34.76.156.81 34.76.156.246 34.76.102.206 34.76.129.246 34.76.121.168 |
美国的数据中心 | US |
35.185.196.212 35.197.102.120 35.185.224.10 35.185.228.170 35.197.5.235 35.185.206.139 35.197.67.234 35.197.38.65 35.185.202.229 35.185.200.120 |
1 位于 EU
多区域的数据不会存储在 europe-west2
(伦敦)或 europe-west6
(苏黎世)数据中心中。
授予对 Amazon S3 存储桶的访问权限
您必须拥有 S3 存储桶才能用作将 Amazon Redshift 数据转移到 BigQuery 的暂存区。如需详细说明,请参阅 Amazon 文档。
建议您创建一个专用的 Amazon IAM 用户,并授予该用户对 Amazon Redshift 的只读访问权限以及对 Amazon S3 的读写访问权限。如需实现此步骤,您可以应用以下政策:
创建 Amazon IAM 用户访问密钥对。
通过单独的迁移队列配置工作负载控制
您可以选择定义一个专供迁移使用的 Amazon Redshift 队列,借此限制并分隔用于迁移的资源。您可以使用最大并发查询计数配置此迁移队列。然后,您可以将特定迁移用户组与此队列关联,并在设置迁移时使用这些凭据将数据转移到 BigQuery。转移服务仅拥有迁移队列的访问权限。
收集转移信息
收集使用 BigQuery Data Transfer Service 设置迁移所需的信息:
- 按照获取 JDBC 网址的说明进行操作。
- 获取对您的 Amazon Redshift 数据库具有适当权限的用户的用户名和密码。
- 按照授予对 Amazon S3 存储桶的访问权限中的说明获取 AWS 访问密钥对。
- 获取您要用于转移作业的 Amazon S3 存储桶的 URI。我们建议您为此存储桶设置生命周期政策,以避免产生不必要的费用。建议的到期时间为 24 小时,以便您有足够的时间将所有数据转移到 BigQuery。
评估您的数据
在数据转移过程中,BigQuery Data Transfer Service 会将 Amazon Redshift 中的数据以 CSV 文件的形式写入 Cloud Storage。如果这些文件包含 ASCII 0 字符,则无法加载到 BigQuery 中。我们建议您评估自己的数据,以确定是否存在此问题。如果存在此问题,您可以通过将数据以 Parquet 文件的形式导出到 Amazon S3 来解决此问题,然后使用 BigQuery Data Transfer Service 导入这些文件。如需了解详情,请参阅 Amazon S3 转移作业概览。
设置 Amazon Redshift 转移作业
从下列选项中选择一项:
控制台
在 Google Cloud 控制台中,进入 BigQuery 页面。
点击数据传输。
点击创建转移作业。
在来源类型部分中,从来源列表中选择迁移:Amazon Redshift。
在转移配置名称部分的显示名字段中,输入转移作业的名称,例如
My migration
。显示名可以是任何容易辨识的值,让您以后在需要修改时能够轻松识别。在目标设置部分中,从数据集列表中选择您创建的数据集。
在数据源详细信息部分中,执行以下操作:
- 在 Amazon Redshift 的 JDBC 连接网址 字段中,提供用来访问您 Amazon Redshift 集群的 JDBC 网址。
- 在您的数据库用户名字段中,输入要迁移的 Amazon Redshift 数据库的用户名。
在您的数据库密码字段,输入数据库密码。
在访问密钥 ID 和私有访问密钥字段中,输入您从授予对 S3 存储桶的访问权限步骤获取的访问密钥对。
在 Amazon S3 URI 字段中,输入您将用作暂存区域的 S3 存储桶的 URI。
在 Amazon Redshift 架构字段中,输入您要迁移的 Amazon Redshift 架构。
在表名模式字段中,指定与架构中的表名匹配的名称或模式。您可以使用正则表达式指定采用以下格式的模式:
<table1Regex>;<table2Regex>
。此模式应遵循 Java 正则表达式语法。 例如:lineitem;ordertb
匹配名为lineitem
和ordertb
的表。.*
匹配所有表。
如果将此字段留空,则会迁移来自指定架构的所有表。
对于 VPC 和预留的 IP 范围,将此字段留空。
在服务账号菜单中,从与您的 Google Cloud 项目关联的服务账号中选择一个服务账号。您可以将服务账号与转移作业相关联,而不是使用用户凭据。如需详细了解如何将服务账号用于数据转移,请参阅使用服务账号。
可选:在通知选项部分中,执行以下操作:
点击保存。
Google Cloud 控制台会显示所有转移作业设置详细信息,包括此转移作业的资源名称。
bq
输入 bq mk
命令并提供转移作业创建标志 --transfer_config
。此外,还必须提供以下标志:
--project_id
--data_source
--target_dataset
--display_name
--params
bq mk \ --transfer_config \ --project_id=project_id \ --data_source=data_source \ --target_dataset=dataset \ --display_name=name \ --service_account_name=service_account \ --params='parameters'
其中:
- project_id 是您的 Google Cloud 项目 ID。如果未指定
--project_id
,则系统会使用默认项目。 - data_source 是数据源,即
redshift
。 - dataset 是转移作业配置的 BigQuery 目标数据集。
- name 是转移作业配置的显示名。转移作业名称可以是任何可让您在需要修改转移作业时识别该转移作业的名称。
- service_account:用于对传输作业进行身份验证的服务账号名称。该服务账号应属于用于创建转移作业的同一
project_id
,并且应具有所有所需的权限。 - parameters 包含所创建转移作业配置的参数(采用 JSON 格式),例如:
--params='{"param":"param_value"}'
。
Amazon Redshift 转移作业配置需要的参数包括:
jdbc_url
:用于定位 Amazon Redshift 集群的 JDBC 连接网址。database_username
:用于访问数据库以卸载指定表的用户名。database_password
:与用户名配合使用的密码,用于访问数据库以卸载指定表。access_key_id
:访问密钥 ID,用于签署发往 AWS 的请求。secret_access_key
:与访问密钥 ID 配合使用的私有访问密钥,用于签署发往 AWS 的请求。s3_bucket
:以“s3://”开头的 Amazon S3 URI,用于指定要使用的临时文件的前缀。redshift_schema
:包含要迁移的所有表的 Amazon Redshift 架构。table_name_patterns
:以英文分号 (;) 分隔的表名模式。表模式是要迁移的表的正则表达式。如果未提供,系统将迁移数据库架构下的所有表。
例如,以下命令会创建名为 My Transfer
的 Amazon Redshift 转移作业,且目标数据集名为 mydataset
,项目 ID 为 google.com:myproject
。
bq mk \
--transfer_config \
--project_id=myproject \
--data_source=redshift \
--target_dataset=mydataset \
--display_name='My Transfer' \
--params='{"jdbc_url":"jdbc:postgresql://test-example-instance.sample.us-west-1.redshift.amazonaws.com:5439/dbname","database_username":"my_username","database_password":"1234567890","access_key_id":"A1B2C3D4E5F6G7H8I9J0","secret_access_key":"1234567890123456789012345678901234567890","s3_bucket":"s3://bucket/prefix","redshift_schema":"public","table_name_patterns":"table_name"}'
API
使用 projects.locations.transferConfigs.create
方法并提供一个 TransferConfig
资源实例。
Java
试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Java 设置说明进行操作。 如需了解详情,请参阅 BigQuery Java API 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
配额和限制
对于每个表的每个加载作业,BigQuery 都有 15 TB 的加载配额。Amazon Redshift 会在内部执行表数据压缩,因此实际导出的表大小会超过 Amazon Redshift 报告的表大小。如果您打算迁移 15 TB 以上的表,请先联系 Cloud Customer Care。
使用此服务可能会在 Google 外部产生费用。如需了解详情,请查看 Amazon Redshift 和 Amazon S3 的价格页面。
由于 Amazon S3 的一致性模型要求,向 BigQuery 转移的作业中可能不包括某些文件。
后续步骤
- 了解如何通过 VPC 迁移 Amazon Redshift 专用实例。
- 详细了解 BigQuery Data Transfer Service。
- 使用批量 SQL 转换迁移 SQL 代码。