自动迁移Amazon Redshift数据至AnalyticDB for PostgreSQL

更新时间:

阿里云提供了自动化迁移工具,支持DDL转换,可以帮助您将Amazon Redshift数据自动迁移至AnalyticDB for PostgreSQL

准备工作

  • 需要迁移的Amazon Redshift实例。

  • 已开通Amazon S3服务并为其创建临时IAM角色

  • IAM角色赋予S3权限和Amazon Redshift权限。

  • IAM角色的信任关系中添加下方信息,约10分钟生效。

    {
            "Effect": "Allow",
            "Principal": {
                  "Service": "redshift.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
    }
  • Amazon Redshift中添加IAM角色为关联角色。

  • AnalyticDB for PostgreSQL实例和OSS存储空间Bucket位于同一地域。

规格选型

以下内容将指导您如何根据源Amazon Redshift实例规格选择目标AnalyticDB PostgreSQL的规格。

Amazon Redshift实例由Leader Node和多个Compute Node组成。

  • Leader Node:相当于AnalyticDB PostgreSQLMaster节点,负责与客户端通信,分析和制定执行计划,实施数据库操作。

  • Compute Node:相当于AnalyticDB PostgreSQLSegment节点,由多个Node Slices组成。每个Node Slices都相当于AnalyticDB PostgreSQL的单个Segment节点,负责实际的数据存储和查询计算。

当创建AnalyticDB PostgreSQL实例时,如果不知道如何选择规格,根据Amazon Redshift中每个Node Slice的规格来选择合适的AnalyticDB PostgreSQL节点规格。

示例

Amazon Redshift实例包含4Compute Node(每个Node下包含两个Node Slices),每个Node Slices规格为216 GB,存储为1 TB。

根据源Amazon Redshift实例规格,您在创建AnalyticDB PostgreSQL实例时,可以选择8Segment节点,节点规格为2C16GB;每个Segment节点的存储容量选择1000 GB。

说明
  • 创建AnalyticDB PostgreSQL实例具体操作,请参见创建实例

  • 存储磁盘类型建议选择ESSD云盘,I/O性能比高效云盘更佳。

操作步骤

步骤一:表DDL导出与转换

通过调用adbpg-redshift-migration.jar工具,可以实现从Amazon Redshift中导出DDL,并将其自动转换为与AnalyticDB for PostgreSQL兼容的格式。表DDL导出与转换命令示例如下,请根据实际情况替换相关参数值。

java -jar adbpg-redshift-migration.jar -d redshift -h r-red.cjbgr.cn-north-1.redshift.amazonaws.com.cn -p 5439 -U awsuser -w Lrz**** --transform
重要

执行该命令前需要配置Amazon Redshift所在VPC的安全组规则,确保迁移工具所属的IP能够通过网络访问Amazon Redshift数据库的服务端口。

参数说明

  • -d:指定需要下载或转换的数据库类型,该步骤指定为redshift

  • -h:指定Redshift实例的Host,可在Redshift实例控制台界面的JDBC URL模块中获取。如jdbc:redshift://r-red.cjbgr.cn-north-1.redshift.amazonaws.com.cn:5439/devr-red.cjbgr.cn-north-1.redshift.amazonaws.com.cn即为Host。

  • -p:访问端口,Redshift固定为5439。

  • -U:Redshift的超级用户名称,通常为创建时的awsuser。

  • -w:Redshift的超级用户对应的密码。

  • --transform:进行DDL的下载和转换。下载的DDL存储于名为ddl_dump_20250227174322.txt的文件中,文件名称中的数字串代表下载时的时间戳。转换后的DDL则保存在ddl_transform_20250227202402.txt的文件中,数字串同样表示下载时的时间戳。

AnalyticDB for PostgreSQL中创建用于装载Amazon Redshift数据的数据库、模式和用户信息后,需检查文件ddl_transform_20250227202402.txt中的DDL是否存在问题。确认无误后,即可在 AnalyticDB for PostgreSQL运行该文件的SQL创建对应表结构。

步骤二:将Amazon Redshift的数据自动上传至Amazon S3

执行如下命令(以下命令仅为示例,请根据实际情况替换相关参数值),将Amazon Redshift数据导出并上传至Amazon S3。上传至S3任务结束后,将生成两个文件:succeed_transfer_tables_20250228144558.txt表示上传成功的表,failed_transfer_tables_20250228144558.txt表示上传失败的表。

java -jar adbpg-redshift-migration.jar -d redshift -h host-info -p 5432 -U dbuser -w Lrz**** -o s3 -b dbuser-bj --iam-account account-info --iam-role role-info --root-dir rootdir --format parquet --use-iam --china-region --jobs 8 -f tablelist.txt --upload

参数说明

  • -o:指定要使用的云存储服务,Redshift通常使用S3。

  • -b:Amazon S3 Bucket名称。

  • --iam-account:IAM角色的账号ID,通常为12位数字,可在IAM角色的ARN中获取。例如,arn:aws-cn:iam::123456789012:role/lrz2中的123456789012

  • --iam-role:IAM角色名称,例如arn:aws-cn:iam::123456789012:role/lrz2中的lrz2

  • --root-dir:需要在S3上存储数据的根目录。

  • --format:数据导出格式,支持CSV、PARQUET、JSON格式,暂不支持修改CSV格式中的行分隔符。推荐使用PARQUET(adbpg-redshift-migration迁移工具的默认数据格式),导出数据速度快且安全。

  • --use-iam:使用IAM角色上传数据。

  • --china-region:如果是中国区则需要添加该参数,其它地域则无需添加。

  • --jobs:并行上传。

  • -f:指定需要上传的表名的文件名称。文件内每一行仅写入一张表的表名,表名格式为database.schema.table。通常可使用--full来上传Redshift中数据库的全部表。

  • --upload:使用上传模式。

步骤三:将数据从S3迁移至OSS

将表数据上传至S3后,使用阿里云的OSS在线迁移服务将数据从S3迁移至OSS存储

步骤四:OSS数据自动导入至AnalyticDB for PostgreSQL

数据迁移到OSS后,执行以下命令(以下命令仅为示例,请根据实际情况替换相关参数值)将OSS数据导入到AnalyticDB for PostgreSQL

重要

执行以下命令需要您提交工单联系技术支持开通超级用户权限。

java -jar adbpg-redshift-migration.jar -d adbpg -h gp-2ze312*******o-master.gpdb.rds.aliyuncs.com -p 5432 -U dbuser -w Lrz**** -o oss -e oss-cn-beijing-internal.aliyuncs.com -i "LTAI5tP*******rCrdj" -k "4k3ntmvK*******M2mqjQcuOy" -b dbuser-bj --root-dir rootdir --format parquet --jobs 8 -f tablelist.txt --download

参数说明

  • -d:指定需要下载或转换的数据库类型,该步骤指定为adbpg

  • -h:AnalyticDB for PostgreSQL实例的Host。您可从外网地址获取Host。

  • -p:AnalyticDB for PostgreSQL访问端口,固定值为5432。

  • -U:AnalyticDB for PostgreSQL初始账号名称。

  • -w:AnalyticDB for PostgreSQL初始账号对应的密码。

  • -o:指定需要使用的云存储,此处为OSS。

  • -e:数据所在的OSS BucketEndpoint

  • -i :OSSAccessKey ID

  • -k:OSSAccessKey Secret。

  • -b:OSSBucket

  • --root-dir:指定OSS根目录。

  • -f:指定要下载的表名的文件名称。文件内每一行仅写入一张表的表名,表名格式为database.schema.table。通常直接使用上传时生成的文件,例如succeed_transfer_tables_20250228144558.txt。

  • --new-name-file: 使用该参数指定AnalyticDB for PostgreSQL中对应的表名的文件。在AnalyticDB for PostgreSQL中表名与Redshift中表名不一致的情况下使用该参数。文件内每一行仅写入一张表名,表名格式为database.schema.table,每一行与-f 指定文件中的每一行表名一一对应。

  • --download:使用下载模式。

相关文档

手动迁移请查看Amazon Redshift应用和数据迁移至AnalyticDB PostgreSQL