Amazon Redshift 中的數據遷移到MaxCompute中常常須要先卸載到S3中,再到阿里雲對象存儲OSS中,大數據計算服務MaxCompute而後再經過外部表的方式直接讀取OSS中的數據。
以下示意圖:html
前提條件
本文以SQL Workbench/J工具來鏈接Reshift進行案例演示,其中用了Reshift官方的Query editor發現常常報一些奇怪的錯誤。建議使用SQL Workbench/J。sql
下載Amazon Redshift JDBC驅動程序,推薦4.2 https://s3.amazonaws.com/reds...
在SQL Workbench/J中新建Drivers,選擇下載的驅動程序jar,並填寫Classname爲 com.amazon.redshift.jdbc42.Driver。
配置新鏈接,選擇新建的Driver,並複製JDBC url地址、數據庫用戶名和密碼並勾選Autocommit。數據庫
若是在配置過程當中發現一隻connection time out,須要在ecs的vpc安全組中配置安全策略。具體詳見:https://docs.aws.amazon.com/z...編程
Amazon Redshift數據預覽
方式一:在AWS指定的query editor中進行數據預覽,以下所示:安全
方式二:使用Workbench/J進行數據預覽,以下圖所示:
具體Workbench/J的下載和配置詳見:https://docs.aws.amazon.com/z...
(下圖爲JDBC驅動下載和JDBC URL查看頁面)網絡
卸載數據到Amazon S3
在卸載數據到S3以前必定要確保IAM權足夠,不然若是您在運行 COPY、UNLOAD 或 CREATE LIBRARY 命令時收到錯誤消息 S3ServiceException: Access Denied,則您的集羣對於 Amazon S3 沒有適當的訪問權限。以下:工具
建立 IAM 角色以容許 Amazon Redshift 集羣訪問 S3服務
step1:進入https://console.aws.amazon.co...,建立role。大數據
step2:選擇Redshift服務,並選擇Redshift-Customizable阿里雲
step3:搜索策略S3,找到AmazonS3FullAccess,點擊下一步。url
step4:命名角色爲redshiftunload。
step5:打開剛定義的role並複製角色ARN。(unload命令會用到)
step6:進入Redshift集羣,打開管理IAM角色
step7:選擇剛定義的redshiftunload角色並應用更改。
執行unload命令卸載數據
以管道分隔符導出數據
以默認管道符號(|)的方式將數據卸載到對應的S3存儲桶中,並以venue_爲前綴進行存儲,以下:
unload ('select * from venue')
to 's3://aws2oss/venue_'
iam_role '<新建的redshiftunload角色對應的ARN>';
--parallel off; --連續卸載,UNLOAD 將一次寫入一個文件,每一個文件的大小最多爲 6.2 GB
執行效果圖以下:
image
進入Amazon S3對應的存儲桶中能夠查看到有兩份文件,且以venue_爲前綴的,能夠打開文件查看下數據。
數據以下,以管道字符(|)分隔:
以指標符導出數據
要將相同的結果集卸載到製表符分隔的文件中,請發出下面的命令:
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
在線遷移工具只支持同一個國家的數據源,針對不一樣國家數據源遷移建議用戶採用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:*: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;