Amazon Redshift 中的数据迁移到MaxCompute中经常需要先卸载到S3中,再到阿里云对象存储OSS中,大数据计算服务MaxCompute然后再通过外部表的方式直接读取OSS中的数据。
如下示意图:
本文以SQL Workbench/J工具来连接Reshift进行案例演示,其中用了Reshift官方的Query editor发现经常报一些奇怪的错误。建议使用SQL Workbench/J。
如果在配置过程中发现一只connection time out,需要在ecs的vpc安全组中配置安全策略。具体详见:https://docs.aws.amazon.com/zh_cn/redshift/latest/gsg/rs-gsg-authorize-cluster-access.html
方式一:在AWS指定的query editor中进行数据预览,如下所示:
方式二:使用Workbench/J进行数据预览,如下图所示:
具体Workbench/J的下载和配置详见:https://docs.aws.amazon.com/zh_cn/redshift/latest/mgmt/connecting-using-workbench.html
(下图为JDBC驱动下载和JDBC URL查看页面)
在卸载数据到S3之前一定要确保IAM权足够,否则如果您在运行 COPY、UNLOAD 或 CREATE LIBRARY 命令时收到错误消息 S3ServiceException: Access Denied,则您的集群对于 Amazon S3 没有适当的访问权限。如下:
以默认管道符号(|)的方式将数据卸载到对应的S3存储桶中,并以venue_为前缀进行存储,如下:
unload ('select * from venue') to 's3://aws2oss/venue_' iam_role '<新建的redshiftunload角色对应的ARN>'; --parallel off; --连续卸载,UNLOAD 将一次写入一个文件,每个文件的大小最多为 6.2 GB
执行效果图如下:
进入Amazon S3对应的存储桶中可以查看到有两份文件,且以venue_为前缀的,可以打开文件查看下数据。
数据如下,以管道字符(|)分隔:
要将相同的结果集卸载到制表符分隔的文件中,请发出下面的命令:
unload ('select * from venue') to 's3://aws2oss/venue_' iam_role '<新建的redshiftunload角色对应的ARN>' delimiter as '\t';
打开文件可以预览到数据文件如下:
----为了MaxCompute更方便的读取数据,我们采用以逗号(,)分隔--
unload ('select * from venue') to 's3://aws2oss/venue_' iam_role '<新建的redshiftunload角色对应的ARN>' delimiter as ',' NULL AS '0';
更多关于unload的命令说明详见:https://docs.aws.amazon.com/zh_cn/redshift/latest/dg/r_UNLOAD.html
在线迁移工具只支持同一个国家的数据源,针对不同国家数据源迁移建议用户采用OSS迁移工具,自己部署迁移服务并且购买专线来完成,详见:https://help.aliyun.com/document_detail/56990.html
OSS提供了S3 API的兼容性,可以让您的数据从AWS S3无缝迁移到阿里云OSS上。从AWS S3迁移到OSS后,您仍然可以使用S3 API访问OSS。更多可以详见S3迁移教程。
① 执行在线迁移任务过程中,读取Amazon S3数据会产生公网流出流量费,该费用由Amazon方收取。
② 在线迁移默认不支持跨境迁移数据,若有跨境数据迁移需求需要提交工单来申请配置任务的权限。
接下来以RAM子账号来演示Amazon S3数据迁移到Aliyun OSS上。
step1:进入IAM,选择添加用户。
![image.png]
step2:新增用户并勾选创建AK。
step3:选择直接附加现有策略,并赋予AmazonS3ReadOnlyAccess权限。
step4:记录AK信息,在数据迁移中会用到。
迁移会占用源端和目的端的网络资源;迁移需要检查源端和目的端文件,如果存在文件名相同且源端的最后更新时间少于目的端,会进行覆盖。
【创建源地址:】
具体配置项说明详见:https://help.aliyun.com/document_detail/95159.html
【创建目标地址:】
具体配置项说明详见:https://help.aliyun.com/document_detail/95159.html
从左侧tab页面中找到迁移任务,并进入页面,点击创建迁移任务。
![image.png]
---->OSS中的数据如下:
在查询OSS上数据之前,需要对将OSS的数据相关权限赋给MaxCompute的访问账号,授权详见授权文档。
MaxCompute需要直接访问OSS的数据,前提需要将OSS的数据相关权限赋给MaxCompute的访问账号,您可通过以下方式授予权限:
在DataWorks中创建外部表,如下图所示:
创建MaxCompute外部表DDL语句:
CREATE EXTERNAL TABLE IF NOT EXISTS venue_external ( VENUEID bigint, VENUENAME string, VENUECITY string, VENUESTATE string, VENUESEATS bigint ) STORED BY 'com.aliyun.odps.CsvStorageHandler' -- (1) WITH SERDEPROPERTIES ( 'odps.properties.rolearn'='acs:ram::*****:role/aliyunodpsdefaultrole' ) -- (2) LOCATION 'oss://oss-cn-shanghai-internal.aliyuncs.com/redshift2odps/s3/'; -- (3)(4)
可以直接查询返回结果:
select * from venue_external limit 10;
DataWorks上执行的结果如下图所示:
如果后续还需要做复杂的查询且数据量特别大的情况下,建议将外部表转换为内部表,具体示意如下:
create table if not exists venue as select * from venue_external;