数据抽取平台pydatax使用案例---11个库项目使用

    数据抽取平台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,其简单的修改就可以快速满足客户的需求

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

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

相关文章

.NET9 - Swagger平替Scalar详解(四)

书接上回,上一章介绍了Swagger代替品Scalar,在使用中遇到不少问题,今天单独分享一下之前Swagger中常用的功能如何在Scalar中使用。 下面我们将围绕文档版本说明、接口分类、接口描述、参数描述、枚举类型、文件上传、JWT认证等方面详细讲解。…

【单点知识】基于PyTorch进行模型部署

文章目录 0. 前言1. 模型导出1.1 TorchScript1.1.1 使用 torch.jit.trace1.1.2 使用 torch.jit.script 1.2 ONNX1.2.1 导出为 ONNX 格式 1.3 导出后的模型加载1.3.1 加载 TorchScript 模型1.3.2 加载 ONNX 模型 2. 模型优化2.1 模型量化2.2 模型剪枝 3. 服务化部署3.1 Flask 部…

java基础知识(常用类)

目录 一、包装类(Wrapper) (1)包装类与基本数据的转换 (2)包装类与String类型的转换 (3)Integer类和Character类常用的方法 二、String类 (1)String类介绍 1)String 对象用于保存字符串,也就是一组字符序列 2)字符串常量对象是用双引号括起的字符序列。例如:&quo…

Servlet细节

目录 1 Servlet 是否符合线程安全? 2 Servlet对象的创建时间? 3 Servlet 绑定url 的写法 3.1 一个Servlet 可以绑定多个url 3.2 在web.xml 配置文件中 url-pattern写法 1 Servlet 是否符合线程安全? 答案:不安全 判断一个线程…

w~视觉~3D~合集3

我自己的原文哦~ https://blog.51cto.com/whaosoft/12538137 #SIF3D 通过两种创新的注意力机制——三元意图感知注意力(TIA)和场景语义一致性感知注意力(SCA)——来识别场景中的显著点云,并辅助运动轨迹和姿态的预测…

fastjson不出网打法—BCEL链

前言 众所周知fastjson公开的就三条链,一个是TemplatesImpl链,但是要求太苛刻了,JNDI的话需要服务器出网才行,BCEL链就是专门应对不出网的情况。 实验环境 fastjson1.2.4 jdk8u91 dbcp 9.0.20 什么是BCEL BCEL的全名应该是…

GitLab使用操作v1.0

1.前置条件 Gitlab 项目地址:http://******/req Gitlab账户信息:例如 001/******自己的分支名称:例如 001-master(注:master只有项目创建者有权限更新,我们只能更新自己分支,然后创建合并请求&…

MATLAB GUI设计(基础)

一、目的和要求 1、熟悉和掌握MATLAB GUI的基本控件的使用及属性设置。 2、熟悉和掌握通过GUIDE创建MATLAB GUI的方法。 3、熟悉和掌握MATLAB GUI的菜单、对话框及文件管理框的设计。 4、熟悉和掌握MATLAB GUI的M文件编写。 5、了解通过程序创建MATLAB GUI的方法。 二、内…

RabbitMQ简单应用

概念 RabbitMQ 是一种流行的开源消息代理(Message Broker)软件,它实现了高级消息队列协议(AMQP - Advanced Message Queuing Protocol)。RabbitMQ 通过高效的消息传递机制,主要应用于分布式系统中解耦应用…

【es6】原生js在页面上画矩形及删除的实现方法

画一个矩形,可以选中高亮,删除自己效果的实现,后期会丰富下细节,拖动及拖动调整矩形大小 实现效果 代码实现 class Draw {constructor() {this.x 0this.y 0this.disX 0this.disY 0this.startX 0this.startY 0this.mouseDo…

【前端】JavaScript中的隐式声明及其不良影响分析

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: 前端 文章目录 💯前言💯什么是隐式声明?💯隐式声明的常见情景1. 赋值给未声明的变量2. 非严格模式下的隐式声明3. 函数中的变量漏掉声明4. for 循环中的隐式声明5. 使用…

windows基础之病毒编写

声明! 学习视频来自B站up主 泷羽sec 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关&#…

家校通小程序实战教程02口令管理

目录 1 创建数据源2 搭建后台功能3 生成口令4 调用API总结 我们的小程序上线之后,必然面临家长要加入的问题。微搭有登录验证的功能,但是手机验证的机制是,如果你未注册就给你自动注册一个账号,如果以注册了收到验证码就可以登录系…

Elasticsearch中的节点(比如共20个),其中的10个选了一个master,另外10个选了另一个master,怎么办?

大家好,我是锋哥。今天分享关于【Elasticsearch中的节点(比如共20个),其中的10个选了一个master,另外10个选了另一个master,怎么办?】面试题。希望对大家有帮助; Elasticsearch中的节…

阿里发布 EchoMimicV2 :从数字脸扩展到数字人 可以通过图片+音频生成半身动画视频

EchoMimicV2 是由阿里蚂蚁集团推出的开源数字人项目,旨在生成高质量的数字人半身动画视频。以下是该项目的简介: 主要功能: 音频驱动的动画生成:EchoMimicV2 能够使用音频剪辑驱动人物的面部表情和身体动作,实现音频与…

【NLP高频面题 - 分布式训练】ZeRO1、ZeRO2、ZeRO3分别做了哪些优化?

【NLP高频面题 - 分布式训练】ZeRO1、ZeRO2、ZeRO3分别做了哪些优化? 重要性:★★ NLP Github 项目: NLP 项目实践:fasterai/nlp-project-practice 介绍:该仓库围绕着 NLP 任务模型的设计、训练、优化、部署和应用&am…

C#基础控制台程序

11.有一个54的矩阵,要求编程序求出其中值最大的那个元素的值,以及其所在的行号和列号。 12.从键盘输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。 13.输入一个数,判断它是奇数还是偶数,如果…

三六零[601360]行情数据接口

1、三六零:实时行情 Restful API # 测试接口:可以复制到浏览器打开 https://tsanghi.com/api/fin/stock/XSHG/realtime?tokendemo&ticker601360获取股票实时行情(开、高、低、收、量)。 请求方式:GET。 Python示例…

eclipse-git项目提示NO-HEAD

1、出现该问题的过程 本人在用eclipse拉取git代码,刚拉取完,可能还没来得及跟本地的分支合并,电脑就卡动了。无奈只能重启电脑,打开eclipse,maven项目后面就出现了xxx NO-HEAD的提示。 2、问题解决 根据错误提示&am…

Cross-Site Scripting(XSS)攻击

简介 XSS(跨站脚本攻击)是一种常见的 Web 安全漏洞,攻击者通过在目标网站的输入框中注入恶意脚本,当其他用户(如管理员)查看包含恶意脚本的页面时,脚本会在他们的浏览器中执行。XSS 攻击可以分…