自动迁移Amazon Redshift数据至AnalyticDB for PostgreSQL
阿里云提供了自动化迁移工具,支持DDL转换,可以帮助您将Amazon Redshift数据自动迁移至AnalyticDB for PostgreSQL。
准备工作
规格选型
以下内容将指导您如何根据源Amazon Redshift实例规格选择目标AnalyticDB PostgreSQL版的规格。
Amazon Redshift实例由Leader Node和多个Compute Node组成。
Leader Node:相当于AnalyticDB PostgreSQL版的Master节点,负责与客户端通信,分析和制定执行计划,实施数据库操作。
Compute Node:相当于AnalyticDB PostgreSQL版的Segment节点,由多个Node Slices组成。每个Node Slices都相当于AnalyticDB PostgreSQL版的单个Segment节点,负责实际的数据存储和查询计算。
当创建AnalyticDB PostgreSQL版实例时,如果不知道如何选择规格,根据Amazon Redshift中每个Node Slice的规格来选择合适的AnalyticDB PostgreSQL版节点规格。
示例
源Amazon Redshift实例包含4个Compute Node(每个Node下包含两个Node Slices),每个Node Slices规格为2核16 GB,存储为1 TB。
根据源Amazon Redshift实例规格,您在创建AnalyticDB PostgreSQL版实例时,可以选择8个Segment节点,节点规格为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/dev
中r-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 Bucket的Endpoint。
-i :OSS的AccessKey ID。
-k:OSS的AccessKey Secret。
-b:OSS的Bucket。
--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:使用下载模式。