数据抽取平台pydatax介绍--实现和项目使用

news2025/4/21 10:16:58

  数据抽取平台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中:数据仓库使用的GreePlum,datax的驱动用的是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()
    cols=""
    sql="select WM_CONCAT(COLUMN_NAME) cols from (SELECT  COLUMN_NAME FROM  all_tab_columns WHERE OWNER=upper('"+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_columns=row.get("src_table_column")
    # 其他8家分公司库
    src_table_columns_fz=get_org_src_columns(src_table_columns,"FZ",src_table_name)
    src_table_columns_jcg=get_org_src_columns(src_table_columns,"JCG",src_table_name)
    src_table_columns_ks=get_org_src_columns(src_table_columns,"KS",src_table_name)
    src_table_columns_qzdf=get_org_src_columns(src_table_columns,"QZDF",src_table_name)
    src_table_columns_sdsht=get_org_src_columns(src_table_columns,"SDSHT",src_table_name)
    src_table_columns_wfjx=get_org_src_columns(src_table_columns,"WFJX",src_table_name)
    src_table_columns_wst=get_org_src_columns(src_table_columns,"WST",src_table_name)
    src_table_columns_std=get_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_name='"+src_table_name+"' " \
           " -Ddes_table_name='"+des_table_name+"' " \
           " -Dsplit_pk_field='"+split_pk_field+"'   " \
           " -Drelation='"+relation+"' " \
           " -Dcondition='"+dcondition+"' " \
           " -Dsrc_table_columns='"+src_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_columns='"+des_table_columns+"' \" "

      这样修改后,就可以同时抽取9个库的数据,同时配置时,只需要配置核心库的相关字段等数据即可!  

   执行的datax_log表数据:

    说明: 1,该平台没有可视化页面的后台管理系统,如果加上后台管理系统,就更完美,但目前是足够使用的!

      DATAX的GreePlum驱动plugin下载:  

                  https://files.cnblogs.com/files/zping/gpdbwriter.rar?t=1708999240&download=true

     pydatax源码下载地址:

                 https://files.cnblogs.com/files/zping/pydatax.rar?t=1708755764&download=true

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1477898.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

吴恩达机器学习全课程笔记第四篇

目录 前言 P61-P68 激活函数 Softmax算法 P69-P73 Adam算法 更多类型的层 模型评估 P74-P79 偏差和方差 建立表现基准 学习曲线 偏差和方差与神经网络 前言 这是吴恩达机器学习笔记的第四篇,第三篇笔记请见: 吴恩达机器学习全课程笔记第…

ubuntu20.04 ROS-Noetic 配置qtcreator的ROS环境

文章目录 1 安装qtcreator1.1 下载安装Qt1.2 配置命令启动qtcreator2 配置ROS2.1 直接安装qtcreator-ros2.2 在qtcreator上安装ros_qtc_plugin插件3 注意3.1 构建套件3.2 更新、删除qt4 参考链接1 安装qtcreator QT官网:Qt Downloads 下载包链接:qt5.12.12 Qt5.12.12默认qtc…

如何系统性的学习推荐系统?

推荐一本适合推荐系统、计算广告、个性化搜索领域的从业人员阅读的书:《互联网大厂推荐算法实战》。快手公司算法专家10余年的实战经验总结。涵盖一线互联网公司当前采用的主流推荐算法,凸显可用性、实用性提供从算法基本原理,到技术框架再到…

0代码自动化测试:RF 框架实现企业级 UI 自动化测试!

RobotFramework框架可以作为公司要做自动化 但是又不会代码的一种临时和紧急情况的替代方案,上手简单。 前言 现在大家去找工作,反馈回来的基本上自动化测试都是刚需!没有自动化测试技能,纯手工测试基本没有什么市场。 但是很多人…

qml 项目依赖

文章目录 出现的问题最终对比下一步 把 apptestQml3_6.exe 放到一个单独目录下,执行 windeployqt.exe ./apptestQml3_6.exe但是出了很多问题,根本运行不起来。 但是在release目录下执行下,程序能跑起来。 根据错误提示,进行添加。…

浮点数二分(一个数开根号)

#include<iostream> using namespace std; int main(){double x;cin>>x;double l0,rx;while(r-l>1e-8){double mid(lr)/2;if(mid*mid>x)rmid;else lmid;}cout<<l<<endl;return 0; }

IJCAI 2023 |时空数据(Spatial-Temporal)论文

本次IJCAI 2023共收到4566份投稿&#xff0c;接收率大约15%&#xff0c;本文总结了IJCAI 2023有关时空数据&#xff08;spatial-temporal&#xff09;的论文。 时空数据Topic:轨迹异常检测&#xff0c;时空预测&#xff0c;信控优化等。 目录 Open Anomalous Trajectory Reco…

大学生课程|统计基础与python分析8|员工离职预测模型(免费下载所有课程材料)

此系列为基础学习系列&#xff0c;请自行学习&#xff0c;课程资源免费获取地址&#xff1a; https://download.csdn.net/download/weixin_68126662/88866689 久菜盒子工作室&#xff1a;大数据科学团队/全网可搜索的久菜盒子工作室 我们是&#xff1a;985硕博/美国全奖doctor/…

深度学习500问——Chapter02:机器学习基础(1)

文章目录 前言 2.1 基本概念 2.1.1 大话理解机器学习本质 2.1.2 什么是神经网络 2.1.3 各种常见算法图示 2.1.4 计算图的导数计算 2.1.5 理解局部最优与全局最优 2.1.5 大数据与深度学习之间的关系 2.2 机器学习学习方式 2.2.1 监督学习 2.2.2 非监督式学习 2.2.3 …

Maven【3】( 依赖的范围,传递性和依赖的排除)(命令行操作)

文章目录 【1】依赖的范围结论验证①验证 compile 范围对 main 目录有效②验证test范围对main目录无效③验证test和provided范围不参与服务器部署 【2】依赖的传递性①compile 范围&#xff1a;可以传递②test 或 provided 范围&#xff1a;不能传递 【3】依赖的排除 【1】依赖…

利用python爬取本站的所有博客链接

前因 由于自己要把csdn的博客同步到hugo中&#xff0c;把博客转为md格式已经搞好了&#xff0c;但是由于csdn的图片具有防盗链&#xff0c;所以打算把所有的图片爬取下来&#xff0c;然后保存在本地 刚好本人略懂一些python&#xff0c;所以自己先写了一个脚本用来爬取各个博…

【Acwing】差分矩阵

图1&#xff1a;a和b数组映射表 由于a是b的前缀和数组&#xff0c;因此改变b[ x1][ y1]之后&#xff0c;受到影响的a中元素如右半图所示 图2&#xff1a;求b数组的前缀和 #include<bits/stdc.h> using namespace std;int n,m,q; int a[1010][1010]; int b[1010][1010]…

最新 RubyMine 2023.3.4 下载与安装 + 永久免费

文章目录 Stage 1 : 官网下载Stage 2 : 下载工具Stage 3-1 : windows为例Stage 3-2 : mac为例常见问题部分小伙伴 Mac 系统执行脚本遇到如下错误&#xff1a;解决方法&#xff1a; 执行脚本做了啥&#xff1f;和正版区别&#xff1f; Stage 1 : 官网下载 先去官网下载 我这里下…

代码随想录算法训练营第二十四天补|● 回溯理论基础 ● 77. 组合

回溯理论基础、组合问题 回溯理论基础 回溯能解决的问题 回溯的本质是穷举&#xff0c;穷举所有可能&#xff0c;然后选出我们想要的答案 回溯如何穷举&#xff1a; 横向遍历for循环&#xff0c;纵向遍历backtracking&#xff08;递归&#xff09;&#xff0c;一般来说&#…

(2024,时空 trasnformer,时空视频分词器,自回归动力学模型,潜在行动模型)Genie:生成式交互环境

Genie: Generative Interactive Environments 公和众和号&#xff1a;EDPJ&#xff08;进 Q 交流群&#xff1a;922230617 或加 VX&#xff1a;CV_EDPJ 进 V 交流群&#xff09; 目录 0. 摘要 2. 方法 2.1. 模型组件 2.2. 推理&#xff1a;可控行动视频生成 3. 实验 0. …

数据库orclec;nvl和nvl2的区别

Oracle中nvl()与nvl2()函数详解-CSDN博客 select nvl(null,2) as vb from dual select nvl2(666,2,3) as vb from dual

异常处理(黑马学习笔记)

当前问题 登录功能和登录校验功能我们都实现了&#xff0c;下面我们学习下今天最后一块技术点&#xff1a;异常处理。首先我们先来看一下系统出现异常之后会发生什么现象&#xff0c;再来介绍异常处理的方案。 我们打开浏览器&#xff0c;访问系统中的新增部门操作&#xff0…

如何通过代理IP安全使用Linkedln领英?

LinkedIn是跨境外贸必备的拓客工具&#xff0c;世界各地的许多专业人士都使用领英来作为发布和共享内容的主要工具&#xff0c;这使得它成为跨境出海必备的渠道工具。 但是不少做外贸的朋友都知道&#xff0c;领英账号很容易遭遇限制封禁&#xff0c;但如果善用工具&#xff0…

倾囊相授之性能分析思路

年轻的时候&#xff0c;经常听一些大会或者演讲。有些人说&#xff0c;思路逻辑非常重要。我那时就想&#xff0c;你肯定是瞎忽悠的&#xff0c;因为我怎么就没听懂你说的思路呢&#xff1f; 而现在轮到自己来写或者讲一些东西的时候&#xff0c;才发现他们说得很对&#xff0…

数据分析中生成仪表板制作工具对比,零基础也能实现数据可视化!

#AI生成图表# 仪表板&#xff08;仪表盘&#xff09;在企业做任何数据分析的最后都会需要的&#xff0c;它通过图表、数字、图形和表格等视觉效果&#xff0c;将复杂的数据以直观、易懂的方式展示出来&#xff0c;帮助用户更好地理解数据&#xff0c;以及决策支持和作为一个共…