生產(chǎn)環(huán)境的數(shù)據(jù)表變更很麻煩?那這個(gè)功能你應(yīng)該用的上
離線開(kāi)發(fā)是大數(shù)據(jù)平臺(tái)的基礎(chǔ)模塊,提供大規(guī)模數(shù)據(jù)存儲(chǔ)與計(jì)算能力,幫助數(shù)據(jù)開(kāi)發(fā)人員完成數(shù)據(jù)加工工作,例如將數(shù)據(jù)從源頭表加工成明細(xì)表,再加工成匯總表等??蛇x擇搭載其它大數(shù)據(jù)產(chǎn)品,實(shí)現(xiàn)數(shù)據(jù)集成、數(shù)據(jù)研發(fā)、數(shù)據(jù)治理、數(shù)據(jù)服務(wù)等功能,靈活滿足客戶的各類場(chǎng)景。
1、實(shí)際場(chǎng)景?
在數(shù)據(jù)開(kāi)發(fā)中,我們經(jīng)常會(huì)碰到要對(duì)一些生產(chǎn)環(huán)境的表進(jìn)行一些變更,包括增加字段等操作,但是生產(chǎn)環(huán)境的表又不能隨意變更,因?yàn)橥@些表格存在復(fù)雜的上下游關(guān)系,所以一般都會(huì)需要經(jīng)過(guò)測(cè)試,通過(guò)測(cè)試驗(yàn)證的代碼才能提交到線上。
例如,當(dāng)前線上調(diào)度任務(wù)中運(yùn)行著如下的代碼,代碼中的表intern_new.ods_user_info被下游所使用,代碼示例如下:
此時(shí)需要對(duì)該表進(jìn)行邏輯修改或增加字段等操作,通常來(lái)說(shuō)會(huì)有兩種方式進(jìn)行線上表的修改:
- 第一種,開(kāi)發(fā)人員選擇新建一個(gè)臨時(shí)表,并復(fù)制出現(xiàn)有代碼,先進(jìn)行測(cè)試驗(yàn)證。當(dāng)驗(yàn)證通過(guò)時(shí),再將該表更新,并更新代碼,然后將任務(wù)提交上線。
- 第二種,開(kāi)發(fā)人員選擇直接修改該表,并修改原有代碼,修改完成后,將任務(wù)提交上線。?
對(duì)于上述兩種方法,第一種方法更可靠,能保證所有操作不影響線上數(shù)據(jù),也不影響下游,但是會(huì)多一些額外的工作;第二種方法可以節(jié)約額外的創(chuàng)建臨時(shí)表,以及代碼反復(fù)拷貝修改的時(shí)間,但是特別容易出紕漏,影響線上數(shù)據(jù)。
為了更好解決上述問(wèn)題,數(shù)開(kāi)平臺(tái)支持?jǐn)?shù)據(jù)測(cè)試功能。數(shù)據(jù)測(cè)試功能通過(guò)引入“${db}”占位符,來(lái)解決db自動(dòng)替換的問(wèn)題,能夠控制同一份代碼根據(jù)運(yùn)行環(huán)境不同,自動(dòng)進(jìn)行部分參數(shù)替換,實(shí)現(xiàn)操作離線表或測(cè)試表的功能,以及操作默認(rèn)HDFS文件或測(cè)試HDFS集群文件的功能。當(dāng)前可生效在離線開(kāi)發(fā)和自助分析兩個(gè)子產(chǎn)品中,解決了數(shù)據(jù)開(kāi)發(fā)過(guò)程中的線上數(shù)據(jù)和開(kāi)發(fā)數(shù)據(jù)隔離問(wèn)題。
2、實(shí)踐內(nèi)容
假設(shè)現(xiàn)在有一張dwd表為”gl_dwd.ods_user_info“,該表是由“gl_ods_user_info”任務(wù)每天下午15:27:00產(chǎn)出,需要將這張表加工為dim維表。
涉及的產(chǎn)品模塊:離線開(kāi)發(fā)、自助分析
數(shù)據(jù)開(kāi)發(fā)的流程:
第一步:通過(guò)自助分析創(chuàng)建測(cè)試表
首先我們需要通過(guò)自助分析,在gl_dwd_dev庫(kù)中建一張測(cè)試用的dim維表,dim維表的表結(jié)構(gòu):
字段 | ?字段類型 | 字段描述 |
user_id | string | 用戶id |
?user_name | string | 用戶姓名 |
province | string | 省份 |
age | int | 年齡 |
dim維表的建表語(yǔ)句示例:
操作效果頁(yè)面如下,點(diǎn)擊運(yùn)行:
看到“運(yùn)行成功”的提示,則說(shuō)明測(cè)試庫(kù)中的dim維表已經(jīng)成功創(chuàng)建~
第二步:通過(guò)離線開(kāi)發(fā)創(chuàng)建任務(wù)
我們通過(guò)離線開(kāi)發(fā)創(chuàng)建任務(wù),使得ods表的數(shù)據(jù)能夠?qū)懭雂im維表。
先新建一個(gè)任務(wù),然后在畫布中拖入SQL節(jié)點(diǎn),進(jìn)入SQL編輯頁(yè)面后輸入下方代碼,將gl_dwd.ods_user_info表的數(shù)據(jù)寫入gl_dwd_dev.gly_dim_user_info_p這張表中:
然后通過(guò)在開(kāi)發(fā)模式下運(yùn)行節(jié)點(diǎn),若運(yùn)行結(jié)果為成功,則表示代碼能夠正常執(zhí)行,代碼驗(yàn)證通過(guò)以后,我們可以去自助分析對(duì)數(shù)據(jù)進(jìn)行驗(yàn)證。
通過(guò)select語(yǔ)句,檢查dim表中是否確實(shí)有了新的數(shù)據(jù),select語(yǔ)句示例如下:
點(diǎn)擊運(yùn)行后,運(yùn)行成功,可在運(yùn)行結(jié)果中查看數(shù)據(jù),一共有200條記錄,說(shuō)明數(shù)據(jù)正確。
至此,我們就成功地通過(guò)離線開(kāi)發(fā),創(chuàng)建了一個(gè)開(kāi)發(fā)任務(wù),并且利用測(cè)試模式,完成了代碼和表結(jié)構(gòu)的驗(yàn)證!下一步,就可以將通過(guò)測(cè)試的測(cè)試庫(kù)的表克隆到離線庫(kù),并將任務(wù)提交上線,讓離線庫(kù)中的我們真正的生產(chǎn)表也能有產(chǎn)出的數(shù)據(jù)。
第三步:通過(guò)表克隆將測(cè)試完成的表結(jié)構(gòu)克隆到離線庫(kù)中
仍然在離線開(kāi)發(fā),點(diǎn)擊頁(yè)面左上角的表克隆,選擇待克隆的庫(kù)表,以及目標(biāo)庫(kù),即gl_dwd_dev庫(kù)下在上一步驟中新建的dim維表,要將其克隆到離線庫(kù)gl_dwd中,選擇好以后點(diǎn)擊克隆檢驗(yàn),檢驗(yàn)通過(guò)后,即可點(diǎn)擊下一步:
系統(tǒng)會(huì)自動(dòng)生成對(duì)應(yīng)表的DDL語(yǔ)句:
點(diǎn)擊“執(zhí)行”,會(huì)提示執(zhí)行成功,即已經(jīng)在gl_dwd庫(kù)中生成了與gl_dwd_dev庫(kù)中dim表結(jié)構(gòu)一致、表名也一致的表。
第四步:將任務(wù)提交上線并設(shè)置調(diào)度
(1)提交上線:
最后,就是將通過(guò)測(cè)試的任務(wù)提交上線并設(shè)置調(diào)度,讓它能夠按時(shí)產(chǎn)出數(shù)據(jù),提供給下游使用。
這里需要注意的是,我們用到的gl_dwd.ods_user_info表是任務(wù)gl_ods_user_info的產(chǎn)出表,這張表同時(shí)又是任務(wù)gly_demo的輸入表,這兩個(gè)任務(wù)均為每日調(diào)度產(chǎn)出,因此在實(shí)際數(shù)據(jù)加工的過(guò)程中,我們就需要保證,在任務(wù)gly_demo運(yùn)行之前,同一調(diào)度周期內(nèi),任務(wù)gl_ods_uers_info必須已經(jīng)成功產(chǎn)出數(shù)據(jù),因此形成任務(wù)依賴關(guān)系:gl_ods_user_info-----> gly_demo,即任務(wù)gly_demo必須依賴任務(wù)gl_ods_user_info。
離線開(kāi)發(fā)支持通過(guò)自動(dòng)解析任務(wù)的產(chǎn)出表,智能推薦任務(wù)依賴。在編輯調(diào)度頁(yè)面,點(diǎn)擊智能依賴,系統(tǒng)會(huì)自動(dòng)計(jì)算并推薦上游任務(wù)及節(jié)點(diǎn),點(diǎn)擊確定后,就可以看到頁(yè)面新增了任務(wù)依賴,表示該任務(wù)會(huì)在其依賴的任務(wù),即gl_ods_user_info任務(wù)的實(shí)例產(chǎn)出后,才會(huì)開(kāi)始運(yùn)行。
將任務(wù)調(diào)度信息設(shè)置完成之后,任務(wù)就會(huì)開(kāi)始按照計(jì)劃執(zhí)行時(shí)間生成實(shí)例,在實(shí)際執(zhí)行時(shí),就會(huì)執(zhí)行如下代碼,將數(shù)據(jù)插入到“gl_dwd.gly_dim_user_info_p”表中:
(2)驗(yàn)證數(shù)據(jù):
最后再來(lái)到自助分析,驗(yàn)證我們的數(shù)據(jù)是否成功地寫入了離線庫(kù)gl_dwd中,即查看gly_dim_user_info_p表中2022-07-10分區(qū)是否有完整的200條記錄:
運(yùn)行結(jié)果顯示,離線庫(kù)中的dim表已經(jīng)擁有了正確的數(shù)據(jù)。至此,我們的離線開(kāi)發(fā)任務(wù)就完成了開(kāi)發(fā)、驗(yàn)證與上線的全部過(guò)程!
3、總結(jié)
以上通過(guò)一個(gè)簡(jiǎn)單案例完成了數(shù)據(jù)測(cè)試功能,引入“${db}”占位符,實(shí)現(xiàn)了db自動(dòng)替換,解決了數(shù)據(jù)開(kāi)發(fā)過(guò)程中的線上數(shù)據(jù)和開(kāi)發(fā)數(shù)據(jù)隔離問(wèn)題。
在實(shí)際業(yè)務(wù)場(chǎng)景中,企業(yè)出于數(shù)據(jù)安全考慮往往存在著更復(fù)雜的數(shù)據(jù)存儲(chǔ)方式與數(shù)據(jù)測(cè)試規(guī)范,大數(shù)據(jù)開(kāi)發(fā)工作也逐漸往更規(guī)范、高效的方向發(fā)展,由此也對(duì)產(chǎn)品提出了更多的要求和挑戰(zhàn)。離線開(kāi)發(fā)產(chǎn)品也在不斷吸收來(lái)自數(shù)據(jù)開(kāi)發(fā)工作一線的用戶使用場(chǎng)景與姿勢(shì),不斷努力打磨產(chǎn)品,給用戶帶去更智能、更高效的大數(shù)據(jù)數(shù)據(jù)開(kāi)發(fā)與測(cè)試體驗(yàn)。