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