从 Amazon Redshift 迁移数据

概览

本文档介绍了将数据从 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 之间的整体数据流动情况。

准备工作

本部分介绍如何逐步设置从 Amazon Redshift 到 BigQuery 的数据迁移。具体步骤包括:

  • 满足 Google Cloud Platform 的前提条件并在其上设置权限。
  • 授予对 Amazon Redshift 集群的访问权限。
  • 授予对 Amazon S3 暂存存储分区的访问权限。
  • 设置借助 BigQuery Data Transfer Service 进行的迁移。您需要有:
    • Amazon Redshift JDBC 网址。请按照获取 JDBC 网址的说明进行操作。
    • Amazon Redshift 数据库的用户名和密码。
    • AWS 访问密钥对,将通过授予对 S3 存储分区的访问权限步骤获取。
    • 将用来暂存数据的 Amazon S3 存储分区的 URI。建议您为此存储分区设置生命周期政策,以避免产生不必要的费用。建议的到期时间为 24 小时,以便您有足够的时间将所有数据转移到 BigQuery。

Google Cloud Platform 要求

为了确保成功实现 Amazon Redshift 数据仓库迁移,必须满足下列 Google Cloud Platform 的前提条件:

  1. 选择或创建 Google Cloud Platform 项目以存储迁移数据。

  2. 启用 BigQuery Data Transfer Service API。

    在 Google Cloud Platform Console 中,点击 BigQuery Data Transfer Service API 页面上的启用按钮。

    启用 API

    新项目中会自动启用 BigQuery。对于现有项目,您可能需要手动启用 BigQuery API。绿色对勾标记表示您已启用了 API。

    已启用 API

  3. 创建 BigQuery 数据集来存储数据。您不需要创建任何表。

  4. 设置转移作业时,请在浏览器中允许来自 bigquery.cloud.google.com 的弹出式窗口,这样才能看到权限窗口。您必须授予 BigQuery Data Transfer Service 管理您的转移作业的权限。

授予对 Amazon Redshift 集群的访问权限

遵循 Amazon 提供的说明将以下 IP 地址列入白名单。可以将与您的数据集位置对应的 IP 地址列入白名单,也可以将下表中的所有 IP 地址列入白名单。以下是为 Amazon Redshift 数据迁移预留的 Google 拥有的 IP 地址。

美国
(美国多区域)
东京
(asia-northeast1)
欧盟
(欧盟多区域)
伦敦
(europe-west2)
澳大利亚
(australia-southeast1)
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
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
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
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
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

授予对 Amazon S3 存储分区的访问权限

为了将 Amazon Redshift 数据转移到 BigQuery,您需要有一个用作暂存区域的 S3 存储分区。如需 Amazon 提供的详细说明,请点击此处

  1. 建议您创建一个专用的 Amazon IAM 用户,并授予该用户对 Redshift 的只读访问权限以及对 S3 的读写访问权限。可通过应用以下现有政策来实现此目的:

    Redshift 迁移 Amazon 权限

  2. 创建 Amazon IAM 用户访问密钥对

可选:通过单独的迁移队列实现工作负载控制

您可以定义一个专供迁移使用的 Amazon Redshift 队列,借此限制并分隔用于迁移的资源。可为此迁移队列配置最大并发查询计数。然后,您可以将特定迁移用户组与此队列关联,并在设置迁移时使用这些凭据将数据转移到 BigQuery。转移服务仅拥有迁移队列的访问权限。

设置 Amazon Redshift 迁移

如需设置 Amazon Redshift 转移作业,请执行以下操作:

控制台

  1. 转到 GCP Console 中的 BigQuery 网页界面。

    转到 GCP Console

  2. 点击转移作业

  3. 点击添加转移作业

  4. 新转移作业页面上,执行以下操作:

    • 来源字段,选择迁移:Amazon Redshift
    • 显示名字段,输入转移作业的名称,例如 My migration。显示名称可以是任何容易辨识的值,让您以后在需要修改时能够轻松识别。
    • 目标数据集字段,选择相应的数据集。

      新的 Amazon Redshift 迁移一般信息

  5. 数据源详细信息下,继续设置 Amazon Redshift 转移作业的特定详细信息。

    • Amazon Redshift 的 JDBC 连接网址 (JDBC connection url for Amazon Redshift) 字段,提供用来访问您 Amazon Redshift 集群的 JDBC 网址
    • 您的数据库用户名字段,输入您希望迁移的 Amazon Redshift 数据库的用户名。
    • 您的数据库密码字段,输入数据库密码。
    • 访问密钥 ID私有访问密钥字段,输入您从授予对 S3 存储分区的访问权限步骤获取的访问密钥对。
    • Amazon S3 URI 字段,输入您将用作暂存区域的 S3 存储分区的 URI
    • Amazon Redshift 架构字段,输入您要迁移的 Amazon Redshift 架构。
    • 表名模式字段,指定与架构中的表名匹配的名称或模式。您可以使用正则表达式指定采用以下格式的模式:<table1Regex>;<table2Regex>。此模式应遵循 Java 正则表达式语法。

      新的 Amazon Redshift 迁移数据源详细信息

    • (可选)在通知选项部分,执行以下操作:

      • 点击切换开关以启用电子邮件通知。启用此选项后,转移作业管理员会在转移作业运行失败时收到电子邮件通知。
      • 选择 Cloud Pub/Sub 主题字段,选择主题名称或点击创建主题。此选项用于为您的转移作业配置 Cloud Pub/Sub 运行通知。转移作业运行通知目前为 Alpha 版

        Cloud Pub/Sub 主题

  6. 点击保存

  7. 网页界面随即显示所有转移作业设置的详细信息,包括此转移作业的资源名称

    转移作业确认

经典版界面

  1. 转到经典版 BigQuery 网页界面。

    转到经典版 BigQuery 网页界面

  2. 点击 Transfers

  3. 点击 Add Transfer

  4. New Transfer 页面上,执行以下操作:

    • Source 字段,选择 Migration: Amazon Redshift
    • Display name 字段,输入转移作业的名称,例如 My Migration。显示名称可以是任何容易辨识的值,让您以后在需要修改时能够轻松识别。
    • Destination dataset 字段,选择相应的数据集。
    • JDBC connection url for Amazon Redshift 字段,提供用来访问您 Amazon Redshift 集群的 JDBC 网址
    • Username of your database 字段,输入您希望迁移的 Amazon Redshift 数据库的用户名。
    • Password of your database 字段,输入数据库密码。
    • Access key ID 和 Secret access key 字段,输入您从授予对 S3 存储分区的访问权限步骤获取的访问密钥对。
    • Amazon S3 URI 字段,输入您将用作暂存区域的 S3 存储分区的 URI
    • Amazon Redshift Schema 字段,输入您想要迁移的表所属的 Amazon Redshift 架构。
    • Table name patterns 字段,指定与数据库架构中的表名匹配的名称或模式。您可以使用正则表达式指定采用以下格式的模式:<table1Regex>;<table2Regex>。此模式应遵循 Java 正则表达式语法。

    新的 Amazon Redshift 迁移数据源详细信息

    • (可选)展开 Advanced 部分,并为转移作业配置运行通知。转移作业运行通知目前为 Alpha 版

      • Cloud Pub/Sub topic 字段,输入您的主题名称,例如 projects/myproject/topics/mytopic
      • 勾选 Send email notifications,让系统在转移作业运行失败时发送电子邮件通知。
      • 设置传输时请勿勾选 Disabled。请参阅处理传输作业以停用现有传输。

      Cloud Pub/Sub 主题

  5. 点击 Add

  6. 出现提示时点击 Allow,以授予 BigQuery Data Transfer Service 管理您的转移作业的权限。您必须在浏览器中允许来自 bigquery.cloud.google.com 的弹出式窗口,这样才能看到权限窗口。

    允许转移作业

  7. 网页界面随即显示所有转移作业设置的详细信息,包括此转移作业的 Resource name

    转移作业确认

CLI

输入 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 \
--params='parameters'

其中:

  • project_id 是您的 Google Cloud Platform 项目 ID。如果未指定 --project_id,则系统会使用默认项目。
  • data_source 是数据源:redshift
  • dataset 是转移作业配置的 BigQuery 目标数据集。
  • name 是转移作业配置的显示名。转移作业名称可以是任何容易辨识的值,让您以后在需要修改时能够轻松识别。
  • parameters 包含所创建的转移作业配置的参数(采用 JSON 格式)。例如:--params='{"param":"param_value"}'。对于 Amazon Redshift 迁移,必须提供 content_owner_idtable_suffix 参数。

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 资源实例。

配额和限制

对于每个加载作业、每个表,BigQuery 有 15 TB 的加载配额。Amazon Redshift 会在内部执行表数据压缩,因此实际导出的表大小会超过 Amazon Redshift 报告的表大小。如果您打算迁移 15 TB 以上的表,请先联系 bq-dts-support@google.com

请注意,使用此服务可能会产生 Google 之外的费用。如需了解详情,请查看 Amazon RedshiftAmazon S3 的价格页面。

由于 Amazon S3 的一致性模型要求,向 BigQuery 转移的作业中可能不包括某些文件。

后续步骤

此页内容是否有用?请给出您的反馈和评价:

发送以下问题的反馈:

此网页
需要帮助?请访问我们的支持页面