Amazon Redshift數據遷移到MaxCompute

Amazon Redshift數據遷移到MaxCompute

Amazon Redshift 中的數據遷移到MaxCompute中常常須要先卸載到S3中,再到阿里雲對象存儲OSS中,大數據計算服務MaxCompute而後再經過外部表的方式直接讀取OSS中的數據。
以下示意圖:html

前提條件

本文以SQL Workbench/J工具來鏈接Reshift進行案例演示,其中用了Reshift官方的Query editor發現常常報一些奇怪的錯誤。建議使用SQL Workbench/J。sql

  • 配置新鏈接,選擇新建的Driver,並複製JDBC url地址、數據庫用戶名和密碼並勾選Autocommit。

若是在配置過程當中發現一隻connection time out,須要在ecs的vpc安全組中配置安全策略。具體詳見:https://docs.aws.amazon.com/zh_cn/redshift/latest/gsg/rs-gsg-authorize-cluster-access.html數據庫

Amazon Redshift數據預覽

方式一:在AWS指定的query editor中進行數據預覽,以下所示:編程

方式二:使用Workbench/J進行數據預覽,以下圖所示:
具體Workbench/J的下載和配置詳見:https://docs.aws.amazon.com/zh_cn/redshift/latest/mgmt/connecting-using-workbench.html
(下圖爲JDBC驅動下載和JDBC URL查看頁面)安全

卸載數據到Amazon S3

在卸載數據到S3以前必定要確保IAM權足夠,不然若是您在運行 COPY、UNLOAD 或 CREATE LIBRARY 命令時收到錯誤消息 S3ServiceException: Access Denied,則您的集羣對於 Amazon S3 沒有適當的訪問權限。以下:網絡

建立 IAM 角色以容許 Amazon Redshift 集羣訪問 S3服務

  • step2:選擇Redshift服務,並選擇Redshift-Customizable

  • 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

執行效果圖以下:阿里雲

進入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';

![image](https://yqfile.alicdn.com/35ab2c62ec27cec6a7191f473cc48a4d33e2693b.png)

更多關於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]![image](https://yqfile.alicdn.com/418cb7388cd7c30228e2f00d577b016494eacb1e.png)


step2:新增用戶並勾選建立AK。<br />
![image](https://yqfile.alicdn.com/b4db4d59eb21de1585cc56959fe40ec8ea0926c8.png)


step3:選擇直接附加現有策略,並賦予AmazonS3ReadOnlyAccess權限。<br />
![image](https://yqfile.alicdn.com/90101d5647d1ab6e255df5cd452c09b7181bb785.png)

step4:記錄AK信息,在數據遷移中會用到。<br />
![image](https://yqfile.alicdn.com/4d720ef229cb602e2d9465af9b550f9a11a5a873.png)


<a name="75e5510f"></a>
### Aliyun OSS前提工做
* 阿里雲OSS相關操做,新建立bucket:

![image](https://yqfile.alicdn.com/3f74b62b51378bb895379f0b16154d1344601fbb.png)

* 建立RAM子帳號並授予OSS bucket的讀寫權限和在線遷移管理權限。

![image](https://yqfile.alicdn.com/0681facd0f5c395c03c66edab58222975a09d185.png)

<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 />
![image](https://yqfile.alicdn.com/756dd4640c37dd838fac947d05f7f0639e1ff896.png)
![image](https://yqfile.alicdn.com/36ba74a73a8654c0c142c3311c94e996881ffabe.png)


具體配置項說明詳見:[https://help.aliyun.com/document_detail/95159.html](https://help.aliyun.com/document_detail/95159.html?spm=a2c4g.11186623.6.561.34e047f6yvZnaw)<br />**【建立目標地址:】**<br />
![image](https://yqfile.alicdn.com/bda8b95fff45785f59eec1e134d996cc54b36caa.png)
![image](https://yqfile.alicdn.com/b7db1f32b70a247a5deeaed80bb7470fd95eb3e4.png)

具體配置項說明詳見:[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]![image](https://yqfile.alicdn.com/43d1c7ed5dd4ccdfee1c91c5d278342f8e2e5f10.png)

![image](https://yqfile.alicdn.com/01005342382591b02f8982e5e6eea15c9582ae71.png)


---->OSS中的數據以下:<br />
![image](https://yqfile.alicdn.com/d5aecc688767d37557767e90bc31357af6c5b9ca.png)

<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 />
![image](https://yqfile.alicdn.com/9101a85ec81abe307ffc06c1b20cd5537ba661ef.png)


建立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 />
![image](https://yqfile.alicdn.com/35eccc5462f3ceb546ad4d8569a0696d8cf72188.png)


<a name="189c0f78"></a>
## 建立內部表固化數據
若是後續還須要作複雜的查詢且數據量特別大的狀況下,建議將外部錶轉換爲內部表,具體示意以下:<br />create table if not exists venue as select * from venue_external;<br />
![image](https://yqfile.alicdn.com/3ea66df279e5ad4fa626f97a6423bcce6dd0db5b.png)

 



本文做者:禕休

閱讀原文

本文爲雲棲社區原創內容,未經容許不得轉載。

相關文章
相關標籤/搜索