資料抽取平臺pydatax使用案例---11個庫專案使用

zping發表於2024-11-25

資料抽取平臺pydatax,前期專案做過介紹:

1,資料抽取平臺pydatax介紹--實現和專案使用

專案2: 客戶有9個分公司,用的ERP有9套,有9個庫,不同版本,抽取的同一個表欄位長度有不一樣,欄位可能有多有少,客戶ERP核心分公司ERP幾個月後有大版本升級。

在2023年12月,當時做這個抽取時,客戶只是做一個分公司的,抽取9套其中的一套ERP的Oracle庫,當時考慮是否把這9個庫的都抽取了,免得後面客戶要做,浪費時間再做一遍,太麻煩,問了專案負責人也沒說是要把這9個庫都抽取過來,沒說要做! 到底怎麼處理?

想想早晚要做,還是先都抽取了,把他的8家公司的Oracle資料庫都抽取過來,各個公司的資料,9張表合併成1張,在表加租戶id欄位區分:tenant_id 確定是那個公司的,把這個大資料抽取,資料指標計算完成。

到了2024年7月份,客戶突然說後續指標計算暫停,要把其他的子公司的資料和計算也加進去,這半年又新參股合併了3家公司,原先有一家去掉。一共要新加7+3=10家公司,為支援該業務需要,pydatax的修改過程如下:

1,JSON抽取模板修改

oracle_gp_table_df_job.json檔案加上新加的3個分公司,再原有的json去掉一家公司:

{ 
"querySql": [  "select SYSdate as etl_create_time,SYSdate as etl_update_time, 'wflsy' as tenant_id,${src_table_columns_wflsy} from wflsy.${src_table_name} ${relation} where ${condition}" ],
"jdbcUrl": [ "jdbc:oracle:thin:@10.0.1.206:1521:erp"]
},
{ 
"querySql": [  "select SYSdate as etl_create_time,SYSdate as etl_update_time, 'ky' as tenant_id, ${src_table_columns_ky} from ky.${src_table_name} ${relation} where ${condition}" ],
"jdbcUrl": [ "jdbc:oracle:thin:@10.0.1.206:1521:erp"]
},
{ 
"querySql": [  "select SYSdate as etl_create_time,SYSdate as etl_update_time, 'wfjy' as tenant_id, ${src_table_columns_wfjy} from wfjy.${src_table_name} ${relation} where ${condition}" ],
 "jdbcUrl": [ "jdbc:oracle:thin:@10.0.1.206:1521:erp"]
},

2,Python程式修改

以上加上後,同時要在pydatax.py和vprepair.py的指令碼上加上3個變數,傳遞給datax的json模板, 這樣每天抽取任務的全量和增量3家新公司資料生效。

src_table_columns_wflsy=get_org_src_columns(src_table_columns,"WFLSY",src_table_name)    
src_table_columns_ky=get_org_src_columns(src_table_columns,"KY",src_table_name)
src_table_columns_wfjy=get_org_src_columns(src_table_columns,"WFJY",src_table_name)
" -Dsrc_table_columns_std='" + src_table_columns_std + "' " \ " -Dsrc_table_columns_ky='" + src_table_columns_ky + "' " \ " -Dsrc_table_columns_wflsy='" + src_table_columns_wflsy + "' " \ " -Dsrc_table_columns_wfjy='" + src_table_columns_wfjy + "' " \ " -Ddes_table_columns='"+des_table_columns+"' \" "

這樣整個每天11家公司的表全量資料和表增量資料就正常的,全量同步的表資料是每天全量,不用處理,但增量表歷史資料怎麼抽取過來?

3,增量表歷史資料處理

1,將1中的3個Json單獨編寫成1個json模板,模板的"preSql"中的“truncate table 表“ 資料不再使用。

2,新模板json檔案放到對應資料夾下,寫一條資料到datax_json中

3,是增量的歷史表datax_config的資料copy一份到datax_config_repair中,並將json_id和2中的一致,只按2的新模板抽取資料

4,執行vprepair.py後,資料同步到臨時表stg表,再執行select sp_stg();

4, 特殊表處理

商品表,有家公司的商品表,同一個商品有多個,直接抽取商品表,會在該公司有多條資料,客戶做了個檢視過濾成1條,說抽取這個檢視資料就可以,但pydatax的11個庫的表名要必須一致,怎麼處理?

想想也可以實現,就是對這個商品表單獨配置一個抽取JSON模板,如下:dbo.base_${src_table_name} ,當然也可以把這個表名寫死,也可以使用。在datax_config表的json_id配置成新的模板,就可以實現單獨表的特殊處理。

"querySql": [  "select SYSdate as etl_create_time,SYSdate as etl_update_time, 'zb' as tenant_id,${src_table_columns} from dbo.base_${src_table_name} ${relation} where ${condition}" ],
 "jdbcUrl": [ "jdbc:oracle:thin:@192.168.0.17:1521/erpdg"]
},

修改的檔案放在壓縮包的”11庫抽取”資料夾下:

pydatax原始碼下載地址:

1,https://files.cnblogs.com/files/zping/pydatax.rar

總結:

1,pydatax的靈活性在此專案得到很好的驗證

2,其簡單的修改就可以快速滿足客戶的需求

相關文章