datax字段名不一样

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了datax字段名不一样相关的知识,希望对你有一定的参考价值。

datax字段名不一样
dx_substr:从字符串的指定位置(包含)截取指定长度的字符串。如果开始位置非法抛出异常。如果字段为空值,直接返回(即不参与本transformer)
dx_pad:如果源字符串长度小于目标字段长度,按照位置添加pad字符后返回。如果长于,直接截断(都截右边)。如果字段为空值,转换为空字符串进行pad,即最后的字符串全是需要pad的字符
dx_replace:从字符串的指定位置(包含)替换指定长度的字符串。如果开始位置非法抛出异常。如果字段为空值,直接返回(即不参与本transformer)
dx_filter :如果匹配正则表达式,返回Null,表示过滤该行。不匹配表达式时,表示保留该行。
dx_groovy:groovy表达式处理
参考技术A 先准备数据库
1、建两张表 datax_src和datax_target 表 ,就两个字段,其中第二个字段名称不一样 ,案列演示 从datax_src读取数据,写入到datax_target中

2、创建一个函数,向datax_src插入5000条数据

编写job json文件
按照 文档中的 mysqlreader 、mysqlwriter 的示例修改

在这里插入图片描述

在这里插入图片描述

1、修改mysqlreader的示例 从datax_src同步抽取数据到本地:
将json文件放在job文件夹中,运行

在这里插入图片描述

在这里插入图片描述

抛异常了:

DataX无法连接对应的数据库,可能原因是:1) 配置的ip/port/database/jdbc错误,无法连接。2) 配置的username/password错误,鉴权失败。请和DBA确认该数据库的连接信息是否正确

可是密码明明是正确的。然后想着修改json文件换了一个数据库,再执行,成功了!
发现区别就是mysql的版本不一样 mysql5.0.27的执行成功了, 失败这个库是mysql8.0.22。
所以看了下datax目录结构,发现连接器位置如下图。 找了下连接器jar包,把reader和writer文件夹中的mysql-connector5换成了8(这里只截图了reader)
在这里插入图片描述

再次执行json文件job:成功执行
在这里插入图片描述

2、修改mysqlwriter的示例 ,结合mysqlreader ,把读写合并,
完整的 json文件如下 ,具体参数的含义。官方文档中有详细介绍
执行!成功!!

在这里插入图片描述

查看 datax_target 表: 数据已成功写入

在这里插入图片描述

以上是全表数据同步
参考官方文档,再编写一个从一个mysql到另一个mysql的批量更新
下面通过自定义querySql实现一下部分更新的操作

1、更新datax_src表的部分数据,更新id小于10的9条数据

在这里插入图片描述

datax 的 job 的 json文件如下: 加了一个 querySql 参数,并把 writer 中的 writeMode 换成 update

执行,成功

在这里插入图片描述

查看下datax_target中的数据:也已被成功更新

在这里插入图片描述
在这里插入图片描述
参考技术B DataX快速入门参考

环境要求

> Linux

JDK(1.8以上,推荐1.8)

Python(推荐Python2.6.X)

Apache Maven 3.x (Compile DataX)

打包

mvn -U clean package assembly:assembly -Dmaven.test.skip=true
本地idea调用

> D:\pm\DataX\datax-core\src\main\job为测试脚本文件夹

1、job.json 为通过streamreader生成模拟数据,streamwriter用于输出

2、job_mysql_read_to_print.json 通过查询mysql数据,streamwriter用于输出

3、job_postgresql_to_mysql_read_write.json 通过查询postgresql数据,写入mysql

4、job_postgresql_to_postgresql_read_write.json 通过查询postgresql数据,写入postgresql

5、job_postgresql_to_postgresql_read_write_geom.json 通过查询postgresql数据,包含地理空间geometry类型数据,写入postgresql

数据包含geometry迁移

> DataX本身不满足迁移地理空间geometry类型数据迁移

geometry类型数据迁移请移步 geometry

在idea的Teminal执行以下脚本

D:\pm\DataX\datax-core\target\datax\bin>python datax.py ../job/job.json -m standalone

cd D:\pm\DataX\

python D:\pm\DataX\datax-core\target\datax\bin\datax.py D:\pm\DataX\datax-core\target\datax\job\job_pg_to_pg_xianzhuangjianzhu_geom_read_write.json -m standalone

linux环境python 安装

下载

安装依赖

yum install gcc patch libffi-devel python-devel zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel -y

解压

tar -zxvf Python-3.8.0.tgz

切换目录

cd Python-3.8.0

编译安装

1.释放编译文件makefile,这makefile就是用来编译且安装的

./configure --prefix=/usr/local/soft/python380/ 注释:--prefix 指定软件的安装路径

2.开始编译

make

3.编译且安装

make install

配置环境变量

1.vi /etc/profile

2.写在最后

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/soft/python380/bin

保存退出 :wq!

3.生效

source /etc/profile

如有必要更新pip

pip3 install --upgrade pip

window环境python 安装

> python以及idea插件安装请自行百度

JDK1.8安装

yum install java-1.8.0-openjdk\* -y

DataX 使用

方法一

> cd YOUR_DATAX_HOME/bin python datax.py YOUR_JOB.json

> 自检脚本:

python YOUR_DATAX_HOME/bin/datax.py YOUR_DATAX_HOME/job/job.json

方法二

> 下载DataX源码,自己编译

(1)、下载DataX源码: > git clone git@github.com:alibaba/DataX.git

通过maven打包: > $ cd DataX_source_code_home $ mvn -U clean package assembly:assembly -Dmaven.test.skip=true
打包成功后的DataX包位于 DataX_source_code_home/target/datax/datax/

第二步:启动DataX > $ cd YOUR_DATAX_DIR_BIN

$ python datax.py ./stream2stream.json

问题

字段类型问题

> postgresql "geom" "public"."geometry"

因为DataX 不支持数据库读取这种字段类型. 字段名:[geom], 字段名称:[1111], 字段Java类型:[java.lang.Object]. 请尝试使用数据库函数将其转换datax支持的类型 或者不同步该字段

因为DataX 不支持数据库写入这种字段类型. 字段名:[geom], 字段类型:[1111], 字段Java类型:[geometry]. 请修改表中该字段的类型或者不同步该字段

> 您的配置文件中的列配置信息有误. 因为DataX 不支持数据库读取这种字段类型. 字段名:[%s], 字段名称:[%s], 字段Java类型:[%s]. 请尝试使用数据库函数将其转换datax支持的类型 或者不同步该字段 .

geometry类型数据迁移请移步 geometry

##效果对比

通过DataX本地运行,迁移postgresql 包含geometry空间类型数据1088270条,用时1111s

通道数量 : 8

任务启动时刻 : 2019-12-09 12:52:02 任务结束时刻 : 2019-12-09 13:10:34 任务总计耗时 : 1111s 任务平均流量 : 517.35KB/s 记录写入速度 : 980rec/s 读出记录总数 : 1088270 读写失败总数 : 0

通过Navacat复制数据表,迁移postgresql 包含geometry空间类型数据1088270条,用时1917.623s

geometry类型数据迁移

geometry类型数据迁移请移步 geometry
参考技术C datax字段名不一样如下,解决属性名和字段名不一致的问题,数据库中的字段 新建一个项目,拷贝之前,测试实体字段不一致的情况,对应字段的字段名可以不一样,但是字段类型需要一致,比如都是string,double,date或objectId类型。

以上是关于datax字段名不一样的主要内容,如果未能解决你的问题,请参考以下文章

MyBatis—当实体类中的属性名和表中的字段名不一样 ,怎么办 ?

实体类中的属性名和表中的字段名不一样,怎么办?

解决属性名和字段名不一致的情况

MyBatis数据库字段和实体对象属性名不一致的解决方案

mybatis中字段名与实体属性名不一样的情况下插入数据的方法,在xml配置文件里sql语句应该怎么写?

7.属性名与查询字段名不相同