阿里云大数据利器之-RDS迁移到Maxcompute实现动态分区
摘要: 當前,很多用戶的業務數據存放在傳統關系型數據庫上,例如阿里云的RDS,做業務讀寫操作。當數據量非常大的時候,此時傳系關系型數據庫會顯得有些吃力,那么會經常有將mysql數據庫的數據遷移到[大數據處理平臺-大數據計算服務(Maxcompute,原ODPS)(https://www.aliyun.com/product/odps?spm=5176.doc27800.765261.309.dcjpg2),利用其強大的存儲和計算能力進行各種查詢計算,結果再回流到RDS。
點此查看原文:http://click.aliyun.com/m/40816/
當前,很多用戶的業務數據存放在傳統關系型數據庫上,例如阿里云的RDS,做業務讀寫操作。當數據量非常大的時候,此時傳統關系型數據庫會顯得有些吃力,那么會經常有將mysql數據庫的數據遷移到[大數據處理平臺-大數據計算服務(Maxcompute,原ODPS)(https://www.aliyun.com/product/odps?spm=5176.doc27800.765261.309.dcjpg2),利用其強大的存儲和計算能力進行各種查詢計算,結果再回流到RDS。
一般情況下,業務數據是按日期來區分的,有的靜態數據可能是按照區域或者地域來區分,在Maxcompute中數據可以按照分區來存放,可以簡單理解為一份數據放在不同的子目錄下,子目錄的名稱以日期來命名。那么在RDS數據遷移到Maxcompute上的過程中,很多用戶希望可以自動的創建分區,動態的將RDS中的數據,比如按日期區分的數據存放到Maxcompute中,這個流程自動化創建。同步的工具是使用Maxcompute的配套產品-大數據開發套件。下面就舉例說明RDS-Maxcompute自動分區幾種方法的使用。
一,將RDS中的數據定時每天同步到Maxcompute中,自動創建按天日期的分區。
這里就要用到大數據開發套件-數據集成的功能,我們采用界面化的配置。
如圖地方,設置Maxcompute的分區格式
一般配置到這個地方的時候,默認是系統自帶時間參數:${bdp.system.bizdate} 格式是yyyymmdd。也就是說在調度執行這個任務的時候,這個分區會被自動替換為
任務執行日期的前一天,
相對用戶比較方便的,因為一般用戶業務數據是當前跑前一天的業務數據,這個日期也叫業務日期。
如圖
如果用戶想使用當天任務運行的日期作為分區值,需要自定義這個參數,方法如圖,也可以參考文檔
https://help.aliyun.com/document_detail/30281.html?spm=5176.product30254.6.604.SDunjF
自定義的參數,格式非常靈活,日期是當天日期,用戶可以自由選擇哪一天,以及格式。
可供參考的變量參數配置方式如下:
后N年:[addmonths(yyyymmdd,12?N)]前N年:[add_months(yyyymmdd,-12*N)]
后N月:[addmonths(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 的格式取年月日。
如圖,配置完成后,我們來測試運行看下,直接查看日志
可以,看到日志中,Maxcompute(日志中打印原名ODPS)的信息中
partition分區,date_test=20170829,自動替換成功。
再看下實際的數據過去了沒呢
我們看到數據是過來了,成功自動創建了一個分區值。那么這個任務定時調度的時候,就會自動生成一個分區,每天自動的將RDS中的數據同步到Maxcompute中的按照日期創建的分區中。
二,如果用戶的數據有很多運行日期之前的歷史數據,怎么自動同步,自動分區呢。大數據開發套件-運維中心-有個補數據的功能。
首先,我們需要在RDS端把歷史數據按照日期篩選出來,比如歷史數據2017-08-25這天的數據,我要讓他自動同步到Maxcompute的20170825的分區中。
在RDS階段可以設置where過濾條件,如圖
在Maxcompute頁面,還是按照之前一樣配置
然后一定要 保存-提交。
提交后到運維中心-任務管理-圖形模式-補數據
選擇日期區間
提交運行,這個時候就會同時生成多個同步的任務實例按順序執行
看下運行的日志,可以看到運行過程對RDS數據的抽取,在Maxcompute自動創建的分區
看下運行結果,數據寫入的情況,自動創建了分區,數據同步過來了。
三,如果用戶數據量比較巨大,第一次全量的數據,或者并不是按照日期分區,是按照省份等分區。那么此時數據集成就不能做到自動分區了。也就是說,想按照RDS中某個字段進行hash,相同的字段值自動放到Maxcompute中以這個字段對應值的分區中。
同步本身是做不了的,是在Maxcompute中通過SQL完成,是Maxcompute的特有功能,實際上也是真正的動態分區,大家可以參考文章
https://yq.aliyun.com/articles/81775?spm=5176.8091938.0.0.JMsroJ
。那么就需要我們先把數據全量同步到Maxcompute的一個臨時表。
流程如下
1,先創建一個SQL腳本節點-用來創建臨時表
2,創建同步任務的節點,就是簡單的同步任務,將RDS數據全量同步到Maxcompute,不需要設置分區。
3,使用sql進行動態分區到目的表
最后將三個節點配置成一個工作流,按順序執行
執行過程,我們重點觀察,最后一個節點的動態分區過程
最后,看下數據
完成動態分區,自動化分區。是不是很神奇,相同的日期數據,到了同一個分區里。如果是以省份命名,也是如此,我自己都怕了。
大數據開發套件實際上可以完成絕大部分的自動化作業,尤其是數據同步遷移,調度等,界面化操作使得數據集成變得簡單,不用苦逼的加班搞ETL了,你懂的。
總結
以上是生活随笔為你收集整理的阿里云大数据利器之-RDS迁移到Maxcompute实现动态分区的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 语义分割概念及应用介绍
- 下一篇: 结合Apache Kafka生态系统,谈