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