Amazon Redshift 中的数据迁移到MaxCompute中常常须要先卸载到S3中,再到阿里云对象存储OSS中,大数据计算服务MaxCompute而后再经过外部表的方式直接读取OSS中的数据。
以下示意图:
html
本文以SQL Workbench/J工具来链接Reshift进行案例演示,其中用了Reshift官方的Query editor发现常常报一些奇怪的错误。建议使用SQL Workbench/J。sql
若是在配置过程当中发现一只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 没有适当的访问权限。以下:
网络
执行unload命令卸载数据工具
以默认管道符号(|)的方式将数据卸载到对应的S3存储桶中,并以venue_为前缀进行存储,以下:大数据
unload ('select * from venue') to 's3://aws2oss/venue_' iam_role '<新建的redshiftunload角色对应的ARN>'; --parallel off; --连续卸载,UNLOAD 将一次写入一个文件,每一个文件的大小最多为 6.2 GB
执行效果图以下:阿里云
进入Amazon S3对应的存储桶中能够查看到有两份文件,且以venue_为前缀的,能够打开文件查看下数据。
url
数据以下,以管道字符(|)分隔:
以指标符导出数据
要将相同的结果集卸载到制表符分隔的文件中,请发出下面的命令:
unload ('select * from venue') to 's3://aws2oss/venue_' iam_role '<新建的redshiftunload角色对应的ARN>' delimiter as '\t';
打开文件能够预览到数据文件以下:
----为了MaxCompute更方便的读取数据,咱们采用以逗号(,)分隔--`
sql
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](https://docs.aws.amazon.com/zh_cn/redshift/latest/dg/r_UNLOAD.html) <a name="dbfe35f7"></a> # Amazon S3无缝切换到OSS > 在线迁移工具只支持同一个国家的数据源,针对不一样国家数据源迁移建议用户采用OSS迁移工具,本身部署迁移服务而且购买专线来完成,详见:[https://help.aliyun.com/document_detail/56990.html](https://help.aliyun.com/document_detail/56990.html?spm=5176.208357.1107607.35.68b6390frmzT6x) OSS提供了S3 API的兼容性,可让您的数据从AWS S3无缝迁移到阿里云OSS上。从AWS S3迁移到OSS后,您仍然可使用S3 API访问OSS。更多能够详见[S3迁移教程](https://help.aliyun.com/document_detail/95127.html?spm=a2c4g.11186623.2.12.65cd6ac6kayaMa#concept-pyw-sjg-qfb)。 <a name="66a56ac6"></a> ## 背景信息 ① 执行在线迁移任务过程当中,读取Amazon S3数据会产生公网流出流量费,该费用由Amazon方收取。<br />② 在线迁移默认不支持跨境迁移数据,如有跨境数据迁移需求须要提交工单来申请配置任务的权限。 <a name="88210852"></a> ## 准备工做 <a name="ed3070e2"></a> ### Amazon S3前提工做 > 接下来以RAM子帐号来演示Amazon S3数据迁移到Aliyun OSS上。 * 预估迁移数据,进入管控台中确认S3中有的存储量与文件数量。 * 建立迁移密钥,进入AWS IAM页面中建立用户并赋予AmazonS3ReadOnlyAccess权限。 * 添加用户-->访问类型(编程访问,AK信息)-->赋予AmazonS3ReadOnlyAccess权限-->记录AK信息。 step1:进入IAM,选择添加用户。<br />![image.png] step2:新增用户并勾选建立AK。<br />  step3:选择直接附加现有策略,并赋予AmazonS3ReadOnlyAccess权限。<br />  step4:记录AK信息,在数据迁移中会用到。<br />  <a name="75e5510f"></a> ### Aliyun OSS前提工做 * 阿里云OSS相关操做,新建立bucket:  * 建立RAM子帐号并授予OSS bucket的读写权限和在线迁移管理权限。  <a name="582bdcd8"></a> ## 迁移实施 > 迁移会占用源端和目的端的网络资源;迁移须要检查源端和目的端文件,若是存在文件名相同且源端的最后更新时间少于目的端,会进行覆盖。 * 进入阿里云数据在线迁移控制台:[https://mgw.console.aliyun.com/?spm=a2c4g.11186623.2.11.10fe1e02iYSAhv#/job?_k=6w2hbo](https://mgw.console.aliyun.com/?spm=a2c4g.11186623.2.11.10fe1e02iYSAhv#/job?_k=6w2hbo),并以《Aliyun OSS前提工做》中新建的子帐号登陆。 * 进入数据迁移服务-数据地址-数据类型(其余),以下: **【建立源地址:】**<br />   具体配置项说明详见:[https://help.aliyun.com/document_detail/95159.html](https://help.aliyun.com/document_detail/95159.html?spm=a2c4g.11186623.6.561.34e047f6yvZnaw)<br />**【建立目标地址:】**<br />   具体配置项说明详见:[https://help.aliyun.com/document_detail/95159.html](https://help.aliyun.com/document_detail/95159.html?spm=a2c4g.11186623.6.561.34e047f6yvZnaw) <a name="b4361e56"></a> ## 建立迁移任务 从左侧tab页面中找到迁移任务,并进入页面,点击建立迁移任务。<br />![image.png]  ---->OSS中的数据以下:<br />  <a name="ebdc286b"></a> # MaxCompute直接加载OSS数据 <a name="98a315c0"></a> ## 受权 在查询OSS上数据以前,须要对将OSS的数据相关权限赋给MaxCompute的访问帐号,受权详见[受权文档](https://help.aliyun.com/document_detail/45389.html?spm=a2c4g.11186623.6.702.62552a95jceToT)。<br />MaxCompute须要直接访问OSS的数据,前提须要将OSS的数据相关权限赋给MaxCompute的访问帐号,您可经过如下方式授予权限: 1. 当MaxCompute和OSS的owner是同一个帐号时,能够直接登陆阿里云帐号后,[点击此处完成一键受权](https://ram.console.aliyun.com/?spm=a2c4g.11186623.2.16.4f761cdfaNk5XH#/role/authorize?request=%7B%22Requests%22:%20%7B%22request1%22:%20%7B%22RoleName%22:%20%22AliyunODPSDefaultRole%22,%20%22TemplateId%22:%20%22DefaultRole%22%7D%7D,%20%22ReturnUrl%22:%20%22https:%2F%2Fram.console.aliyun.com%2F%22,%20%22Service%22:%20%22ODPS%22%7D)。 1. 若MaxCompute和OSS不是同一个帐号,此处需由OSS帐号登陆进行受权,详见[文档](https://help.aliyun.com/document_detail/45389.html?spm=a2c4g.11186623.6.702.62552a95jceToT)。 <a name="a6dbe7f5"></a> ## 建立外部表 在DataWorks中建立外部表,以下图所示:<br />  建立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)
* com.aliyun.odps.CsvStorageHandler是内置的处理CSV格式文件的StorageHandler,它定义了如何读写CSV文件。您只需指明这个名字,相关逻辑已经由系统实现。若是用户在数据卸载到S3时候自定义了其余分隔符那么,MaxCompute也支持自定义分隔符的Handler,详见:[https://help.aliyun.com/document_detail/45389.html](https://help.aliyun.com/document_detail/45389.html) 能够直接查询返回结果:<br />select * from venue_external limit 10; DataWorks上执行的结果以下图所示:<br />  <a name="189c0f78"></a> ## 建立内部表固化数据 若是后续还须要作复杂的查询且数据量特别大的状况下,建议将外部表转换为内部表,具体示意以下:<br />create table if not exists venue as select * from venue_external;<br /> 
原文连接 本文为云栖社区原创内容,未经容许不得转载。