通过数据迁移服务MMS(MaxCompute Migration Service)迁移数据前,需新增并启动Redshift数据源,确保数据源与MMS服务网络连通,并将Redshift的元数据同步至MMS服务,以便配置后续的迁移作业。
适用范围
支持Amazon Redshift集群模式和Serverless模式。
支持全量数据迁移。
迁移费用
MMS数据迁移会消耗各类资源从而产生费用,主要费用组成如下:
MMS操作 | 计费项 | 收费方 |
数据源运行过程(包括元数据同步) | 计算费用:Redshift端执行系统表查询产生。
| AWS Redshift |
任务迁移数据过程 | 计算费用:MaxCompute端产生Spark作业消耗计算资源。 | 阿里云MaxCompute |
Redshift UNLOAD到Amazon Simple Storage Service(S3) | 存储费用:S3临时目录存储费用。 | AWS |
MaxCompute从S3读取数据 | 流量费用:S3数据流出时产生。 | AWS |
迁移任务配置了"开启校验" | 计算费用:在Redshift和MaxCompute分别执行校验SQL语句产生。 | 阿里云MaxCompute和AWS Redshift |
网络配置 | 网络费用:
| 专线提供方或阿里云网络 |
建议选择包年包月计算资源和数据传输独享资源来执行迁移作业,以降低迁移成本。
操作步骤
目标端MaxCompute项目已完成准备工作。
步骤一:准备外部数据源
在Redshift端准备读取数据时,需要完成下表中的准备工作,详情及具体操作见下。
准备项 | 说明 |
Redshift集群或Serverless Workgroup | 确认已创建并处于可用状态 |
JDBC连接地址 | 用于MMS连接Redshift |
网络和安全组 | 确保MMS能够跨云访问Redshift |
AWS Access Key | 用于MaxCompute Spark读取S3临时数据 |
S3存储桶 | 存储迁移过程中的临时数据 |
IAM Role | 授权Redshift通过UNLOAD写入S3,需关联到集群或命名空间 |
数据库用户权限 | 系统表读取、迁移表读取、S3写入权限 |
确保Redshift集群或Serverless Workgroup已创建并处于可用状态。
获取JDBC连接地址
获取Redshift的JDBC连接地址,后续在MMS中新增数据源时需要填写。
集群模式格式:
jdbc:redshift://cluster-name.xxx.redshift.amazonaws.com:5439/Serverless模式格式:
jdbc:redshift://xxx.redshift-serverless.amazonaws.com:5439/
配置网络和安全组
MMS是阿里云服务,跨云访问AWS Redshift,需确保网络连通性。
以下为MMS通过公网访问(最简单的方式)AWS Redshift的示例:
确保Redshift已开启公开访问(Publicly accessible)。
将阿里云MMS的出口IP地址段添加到Redshift关联的安全组入站规则中。
安全组入站规则示例(公网访问):
类型
端口
源地址
说明
Redshift
5439
MMS出口IP
允许MMS访问Redshift
警告建议仅开放必要的IP地址段,避免使用0.0.0.0/0。
准备AWS Access Key
准备具有S3读取权限的AWS Access Key ID和Secret Access Key,用于MaxCompute Spark访问S3临时目录读取数据。
所需最小权限如下:
权限
说明
是否必需
s3:GetObject
读取S3临时目录中的数据文件
必需
s3:ListBucket
列出S3存储桶中的对象
必需
最小权限策略示例:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::my-bucket", "arn:aws:s3:::my-bucket/*" ] } ] }创建S3存储桶(临时目录)
创建用于存储迁移过程中临时数据的S3存储桶。
建议配置生命周期策略,自动清理临时数据以降低存储成本。
创建并关联IAM Role
创建允许Redshift写入S3的IAM Role,并将其关联到Redshift集群或Serverless配置中。
重要IAM Role必须关联Redshift 集群或 Serverless 配置,否则UNLOAD操作会报错
"The requested role is not associated to cluster"。所需S3权限
权限
说明
是否必需
s3:PutObject
Redshift UNLOAD将数据导出到S3
必需
s3:GetObject
Redshift读取S3数据
必需
s3:ListBucket
spark-redshift查询存储桶内容
必需
关联IAM Role到Redshift
集群模式和Serverless模式的关联方式不同:
集群模式
登录AWS Redshift控制台。
选择目标集群,单击操作(Actions)。
单击管理IAM角色(Manage IAM roles)。
选择创建的IAM Role,单击关联IAM角色(Associate IAM role),保存更改。
Serverless模式
登录AWS Redshift控制台。
在左侧导航选择Redshift Serverless。
选择命名空间(Namespaces),单击目标命名空间。
在安全和加密(Security and encryption)选项卡中,找到权限(Permissions)。
单击管理IAM角色(Manage IAM roles),添加创建的IAM Role,保存更改。
IAM Role 配置示例
信任关系策略(允许 Redshift 服务担任):
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "redshift.amazonaws.com", "redshift-serverless.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }最小权限策略(仅包含必需权限):
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::my-bucket", "arn:aws:s3:::my-bucket/*" ] } ] }
数据库用户权限
Redshift数据库用户需要具备以下权限:
权限类型
说明
系统表读取权限
访问
pg_class、pg_namespace、pg_attribute、pg_type、pg_constraint、svv_redshift_schemas等系统表的SELECT权限(普通用户默认拥有)表读取权限
对要迁移表的SELECT权限
S3写入权限
通过IAM Role授权Redshift写入S3临时目录
步骤二:新增数据源
登录MaxCompute控制台,在左上角选择地域。
在左侧导航栏,选择。
在数据源页签,单击新增数据源。
在弹出的MaxCompute服务关联角色对话框中,单击确认,即可创建成功。若未自动弹出该对话框,则表明该角色已创建。
在新增数据源页面,配置数据源信息,然后单击新增,完成数据源创建。
数据源基本信息
参数名
是否必填
说明
数据源名称
是
数据源名称,可自定义,不能包含字符、数字、汉字之外的特殊字符。
数据源类型
是
选择Redshift。
网络连接
是
选择需要使用的网络连接。
网络连接在MaxCompute 模块创建,用于MMS与VPC通信,最终连接数据源。
AWS Access Key ID
是
AWS访问密钥ID。用于MaxCompute Spark访问S3临时目录读取迁移数据。获取方式请参见AWS IAM创建访问密钥。
AWS Secret Access Key
是
AWS访问密钥。与Access Key ID共同使用,用于MaxCompute Spark访问S3临时目录。
Redshift JDBC URL
是
Redshift JDBC连接地址(不含数据库名和用户名密码)。格式:
jdbc:redshift://endpoint:5439/。集群模式示例:
jdbc:redshift://cluster-name.xxx.redshift.amazonaws.com:5439/。Serverless模式示例:
jdbc:redshift://xxx.redshift-serverless.amazonaws.com:5439/。
Redshift数据库名
是
Redshift数据库名称。
Redshift用户名
是
Redshift数据库用户名。
Redshift密码
是
Redshift数据库密码。用于 MMS 连接 Redshift 获取元数据(表结构、列信息、约束等)和执行 UNLOAD 操作导出数据到 S3。
S3临时目录区域
否
S3 临时目录所在的 AWS Region。显式指定可避免跨区域问题和自动发现延迟。示例:
us-east-1、us-west-2。S3 临时目录
是
spark-redshift 使用的 S3 临时目录,用于存储 UNLOAD 出来的临时数据。
格式:
s3a://bucket/path/。迁移完成后可配置 S3 生命周期策略自动清理临时数据。AWS IAM Role
是
Redshift 写入 S3 使用的 IAM Role。Redshift 使用此角色将数据 UNLOAD 到 S3 临时目录。
格式:
arn:aws:iam::account-id:role/role-name。创建方式请参见 AWS IAM 创建角色和 Redshift UNLOAD 文档。
默认目标MaxCompute项目
是
数据迁移时选择映射的目标项目,不可修改。
目标MaxCompute项目列表
否
若一个数据源的数据需要迁移到多个目标项目,需配置目标MaxCompute项目列表。
MaxCompute执行迁移作业的项目
是
迁移过程中,执行在MaxCompute上发起的Spark、SQL等迁移作业的项目,并使用该项目关联的默认计算Quota。
其他信息
以下参数均为可选,根据需要填写。
步骤三:同步元数据
数据源启动后会生成一个作业实例,实现数据源与MMS服务的连接,再将源数据同步至MMS服务,以便配置后续迁移作业。
该作业实例会占用4 CU计算资源。当数据源无任何等待运行或正在运行的迁移作业或元数据同步作业时,系统会关闭数据源,使用时需再次启动。
Redshift Serverless模式:元数据同步会查询 Redshift 系统表,产生查询费用。建议合理配置元数据定时更新周期以控制成本。
在数据源页签,单击目标数据源对应的操作列的更新元数据。
在数据源页签,可以查看目标数据源的运行状态。
若数据源的元数据存在变动,且启用了元数据定时更新,系统会按照配置的时间定时更新,无需手动进行元数据同步操作。
外部数据源配置完成后,创建迁移作业。
支持的数据类型
Redshift时间范围(4713 BC ~ 294276 AD)远大于MaxCompute(1 AD ~ 9999 AD)。
HLLSKETCH类型不支持迁移,包含此类型列的表无法迁移,需移除该列或使用其他近似去重方案。
数值类型
Redshift | 别名 | MaxCompute | 兼容性 |
SMALLINT | INT2 | SMALLINT | 兼容 |
INTEGER | INT, INT4 | INT | 兼容 |
BIGINT | INT8 | BIGINT | 兼容 |
DECIMAL(p,s) | NUMERIC | DECIMAL(p,s) | 兼容 |
REAL | FLOAT4 | FLOAT | 兼容 |
DOUBLE PRECISION | FLOAT8, FLOAT | DOUBLE | 兼容 |
字符类型
Redshift | 别名 | MaxCompute | 兼容性 |
CHAR(n) | CHARACTER, NCHAR | STRING | 兼容 |
VARCHAR(n) | CHARACTER VARYING | STRING | 兼容 |
TEXT | - | STRING | 兼容 |
日期时间类型
Redshift | 格式/说明 | MaxCompute | 备注 |
DATE |
| DATE | - |
TIME | 无时区 | STRING | MC 无 TIME 类型,转为字符串 |
TIMETZ | 带时区 | STRING | 转为字符串 |
TIMESTAMP | 无时区 | TIMESTAMP_NTZ | MC 精度到纳秒 |
TIMESTAMPTZ | 带时区 | TIMESTAMP | MC 精度到纳秒 |
其他类型
Redshift | 说明 | MaxCompute | 备注 |
BOOLEAN | 布尔类型 | BOOLEAN | 兼容 |
SUPER | JSON 超集类型 | STRING | 转为String |
VARBYTE(n) | 二进制,最大 16MB | BINARY | MC 最大 8MB |
GEOMETRY | 空间数据 | STRING | 转为String |
GEOGRAPHY | 地理数据 | STRING | 转为String,可用MC函数转为地理数据 |
使用限制
限制项 | Redshift | MaxCompute | 影响 |
HLLSKETCH类型 | 支持 | 不支持 | 包含此类型列的表无法迁移,需移除该列或使用其他近似去重方案 |
VARBYTE长度 | 最大16 MB | 最大8 MB | 超8 MB需处理 |
列数量 | 1,600 | 1,200 | 超出列数限制的表需拆分 |
自增列 | 支持IDENTITY | 不支持 | 迁移时丢失自增属性 |
常见问题
连接问题排查
JDBC连接失败
检查网络连接是否正确配置。
确认JDBC URL格式正确。
验证用户名和密码是否正确。
S3访问权限问题
确认AWS Access Key有S3读取权限。
确认IAM Role已正确关联到Redshift集群或Serverless命名空间。
检查S3存储桶策略是否允许访问。
性能优化建议
S3临时目录区域
建议将S3临时目录创建在与Redshift同一区域,避免跨区域数据传输。
显式配置
redshift.tempdir.region参数,避免自动发现延迟。
S3生命周期策略
建议为S3临时目录配置生命周期策略,自动清理过期数据。
可设置7天后自动删除临时文件。