1、ETL數(shù)據(jù)架構層次
2堂淡、建表規(guī)范
3坛怪、命名規(guī)范
4、作業(yè)開發(fā)規(guī)范
注釋: 作業(yè)說明是一種注釋,位于作業(yè)最開始部分更啄。作業(yè)說明有助于提高代碼的可讀性和可維護性居灯。注釋放置在界面的左上?。
其具體內(nèi)容包括:
- 功能說明:簡述該作業(yè)的作用與所要完成的目的
- 更新方式:REPLACE|MERGE|APPEND
- 創(chuàng) 建 人:建立該作業(yè)的作者,格式:姓名
- 創(chuàng)建日期:首次建立該作業(yè)的日期,日期格式為:yyyy-mm-dd
- 運行周期:該作業(yè)運行的周期,如日义锥、月等
- 例 程:調(diào)用該作業(yè)的命令行語句,含輸入?yún)?shù)
- 備 注:比較特殊的依賴關系,重要說明等
- 維護記錄:包含以下三點,打橫記錄
- 維護日期:該作業(yè)被維護的日期,若存在多次維護,則每次維護均需記錄維 護 人:維護該作業(yè)的作者,格式:姓名
-
維護內(nèi)容:記錄本次維護的修改內(nèi)容岩灭、修改原因等信息
5噪径、開發(fā)注意事項
- 參數(shù)命名
Kettle.properties 文件參數(shù)
DW_源庫簡稱_DB_NAME=
DW_源庫簡稱_DB_PORT=
DW_源庫簡稱_DB_USER=
DW_源庫簡稱_DB_PASSWORD=
DW_源庫簡稱_DB_HOST=
DW_源庫簡稱_DB_JDBC=
- 作業(yè)檢查
DW層~DMR層ETL腳本檢查:
① 臨時表建表,不要有刪表語句
② 邏輯簡單可一步寫入目標表的邏輯不要建臨時表梗顺,臨時存儲
③ 所有SQL組件必須勾選使用變量替換
- 參數(shù)使用
① 每一步SQL組件都需要添加一下兩個參數(shù)
set mapred.job.name=${Internal.Job.Name}:步驟描述;
set mapreduce.job.queuename=${DW_DEFAULT_QUEUE};
② 動態(tài)分區(qū)參數(shù)车摄,當使用動態(tài)分區(qū)時添加以下兩個參數(shù)
set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;
③ 如果UNION ALL的部分個數(shù)大于2,或者每個UNION部分數(shù)據(jù)量大吮播,應該拆成多個INSERTINTO 語句,實際測試過程中敞贡,執(zhí)行時間能提升50% 或者使用下面兩個參數(shù)摄职,增加并發(fā):
set hive.exec.parallel=true;
set hive.exec.parallel.thread.number=16; -- 默認值 8
④ mapJoin的主要意思就是获列,當鏈接的兩個表是一個比較小的表和一個特別大的表的時候蛔垢,我們把比較小的table直接放到內(nèi)存中去,然后再對比較大的表格進行map操作鹏漆。join就發(fā)生在map操作的時候,每當掃描一個大的table中的數(shù)據(jù)括蝠,就要去去查看小表的數(shù)據(jù)饭聚,哪條與之相符,繼而進行連接秒梳。這里的join并不會涉及reduce操作。map端join的優(yōu)勢就是在于沒有shuffle朋譬。在實際的應用中,我們這樣設置:
set hive.auto.convert.join=false; -- 默認值true
常見場景:大表和小表關聯(lián)查詢徙赢,return code 2