网站建设带服务器,怎么自己做网站空间,网站建设土豆视频教程,域名备案需要多久数据抽取平台pydatax实现过程中#xff0c;有2个关键点#xff1a; 1、是否能在python3中调用执行datax任务#xff0c;自己测试了一下可以#xff0c;代码如下#xff1a; 这个str1就是配置的shell文件 try:result os.popen(str1).read()
except Exception as … 数据抽取平台pydatax实现过程中有2个关键点 1、是否能在python3中调用执行datax任务自己测试了一下可以代码如下 这个str1就是配置的shell文件 try:result os.popen(str1).read()
except Exception as e:print(e) 2、是否能获取datax执行后的信息用来捕获执行的情况和错误信息 上面执行后的result就包含了datax的执行信息对信息进行筛选就可以获得 pydatax的表设计 在上面的2个关键点解决后其他问题就比较简单设计相关的表 datax_config datax抽取表的模板配置源表名目标表名模板id抽取的字段抽取条件增量全量特殊抽取时间执行顺序等 datax_config_repair datax的出错修复表结构和datax_config一样用于datax出错后修复数据用 datax_etl_error datax的etl的报错信息非异常字符的报错 datax_json datax的模板id配置全量和增量2个模板文件名 datax_log datax运行抽取表的执行信息是否执行完成抽取行数速度读出行数流量等 datax_row_error datax执行中字段有异常字符的报错信息 pydatax在项目中使用 项目1 直接配置datax的模板json从oracle 11g抽取到postgresql中 因postgresql中会对0x这些异常字符报错,如oracle中字段有这样字段必须在抽取字段使用 使用 replace(name,chr(0),\\) as name 来代替 以前的字段 name 项目2 客户有9个分公司用的ERP有9套有9个库不同版本抽取的同一个表字段长度有不一样字段可能有多有少客户ERP核心分公司ERP几个月后有大版本升级。 因项目2中数据仓库使用的GreePlumdatax的驱动用的是gpdbwriter-v1.0.4-hashdata.jar该驱动自动删除0x非法字符就不存在该错误 不可能写9个抽取json模板再抽取只能原有json模板上修改 字段长度不同 取9个库的最大值作为目标表字段的字段长度 字段个数不同: 取其一个核心分公司库表为基础建表其他8个库表如果有就保留没有就字段数据为NULL每次执行查询取出8个库的字段 # 获取分公司库该表的字段如对比核心库表字段的缺失使用null as 字段替换如果多余则废弃
# 字段对比以核心库为标准
def get_org_src_columns(src_columns,org_name,tab_name):src_columns src_columns# 分公司字段org_cols get_org_cols(org_name,tab_name)lst src_columns.split(,)cols1 (org_cols ,)src_columns1 (src_columns ,)for i in lst:str1 i.strip() , # 去掉空格对比使用字段名,,这样避免有重复前缀的字段名导致误判if (cols1.find(str(,str1)) -1):src_columns1 src_columns1.replace(str(,str1), ,NULL as str1)return src_columns1.rstrip(,)# 获取分公司库的表的字段用,合并成一个字符串
def get_org_cols(org_name,tab_name):conn ora_conn()cur conn.cursor()colssqlselect WM_CONCAT(COLUMN_NAME) cols from (SELECT COLUMN_NAME FROM all_tab_columns WHERE OWNERupper(org_name) \and table_name upper(tab_name) order by COLUMN_ID asc) t ;cur.execute(sql)datas cur.fetchall()for row in datas:cols str(row[0])return cols; 修改json模板支持同时抽取9个数据库修改的9个库同时抽取oracle数据到greeplum全量json模板见下载文件的oracle_gp_table_df_job.json src_table_columnsrow.get(src_table_column)# 其他8家分公司库src_table_columns_fzget_org_src_columns(src_table_columns,FZ,src_table_name)src_table_columns_jcgget_org_src_columns(src_table_columns,JCG,src_table_name)src_table_columns_ksget_org_src_columns(src_table_columns,KS,src_table_name)src_table_columns_qzdfget_org_src_columns(src_table_columns,QZDF,src_table_name)src_table_columns_sdshtget_org_src_columns(src_table_columns,SDSHT,src_table_name)src_table_columns_wfjxget_org_src_columns(src_table_columns,WFJX,src_table_name)src_table_columns_wstget_org_src_columns(src_table_columns,WST,src_table_name)src_table_columns_stdget_org_src_columns(src_table_columns,STD,src_table_name)str1 /usr/bin/python /opt/module/datax/bin/datax.py /opt/module/datax/job/json/etl_mode -p \ \ -Dsrc_table_namesrc_table_name \ -Ddes_table_namedes_table_name \ -Dsplit_pk_fieldsplit_pk_field \ -Drelationrelation \ -Dconditiondcondition \ -Dsrc_table_columnssrc_table_columns \ -Dsrc_table_columns_fz src_table_columns_fz \ -Dsrc_table_columns_jcg src_table_columns_jcg \ -Dsrc_table_columns_ks src_table_columns_ks \ -Dsrc_table_columns_qzdf src_table_columns_qzdf \ -Dsrc_table_columns_sdsht src_table_columns_sdsht \ -Dsrc_table_columns_wfjx src_table_columns_wfjx \ -Dsrc_table_columns_wst src_table_columns_wst \ -Dsrc_table_columns_std src_table_columns_std \ -Ddes_table_columnsdes_table_columns \ 这样修改后就可以同时抽取9个库的数据同时配置时只需要配置核心库的相关字段等数据即可 执行的datax_log表数据 说明 1该平台没有可视化页面的后台管理系统如果加上后台管理系统就更完美但目前是足够使用的 DATAX的GreePlum驱动plugin下载: https://files.cnblogs.com/files/zping/gpdbwriter.rar?t1708999240downloadtrue pydatax源码下载地址 https://files.cnblogs.com/files/zping/pydatax.rar?t1708755764downloadtrue