1 方案概述
本文将介绍如何通过公网环境迁移Amazon Redshift数据到阿里云MaxCompute服务当中。 本方案的总体迁移流程如下:
第一, 将Amazon Redshift 中的数据导出到Amazon S3存储上; 第二, 借助阿里云在线迁移服务(Data Online Migration)从AWS S3将数据迁移到阿里云OSS上; 第三, 将数据从阿里云OSS加载到同Region的MaxCompute项目中,并进行校验数据完整性。
2 前提条件
准备Redshift的集群环境及数据环境; 使用已有的Redshift集群或创建新的Redshift集群:
在Redshift集群中准备好需要迁移的数据,本方案中在public schema中准备了TPC-H数据集进行方案介绍:
准备MaxCompute的项目环境; 在阿里云Region创建MaxCompute项目,这里以新加坡Region为例,创建了作为迁移目标的MaxCompute项目:
3 Redshift导出数据到S3
3.1 Unload简介
3.1.1 命令介绍
AWS Redshift支持Role-based access control和Key-based access control两种认证方式实现Redshift UNLOAD命令写入数据到S3。 基于IAM Role的UNLOAD命令:
unload ('select * from venue')
to 's3://mybucket/tickit/unload/venue_'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';
基于access_key的UNLOAD命令:
unload ('select * from venue')
to 's3://mybucket/tickit/venue_'
access_key_id ''
secret_access_key ''
session_token '';
本方案选择使用IAM Role方式进行数据导出。
3.1.2 默认格式导出
unload默认导出数据的格式为 | 符合分隔的文本文件,命令如下:
unload ('select * from customer')
to 's3://xxx-bucket/unload_from_redshift/customer/customer_'
iam_role 'arn:aws:iam::xxx:role/redshift_s3_role';
执行成功后,在S3对应的bucket目录下可以查到文件文件:
文件样例如下:
3.1.3 Parquet格式导出
Unload同时支持以Parquet格式导出到S3,便于其他分析引擎直接进行读取消费:
unload ('select * from customer')
to 's3://xxx-bucket/unload_from_redshift/customer_parquet/customer_'
FORMAT AS PARQUET
iam_role 'arn:aws:iam::xxxx:role/redshift_s3_role';
执行成功后,s3对应bucket目录下生成了parquet格式的文件。
得益于Parquet文件的数据压缩特性,可以看到Parquet文件比文本文件大小更小,本方案选择Parquet格式作为数据导出和跨云迁移的数据格式。
3.2 创建可以读写S3的IAM 角色
3.2.1 新建Redshift use case的IAM角色
进入 https://console.aws.amazon.com/iam/home?region=ap-southeast-1#/roles( 以新加坡Region为例)创建角色。