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—当实体类中的属性名和表中的字段名不一样 ,怎么办 ?