数据同步过程中的数据转换——DataX Transformer实践

前言

最近遇到一个需求,需要从一个表里读取数据,并解密其中一个字段,然后写入另一个表中,表的数据量大概是一千多万,听上去是一个很简单的需求。我手上正好有一个日常在用的Springboot + MyBatis-Plus的框架,我想着直接用MyBatis-Plus3.5.4开始支持的一个流式查询来完成这一功能,但是实践起来发现数据同步的效率十分低。后来想到可不可以用DataX来做数据同步,因为DataX作为一个数据同步工具,效率十分高,去看了DataX的官网,发现它支持数据转换功能,它提供了Transformer来帮助我们实现一些数据传输过程中定制化的需求。
在这里插入图片描述

原理

Transformer在DataX的架构中介于Reader和Writer之间,每一条数据记录(Record)从Reader进入Transformer过程后,根据配置文件中指定的字段,对字段进行一些逻辑处理,并将处理后的数据更新到Record对应字段中,然后输出到Writer。我们可以自定义那部分处理逻辑,以实现我们的定制化需求。
在这里插入图片描述

实践

第一步:拉取DataX源码、下载DataX

  • 进入到阿里DataX的官网
  • 通过git拉取DataX源码
    在这里插入图片描述
  • 下载官方已经给我们提供的DataX(文档往下滑,有个DataX下载地址)
    在这里插入图片描述

第二步:源码解读

  • 一步步的解读源码可以帮助我们快速分析出他的代码结构,并帮助我们找到 我们应该在哪里开发我们自己的定制化代码
  • 在拉下来的代码中找到transformer模块,我们可以看到里面只有两个抽象类,一个是复杂型Transformer,一个是普通的Transformer
    在这里插入图片描述
  • 我们点到普通的Transformer类中,发现这是一个抽象类,其中evaluate方法的注释告诉我们这个方法就是核心的处理逻辑,于是我们猜测想要实现自定义的transformer得继承这个类并实现里面的evaluate方法。双击类名,Ctrl + H打开该类的血缘结构,可以看到下面有很多的实现类,是官方已经写好的可以直接提供给我们使用的transformer,我们随便点一个双击进去。
    在这里插入图片描述
  • 可以看到这个FilterTransformer实现类继承了Transformer父类,同时实现了evaluate方法,并在里面写了具体的处理逻辑,我们之前的猜想也得到了应验。现在我们需要定位FilterTransformer这个类文件的位置,点击左侧目录上面的定位按钮,找到这个文件在core模块下的其中一个叫transformer文件夹中,这里面还有其他的Transformer实现类,我们后面要自定义的逻辑代码也将写在这一部分。
    在这里插入图片描述

第三步:自定义Transformer实现类

  • 这里我的业务逻辑是需要实现一个加密解密,我需要用到hutool中的SecureUtil工具类进行我的加密解密操作,因此在core模块的pom文件中添加了hutool的依赖
  • 同时找到util文件夹下,创建我们自己的工具类,将加密解密的逻辑提取到一个工具类中,与业务解耦
    在这里插入图片描述
package com.alibaba.datax.core.util;

import cn.hutool.crypto.SecureUtil;

import java.nio.charset.StandardCharsets;
import java.util.Objects;

public class AesUtil {
   
   
	public final static byte[] KEY = "123456".getBytes(StandardCharsets.UTF_8);
	
	//加密
	public static String encrypt(String value) {
   
   
		if (Objects.isNull(value)){
   
   
			return null;
		}
		return SecureUtil.aes(KEY).encryptHex(value);
	}
	
	//解密
	public static String decrypt(String value) {
   
   
		if (Objects.isNull(value)){
   
   
			return null;
		
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值