多表,多数据源,多字段转换到 一个目标表中
多表,多数据源,多字段转换到 一个目标表中
这里将记录一个搭建一个job的实例:
-
从文档上看就是将多个表统一到一张表上
-
多个表来源于多个数据源
-
取的是不同的表的不同的字段
控制:
通过我们这边日期的控制可以实现 对 不同的数据日期的转换
数据源:
本地sqlserver 的 local_server_test
本地mysql 的 human_test
目标表:
节点上的 MySQL local_server_test
思路:
会从 一个 开发者的角度 进行 配置。
第一步:
实现源数据表 表输入--> 表输出 (测试的时候可以用具体的日期)
实现本地sql server 到 节点 mysql
一般第一步 表字段能对应上就没问题了
第二步:
注意先将组件之间联系上
这个时候我们要考虑的是我们是多个表,那么我们需要加入本地 MySQL 数据库中 human_test 字段了
这个地方我试了很久,网上的教程都是相同字段将字段内的内容进行合并的
现在我们需要的是,将不同的字段不同的内容加入到同一张表中,可以理解为多表联合查询
这个地方我们选择的组件是 查询--->数据库连接
注意:(1)要先 点击 获取关键字 才会显示字段。这里的 查询所需关键字 表字段是 连接的数据源的表 后边的字段 是上一步组件的结果集结果
这里连接条件可以理解为 where 条件
-
要点击 获取返回字段。 这里就会返回 数据源表中 (1)中条件符合的字段。选取我们 需要的字段即可。
到了这里我们的ETL 部分就结束了
第三步:
添加控制条件。 因为业务需要,我们需要 重新加载 历史日期的数据。
这个地方我也费了一番功夫。
我们用到的组件是: 设置变量 ,获取变量 这个组件在 转换的目录下的 作业目录下:
顾名思义 设置变量 是 我们进行设置的。
获取变量 是获取我们 设置的变量。
变量值的获取,我们这边 用到的是表输入,用的是目标数据库中的时间。
表输入里边我们要获取我们需要的 字段
这里要注意的是 我们的日期会被自动转换为 字符串类型 同时我们需要注意的是 日期是不能进行比较的,既然如此,为了不引起不必要的麻烦,我们提前在获取的时候,可以提前对日期数据类型就行转换
同时需要注意的是 变量只能保存一个值,我们最好是限定好我们取的数据只有一条
点击获取变量, 注意变量名最好用 大写
同时需要注意的是 变量的活动类型
这里一共有四种根据自己需求来定:
valid in the root job
vaild in the java virtual machine
vaild in the parent job
vaild in the grand-parent job
下边就是我们的获取变量:
(这里为什么要分到两个转换中呢,主要是为了调试的时候好调试等原因吧。
里边的我们直接手填就行
后边我们的 表输入就需要进行修改了
这里需要注意的是 变量一定要跟 获取变量 中的值一摸一样。
其次就是SQL 本身的日期转换。
最后下边的 框,替换sql 语句里的变量要对上钩。
下边的 从步骤插入数据 不要选!!!
第四步:
我们这里第四步就是将这些 转换结合起来。所以我们要新建一个作业。
红框里的是基础 组件
第一个 是必须有的。可以进行设置 定时任务。
第二个 是获取我们设置的变量。
第三个 是我们ETL的主体部分,到了这里我们 设置变量就和 获取变量就联系起来了。
第四个就是一个成功标志。
目前我们的主题流程就完成了。
下边就是调试了:
观察表的数据的变化。 里边添加的两个步骤是 sql脚本。目的是 在我们
执行前后 修改我们控制表的状态,告诉前台我们的流程正在进行。同时用到了
我们的变量。