天天看點

阿裡雲大資料利器之-RDS遷移到Maxcompute實作自動分區

<b>一,将rds中的資料定時每天同步到maxcompute中,自動建立按天日期的分區。</b>

這裡就要用到大資料開發套件-資料內建的功能,我們采用界面化的配置。

如圖地方,設定maxcompute的分區格式

阿裡雲大資料利器之-RDS遷移到Maxcompute實作自動分區

一般配置到這個地方的時候,預設是系統自帶時間參數:${bdp.system.bizdate} 格式是yyyymmdd。也就是說在排程執行這個任務的時候,這個分區會被自動替換為 **任務執行日期的前一天**,相對使用者比較友善的,因為一般使用者業務資料是目前跑前一天的業務資料,這個日期也叫業務日期。

如圖

阿裡雲大資料利器之-RDS遷移到Maxcompute實作自動分區

如果使用者想使用當天任務運作的日期作為分區值,需要自定義這個參數,方法如圖,也可以參考文檔

https://help.aliyun.com/document_detail/30281.html?spm=5176.product30254.6.604.sdunjf

自定義的參數,格式非常靈活,日期是當天日期,使用者可以自由選擇哪一天,以及格式。

可供參考的變量參數配置方式如下:

後n年:$[add_months(yyyymmdd,12*n)]

前n年:$[add_months(yyyymmdd,-12*n)]

後n月:$[add_months(yyyymmdd,n)]

前n月:$[add_months(yyyymmdd,-n)]

後n周:$[yyyymmdd+7*n]

前n周:$[yyyymmdd-7*n]

後n天:$[yyyymmdd+n]

前n天:$[yyyymmdd-n]

後n小時:$[hh24miss+n/24]

前n小時:$[hh24miss-n/24]

後n分鐘:$[hh24miss+n/24/60]

前n分鐘:$[hh24miss-n/24/60]

注意:

請以中括号 [] 編輯自定義變量參數的取值計算公式,例如 key1=$[yyyy-mm-dd]。

預設情況下,自定義變量參數的計算機關為天。例如 $[hh24miss-n/24/60] 表示 (yyyymmddhh24miss-(n/24/60 * 1天)) 的計算結果,然後按 hh24miss 的格式取時分秒。

使用 add_months 的計算機關為月。例如 $[add_months(yyyymmdd,12 n)-m/24/60] 表示 (yyyymmddhh24miss-(12 n 1月))-(m/24/60 1天) 的結果,然後按 yyyymmdd 的格式取年月日。

如圖,配置完成後,我們來測試運作看下,直接檢視日志

阿裡雲大資料利器之-RDS遷移到Maxcompute實作自動分區

可以,看到日志中,maxcompute(日志中列印原名odps)的資訊中

partition分區,date_test=20170829,自動替換成功。

再看下實際的資料過去了沒呢

阿裡雲大資料利器之-RDS遷移到Maxcompute實作自動分區

我們看到資料是過來了,成功自動建立了一個分區值。那麼這個任務定時排程的時候,就會自動生成一個分區,每天自動的将rds中的資料同步到maxcompute中的按照日期建立的分區中。

<b>二,如果使用者的資料有很多運作日期之前的曆史資料,怎麼自動同步,自動分區呢。大資料開發套件-運維中心-有個補資料的功能。</b>

首先,我們需要在rds端把曆史資料按照日期篩選出來,比如曆史資料2017-08-25這天的資料,我要讓他自動同步到maxcompute的20170825的分區中。

在rds階段可以設定where過濾條件,如圖

阿裡雲大資料利器之-RDS遷移到Maxcompute實作自動分區

在maxcompute頁面,還是按照之前一樣配置

阿裡雲大資料利器之-RDS遷移到Maxcompute實作自動分區

然後一定要 儲存-送出。

送出後到運維中心-任務管理-圖形模式-補資料

阿裡雲大資料利器之-RDS遷移到Maxcompute實作自動分區

選擇日期區間

阿裡雲大資料利器之-RDS遷移到Maxcompute實作自動分區

送出運作,這個時候就會同時生成多個同步的任務執行個體按順序執行

阿裡雲大資料利器之-RDS遷移到Maxcompute實作自動分區

看下運作的日志,可以看到運作過程對rds資料的抽取,在maxcompute自動建立的分區

阿裡雲大資料利器之-RDS遷移到Maxcompute實作自動分區

看下運作結果,資料寫入的情況,自動建立了分區,資料同步過來了。

阿裡雲大資料利器之-RDS遷移到Maxcompute實作自動分區

<b>三,如果使用者資料量比較巨大,第一次全量的資料,或者并不是按照日期分區,是按照省份等分區。那麼此時資料內建就不能做到自動分區了。也就是說,想按照rds中某個字段進行hash,相同的字段值自動放到maxcompute中以這個字段對應值的分區中。</b>

同步本身是做不了的,是在maxcompute中通過sql完成,是maxcompute的特有功能,實際上也是真正的動态分區,大家可以參考文章

<a href="https://yq.aliyun.com/articles/81775?spm=5176.8091938.0.0.jmsroj" target="_blank">https://yq.aliyun.com/articles/81775?spm=5176.8091938.0.0.jmsroj</a>

。那麼就需要我們先把資料全量同步到maxcompute的一個臨時表。

流程如下

1,先建立一個sql腳本節點-用來建立臨時表

2,建立同步任務的節點,就是簡單的同步任務,将rds資料全量同步到maxcompute,不需要設定分區。

3,使用sql進行動态分區到目的表

最後将三個節點配置成一個工作流,按順序執行

阿裡雲大資料利器之-RDS遷移到Maxcompute實作自動分區

執行過程,我們重點觀察,最後一個節點的動态分區過程

阿裡雲大資料利器之-RDS遷移到Maxcompute實作自動分區

最後,看下資料

阿裡雲大資料利器之-RDS遷移到Maxcompute實作自動分區

完成動态分區,自動化分區。是不是很神奇,相同的日期資料,到了同一個分區裡。如果是以省份命名,也是如此,我自己都怕了。

大資料開發套件實際上可以完成絕大部分的自動化作業,尤其是資料同步遷移,排程等,界面化操作使得資料內建變得簡單,不用苦逼的加班搞etl了,你懂的。

繼續閱讀