datax关系数据库插件设计和实现解释

背景

     DataX是一个异构数据源离线同步工具,致力于实现包括关系型数据库(MySQLOracle)HDFSHiveODPSHBaseFTP等各种异构数据源之间稳定高效的数据同步功能。解决异构数据源同步问题,DataX将复杂的网状的同步链路变成了星型数据链路,DataX作为中间传输载体负责连接各种数据源。当需要接入一个新的数据源的时候,只需要将此数据源对接到DataX,便能跟已有的数据源做到无缝数据同步。

   《SETL基于规则的转换组件设计说明书.docx》介绍了RBT组件的设计,以及基于RBT的关系/图转换实现,本文介绍基于RBT的关系数据插件,datax自带关系数据库插件,本组件有以下特性:

  • rbt组件

转换配置,以写入库未目标,配置数据查询和规则,配置支持序列化为xml/json

转换配置支持配置中心,zookeepernacos,数据库等,可扩展框架

支持基于规则的转换,规则修改和新建 column/record

  • 两阶段转换,支持数据转换和关系的转换
  • insert/upsert模式
  • setl-data组件,无缝切换不同的数据库

参考和术语

RBT 基于规则的转换

ETL Extract-Transform-Load的缩写, 数据从来源端经过抽取(extract)、转换(transform)、加载(load)至目的端

关系数据库 oracle,sqlserver,pgsql,mysql

datax原理介绍

*官方图,Transport处是Channel,本人觉得不太准确,应为Transport

> 作业分解为任务,任务分组,最后调度器调度任务(组)

*作业分片和任务分组没有在高可用中

> 调度器负责分派资源执行任务(组),TaskEecutor执行任务

> transport包括数据交换(exchanger),数据转换(transformer),交换数据字节数/记录数的统计(channel)

setl整体功能架构

rb-transformer 转换组件

setl-data 类似springboot-data的组件,无缝切换不同的数据库访问

setl-rbt datax插件,目前支持neo4j和jdbc

setl-cdc 基于debezium的流失数据同步

scanner schema扫描器,生成数据库schema,包括表结构和约束

配置中心  转换配置中心,支持zk,nacos,数据库,支持扩展

checkpoint (TBD) 检查点,记录channel内处理点,故障恢复的手段,目前实现了mq channel,借助mq的消息状态实现故障恢复

分布式 分布式datax,可参看《分布式SETL详细(落地)设计说明书》

技术架构

过程分两个阶段同步,行数据和关系

sql/规则 sql查询数据,依托数据库也有强大的数据处理能力;规则强大的自定义处理能力

数据架构:

  • 源dao  使用setl-data组件,源数据读取,sql/jpql,SPI机制,支持mysql,oracle,pgsql等,支持扩展
  • Record  源dao读取数据,构建Record,调用转换规则,转换规则链式执行,输出新的Record
  • 目标Dao  接收Record,构建insert/upsert/关系查询,执行写入目标数据库

 转换设计

> 左:以目标库数据/关系构建转换,每转换项有xql和规则设置

> 中:转换设置,sql是源数据的查询,以写入库数据和关系为目标;

    转换规则,编写基于规则的转换,类似UDF

> 右:规则内置工具类, 通过别名调用,如 su, nu引用,可以修改recored和column

下图是转换设计

关系数据库扫描

扫描组件负责扫描数据库模式,包括表字段和约束

关系schema模型

jdbc读写插件

rdb转换是基于RBT组件的应用,这里介绍一下数据insert/upsert设计,外键插入的设计

insert/upsert设计

上图是pg的insert/upsert sql模板,写入器根据目标库schema构建inert/upsert语句

外键插入

下图插入关系的sql模板

下图是外键转换配置,key分3段,分别是关系的两端,第三段是key名称

_fromId,to_Id对应数据转换时插入的_origId,用于在目标库找到原有关系

写入器读取schema的外键关系,填入模板构造上图的update语句,完成外键插入

示例

本节介绍RBT-关系数据库组件使用

示例场景

场景使用sakila库,mysq到pgsql,为了场景覆盖,修改目标库,演示异构转换

数据/关系转换场景  rental+payment 合成 trade节点,相应地,关系变更 

规则转换场景  合并rental和payment的last_update,取最新的的,这里只是示例规则,实际使用case when实现更方便

下图是目标模式

trade表合并了rental和payment,两表的外键关系连接到新的trade表,其中与staff有两个外键关系,payment_staff_id, rental_staff_id,对应原有rental和payment与staff的连接;customer关系保留原payment

扫描目标库rdb schema

组件提供rdb scanner工具,扫描关系数据库schema,并序列化存储于xml或json

上图是xml格式的schema,包括外键(fks),关系构建依赖外键定义

转换配置

以trade为示例,转换(Transform)由两部分组成,数据转换和关系转换,每个转换也有两部分,sql和规则

规则语法类似js脚本,可引用工具类处理record和column

上图是trade的转换配置,包括查询配置和规则的配置

上图是关系的转换配置,每个关系转换(rtransform)对应一个外键关系

效果

数据传输

trade 交易表,聚合了rental和payment的属性,trade_id是数据库自动生成的新的id,_origId是源payment的Id,用于构建关系和溯源;lastUpdate是源有rental和payment 较新的lastUpdate

外键关系字段为空,等待关系转换插入

关系传输

下图是执行了staff两个外键转换的效果

sakila示例库有两个staff数据,业务上表示两个职员

NEXT

本组件数据写入(writer)需要数据库屏蔽约束,若数据库不能满足屏蔽约束的要求,可以使用如下思路

  • 构建表拓扑图,确定表的依赖关系
  • 遍历表拓扑,拉取数据,特别地,若拓扑存在循环,需整个循环拉取写入,然后转换关系
  • 写入数据前增加会话级别的约束屏蔽,写入后还原

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

GO——cobra

定义 Cobra 是 Go 的 CLI 框架 CLI,command-line interface,命令行界面 使用 注意 第一个cmd的USE即使命名了也没有意义,一般保持和项目名一致。 示例 package mainimport ("fmt""github.com/spf13/cobra" )func …

构建稳健的Web应用:LAMP 实践

LAMP 介绍 LAMP 代表 Linux、Apache、MySQL 和 PHP/Python/Perl(这些选项中一种)的组合,用于搭建 Web 应用程序的开发和运行环境。 Linux:作为操作系统的基础,提供整个 LAMP 堆栈的基础。Linux 提供稳定、安全的环境&…

Linux/OpenAdmin

Enumeration nmap 用nmap扫描发现目标对外开放了22和80,端口详细信息如下 从nmap的结果看到,是apache的default page,使用工具跑一下目录,看了官 网文档的结果然后写个小字典节约时间,扫描结果如下 On the page at /…

深入了解WPF控件:基础概念与用法(三)

掌握WPF控件:熟练常用属性(三) DataGrid 用于显示和编辑数据的表格控件。它可以从多种数据源(如SQL数据库、LINQ查询或任何其他可绑定的数据源)中显示和编辑数据,支持排序、筛选、分页等功能。 DataGrid…

2024全新开发API接口调用管理系统网站源码 附教程

2024全新开发API接口调用管理系统网站源码 附教程 用layui框架写的 个人感觉很简洁 方便使用和二次开发

Android 11.0 mtp模式下连接pc后显示的文件夹禁止删除copy重命名功能实现

1.前言 在11.0的系统rom定制化开发中,usb连接pc端的时候有好几种模式,在做otg连接pc端的时候,改成mtp模式的时候,在pc端可以看到产品设备 的显示的文件夹的内容,对于产品设备里面的文件在pc端禁止做删除重命名拷贝等操作功能的实现 2.mtp模式下连接pc后显示的文件夹禁止删…

项目:基于OpenCV+百度云人脸识别项目

一.项目框架 基于OpenCV和百度云人脸识别的项目可以使用以下的框架来实现: 数据采集和预处理:使用OpenCV来采集摄像头或读取图像文件,并对图像进行预处理操作,例如裁剪、调整大小、灰度化等。 人脸检测:使用OpenCV的人…

MySQL多表查询(改进版)

1.创建student和score表 mysql> CREATE TABLE student (-> id INT(10) NOT NULL UNIQUE PRIMARY KEY ,-> name VARCHAR(20) NOT NULL ,-> sex VARCHAR(4) ,-> birth YEAR,-> department VARCHAR(20) ,-> address VARCHAR(50)-> ); Query O…

Leetcode2707. 字符串中的额外字符

Every day a Leetcode 题目来源:2707. 字符串中的额外字符 解法1:动态规划 题目要求将字符串 s 分割成若干个互不重叠的子字符串(以下简称为子串),同时要求每个子串都必须在 dictionary 中出现。一些额外的字符可能…

uniapp使用Android Studio离线打包

环境准备 Android Studio: 下载地址APP离线SDK下载: 下载地址; 目前我使用得是“Android-SDK3.8.7.81902_20230704”;需要与hbuider版本配套使用。Appkey: 参考我 以上三步准备好后,进行接下来的不住: 准备工程 导…

SpringBoot中整合ElasticSearch快速入门以及踩坑记录

场景 若依前后端分离版手把手教你本地搭建环境并运行项目: 若依前后端分离版手把手教你本地搭建环境并运行项目_本地运行若依前后端分离-CSDN博客 参考上面搭建项目。 ElaticSearch Elasticsearch 是java开发的,基于 Lucene 的搜索引擎。它提供了一…

Spring中的事件机制

文章目录 摘要正文jdk事件Spring事件Spring事件监听ApplicationContext主动监听注解监听Bean监听 Spring事件发布 总结 摘要 在这篇文章我们将介绍Spring的事件机制,包括Spring内置事件、自定义事件、事件监听、事件发布、事件广播机制、事件异常处理等内容。Sprin…

STM32 TIM输出比较、PWM波形

单片机学习! 目录 一、输出比较简介 二、PWM简介 三、输出比较通道 3.1通用定时器的输出比较部分电路 3.2高级定时器的输出比较部分电路 四、输出模式控制器 五、PWM基本结构 六、PWM参数计算 总结 前言 文章讲述STM32定时器的输出比较功能,它主…

K8S中使用helm安装MinIO

注意事项 使用helm部署MinIO分为两部分 helm部署MinIO operator,用来管理tenant(K8S集群中只能部署一个)helm部署MinIO tenant,真实的MinIO Cluster(K8S集群中可以部署多个) 使用helm部署到K8S集群&…

网工每日一练(1月15日)

1.某计算机系统由下图所示的部件构成,假定每个部件的千小时可靠度为R,则该系统的千小时的可靠度为 ( D ) 。 2.以下IP地址中,属于网络 201.110.12.224/28 的主机IP是( B )。 A.201.110.12.224 B.201.110.12.238 C.20…

【文本到上下文 #5】:RNN、LSTM 和 GRU

一、说明 欢迎来到“完整的 NLP 指南:文本到上下文 #5”,这是我们对自然语言处理 (NLP) 和深度学习的持续探索。从NLP的基础知识到机器学习应用程序,我们现在深入研究了神经网络的复杂世界及其处理语言的深刻能力。 在…

如何快速部署本地训练的 Bert-VITS2 语音模型到 Hugging Face

Hugging Face是一个机器学习(ML)和数据科学平台和社区,帮助用户构建、部署和训练机器学习模型。它提供基础设施,用于在实时应用中演示、运行和部署人工智能(AI)。用户还可以浏览其他用户上传的模型和数据集…

pip与pip3的区别

pip 和 pip3 都是 Python 的包管理工具,用于安装第三方库。它们的区别在于: pip 是 Python 2 和 Python 3 通用的包管理工具,它可以安装适用于 Python 2 和 Python 3 的库。pip3 是专门用于 Python 3 的包管理工具,它只能安装适用…

2023.12.30性质

若连通图上各边的权值均不相同,则该图的最小生成树是唯一的。 由k算法,即由边从小到大的顺序构造,如果边权值各不相同,那么构造出来的最小生成树唯一,就是唯一的顺序,从小到大 关于带权无向图的最小生成…

2024年信息安全不完全预测

不需要专家预言就能知道,计算机安全将在2024年出现在新闻中,而且可能不是什么好事。但2024年网络犯罪分子将如何试图突破防御并窃取有价值的数据,值得我们看一看安全专家们的看法和预测。 不需要专家预言就能知道,计算机安全将在…