每个datax的json都有自己的json配置文档,基本大同小异,有几个配置较为少用,但是用了之后,真香~


一、querySql

1、使用教程

  • 描述:在有些业务场景下,where这一配置项不足以描述所筛选的条件,用户可以通过该配置型来自定义筛选SQL。当用户配置了这一项之后,DataX系统就会忽略table,column这些配置型,直接使用这个配置项的内容对数据进行筛选,例如需要进行多表join后同步数据,使用select a,b from table_a join table_b on table_a.id = table_b.id

    当用户配置querySql时,xxxReader直接忽略table、column、where条件的配置。如果配置了querySql又配置了table,column、where等,在log中会有警告日志,具体代码在
    OriginalConfPretreatmentUtil.dealColumnConf()

……
if (null != userConfiguredColumns && userConfiguredColumns.size() > 0) {LOG.warn("您的配置有误. 由于您读取数据库表采用了querySql的方式, 所以您不需要再配置 column. 如果您不想看到这条提醒,请移除您源头表中配置中的 column.");originalConfig.remove(Key.COLUMN);}// querySql模式,不希望配制 where,那样是混淆不清晰的String where = originalConfig.getString(Key.WHERE, null);if (StringUtils.isNotBlank(where)) {LOG.warn("您的配置有误. 由于您读取数据库表采用了querySql的方式, 所以您不需要再配置 where. 如果您不想看到这条提醒,请移除您源头表中配置中的 where.");originalConfig.remove(Key.WHERE);}// querySql模式,不希望配制 splitPk,那样是混淆不清晰的String splitPk = originalConfig.getString(Key.SPLIT_PK, null);if (StringUtils.isNotBlank(splitPk)) {LOG.warn("您的配置有误. 由于您读取数据库表采用了querySql的方式, 所以您不需要再配置 splitPk. 如果您不想看到这条提醒,请移除您源头表中配置中的 splitPk.");originalConfig.remove(Key.SPLIT_PK);}……
  • 必选:否

  • 默认值:无

2、目前可以使用该配置的插件

目前主要是reader插件,主要有rdbmsReader(sqlServer、mysql、postgresql、oracle等)、hbase20xsqlreader、DrdsReader和KingbaseesReader。

3、源码解读

目前主要的代码都在CommonRdbmsReader的startRead()中
1. 获取 String querySql = readerSliceConfig.getString(Key.QUERY_SQL);
2. 调用  rs = DBUtil.query(conn, querySql, fetchSize);DBUtil.query方法中最终实现是如下:public static ResultSet query(Statement stmt, String sql)throws SQLException {return stmt.executeQuery(sql);}

二、preSql

1、使用教程

  • 描述:写入数据到目的表前,会先执行这里的标准语句。如果 Sql 中有你需要操作到的表名称,请使用 @table 表示,这样在实际执行 Sql 语句时,会对变量按照实际表名称进行替换。比如你的任务是要写入到目的端的100个同构分表(表名称为:datax_00,datax01, … datax_98,datax_99),并且你希望导入数据前,先对表中数据进行删除操作,那么你可以这样配置:"preSql":["delete from 表名"],效果是:在执行到每个表写入数据前,会先执行对应的 delete from 对应表名称

  • 必选:否

  • 默认值:无

2、目前可以使用该配置的插件

目前主要是writer插件,主要有rdbmsWriter、mongoDBWriter、AdsWriter等。

3、源码解读

一般在writer的prepare阶段,例如CommonRdbmsWriter.prepare()方法
1.获取所有preSqls List<String> preSqls = originalConfig.getList(Key.PRE_SQL, String.class);List<String> renderedPreSqls = WriterUtil.renderPreOrPostSqls(preSqls, table);
2.执行preSqls
WriterUtil.executeSqls(conn, renderedPreSqls, jdbcUrl, dataBaseType);

三、postSql

1、使用教程

  • 描述:写入数据到目的表后,会执行这里的标准语句。(原理同 preSql )

  • 必选:否

  • 默认值:无

2、目前可以使用该配置的插件

大部分的writer插件

3、源码解读

同preSql,不在赘述;


四、splitPk

1、使用教程

  • 描述:进行数据抽取时,如果指定splitPk,表示用户希望使用splitPk代表的字段进行数据分片,DataX因此会启动并发任务进行数据同步,这样可以大大提升数据同步的效能。

    推荐splitPk用户使用表主键,因为表主键通常情况下比较均匀,因此切分出来的分片也不容易出现数据热点。

    目前splitPk仅支持整形数据切分,不支持浮点、字符串、日期等其他类型。如果用户指定其他非支持类型,MysqlReader将报错!

    如果splitPk不填写,包括不提供splitPk或者splitPk值为空,DataX视作使用单通道同步该表数据。

  • 必选:否

  • 默认值:空

2、目前可以使用该配置的插件

目前主要是reader插件,主要有rdbmsReader(sqlServer、mysql、postgresql、oracle等)、hbase20xsqlreader、DrdsReader和KingbaseesReader。

3、源码解读

主要在各类reader插件中,以CommonRdbmsReader为例,在CommonRdbmsReader.preCheck()中
1、从配置获取splitPK String splitPK = queryConf.getString(Key.SPLIT_PK);
2、构造出PreCheckTask 对象PreCheckTask t = new PreCheckTask(username, password, connConf, dataBaseType, splitPK);
3、进行表切分,在PreCheckTask的call方法中@Overridepublic Boolean call() throws DataXException {……List<Object> splitPkSqls = this.connection.getList(Key.SPLIT_PK_SQL, Object.class);……try {for (int i = 0; i < querySqls.size(); i++) {String splitPkSql = null;String querySql = querySqls.get(i).toString();……/*verify splitPK*/try {if (splitPkSqls != null && !splitPkSqls.isEmpty()) {splitPkSql = splitPkSqls.get(i).toString();DBUtil.sqlValid(splitPkSql, dataBaseType);if (i == 0) {SingleTableSplitUtil.preCheckSplitPk(conn, splitPkSql, fetchSize, table, userName);}}} catch (ParserException e) {……}}} finally {DBUtil.closeDBResources(null, conn);}return true;}

datax(27):不太常见配置项querySql、preSql、postSql、splitPk相关推荐

  1. matlab用diag直接使用错误_精华液使用3大错误,过敏不能用,晒后不能用,第3点错得太常见!...

    身为一枚护肤爱好者,在日常的保养步骤当中,肯定少不了使用精华液的习惯,我们常常说浓缩就是精华,这个说法就可想而知,精华是比较厉害的,哈哈~ 大部分小姐姐都知道要使用精华液,但是很少人会去研究到底什么是 ...

  2. SAP License:两种不太常见的移动类型

    采购收货相关的移动类型,最常见的当属101,102,122以及161.103和105是一对,用来先收到供应商冻结库存(无价值),然后再用105收到自己的库存里.这种业务应该是用到先进行物料质量判定再决 ...

  3. 求定积分的不太常见的方法

    文章目录 1.周期函数积分的性质 2.换元思路在证明中的应用 3.求解极限的积分法(另类篇) 4.构造递推式求解定积分 5.求解积分的稍微特别的经典方法(IJ函数法) 6.利用区间再现公式 7.加减拆 ...

  4. zookeeper下载地址及常见配置项

    zookeeper下载地址 tickTime=2000 initLimit=10 syncLimit=5 dataDir=/Users/yangyijun/workspace/soft/zkclust ...

  5. sqlserver不太常见的,可能常见但又疑问的tsql语句

    2013年10月29日16:01:58 当数据有 time类型列时候,比如 打电话的通话时长,我们查询时候不方便,我们可以添加一个冗余列,直接统计秒 ,但是 后期知道的,现在我把例如 00:12:23 ...

  6. tsconfig.json中常见配置项的含义解析

    // 用来指定哪些ts文件需要编译 "include": [ "./src/**/*" ], //不包含 "exclude": [es6], ...

  7. echarts折线图常见配置项 分割线虚线样式 显示y轴符号 设置间隔

    option = {xAxis: {type: 'category',data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']},yAxis: { ...

  8. 人脸识别太常见?好用才行,利尔达推出一体化人脸识别解决方案

    人脸识别技术对输入的人脸图像或者视频流进行处理,是一种通过提取每张人脸中的特征信息进行身份鉴别的前沿识别技术. 伴随着智能化时代的悄然到来,人脸识别技术日益普及并被大规模地应用于日常生活场景中.从安防 ...

  9. datax优化之reader提速-详细经历

    首先说明下,个人认为reader提速最重要的一点就是切分任务即split这块,懒得看过程的请直接跳到结尾....结尾的json照着抄就行,莫要瞎改,等你跑好了你再改其他参数 背景:一直用datax从o ...

  10. 人才缺口40万,摆地摊也没有它挣钱,这个神仙职业今年太火了!

    当你学习编程时,最先被困扰在哪一步? 是不是很容易陷入在语法之类的细节而忽视基础概念? 解决当前任务的最佳方法是什么? 在多种编程语言之间来回切换,却感觉不到效率的提高? 0 基础学习编程,最先入手的 ...

最新文章

  1. python 深度 视差 计算_开源双目视觉BM算法-Matlab/Python/Javascript
  2. 数据库备份还原顺序关系(环境:Microsoft SQL Server 2008 R2)
  3. Exynos4412 文件系统制作(一)—— 文件系统的启动过程分析
  4. php ajax session死锁,session过期,ajax请求处理
  5. 【转】HTTP协议中PUT和POST使用区别
  6. wcf服务契约代理链
  7. LayaAir学习笔记
  8. Icode编程>>>Python编程>>>1级训练场>>>基础训练【1】
  9. 矢量控制——SVPWM
  10. 如何测试光纤系统中的插入损耗
  11. linux xia复制命令,Linux常用命令整理
  12. AWS 云计算 SQS SNS
  13. PHP经典实例读书笔记--变量
  14. 在线JSON转TSV工具
  15. Color Constancy Datasets
  16. 冬令营第二天(1.19)
  17. pyCUDA教程-系列学习(1):GPU结构、pyCUDA、numbapro安装及HelloGPU例子
  18. 阿里云无影研发负责人任晋奎:端云技术创新,打造全新用户体验
  19. 狼羊菜过河(C实现)
  20. 1.23 lseek函数

热门文章

  1. 创新创业基础-李德平章节测试答案
  2. 2021年Java爬虫技术教程(一小时实现)
  3. 优控触摸屏使用手册_中达优控plc触摸屏一体机说明书资料
  4. AE遮罩路径扭曲插件BOA Boa for Macv1.3.1破解版
  5. 如何有效提升软件测试质量?
  6. Eclipse SVN插件Subversive的使用(分支,合并,同步,切换)
  7. C语言知识点总结 (一 )
  8. ydisk安卓版本_Y Disk HD
  9. IATF16949:2016汽车质量管理体系认证办理流程
  10. TensorFlow MNIST 数据集