上一篇博客介绍了本次操作的一些需求和预研思路,并且对第一种方式做了测试,现在将对第二种方式做测试。虽然在网上有不少关于动态链接库的文章,但是不少是操作kettle文件,或者通过脚本去按照一定规则生成变量。好像并不是很适合我自己的任务思路,因此在借鉴他们的思路的基础上,通过多次测试,终于走通了动态链接数据源的数据抽取,为了方便一步一步的递进,本次选择了一个数据较少的表来测试,具体步骤详见下文。

   (1)单个数据源多表批量操作:每次只连接一个数据源,把表名作为变量,维护一个任务抽取一个用户节点的所有数据

   (2)多个数据源单标批量操作:动态链接多个数据源,每个数据源只对一个表做数据抽取

   (3)多个数据源多表批量操作:动态链接多个数据源,每个数据源所有表做数据抽取

1.1 持久化数据源信息

因为我们要做批量数据源的数据迁徙,因此可以将多个数据库的数据源链接信息先保存在表里,或者保存在其他形式的文件里,方便我们去到数据。为了后续扩展方便,管理方便,我将数据源链接信息放在表里。同时为了能一条一条的取出数据源,我定义了一个标志字段id,可以通过这个id来获取一条条的记录。持久化信息如下:

CREATE TABLE "public"."t_cce_jdbc" (
"id" varchar(100) COLLATE "default",
"jdbc_name" varchar(255) COLLATE "default",
"jdbc_host" varchar(255) COLLATE "default",
"jdbc_username" varchar(255) COLLATE "default",
"jdbc_pasword" varchar(255) COLLATE "default",
"jdbc_database" varchar(255) COLLATE "default",
"jdbc_port" varchar(10) COLLATE "default")
WITH (OIDS=FALSE)


kettle多表拼接json更新到MongoDB kettle多表抽取_数据




1.2 设置数据库链接id为变量

1) 新建一个transfer,命名为getIds,包含三个步骤如图所示:

     

kettle多表拼接json更新到MongoDB kettle多表抽取_批零数据库操作_02

2) 设置表输入的数据库源设置

 

kettle多表拼接json更新到MongoDB kettle多表抽取_kettle_03

3) 设置表输入的获取数据脚本,这里就是从持久化的数据中获取到数据,为了后续的每次执行一条数据库脚本,这里就先把id获取出来,左后后续获取数据库链接的一个参数。

kettle多表拼接json更新到MongoDB kettle多表抽取_批零数据库操作_04

4) 将设置选择字段,因为这里只有一个id字段,因此只要列一个字段即可,暂时将其设置为id_param

kettle多表拼接json更新到MongoDB kettle多表抽取_kettle_05

5) 将三个步骤联结起来,完成单钱transfer的操作,如下图

kettle多表拼接json更新到MongoDB kettle多表抽取_数据_06

1.3 获取数据库链接id信息

1) 新建transfer,命名为setIdparam,包含如下两个步骤

kettle多表拼接json更新到MongoDB kettle多表抽取_kettle_07

2) 设置从结果获取的记录,将上一个保存到结果的数据拿出来

kettle多表拼接json更新到MongoDB kettle多表抽取_ETL   _08

3) 将获取的记录结果保存到变量中,并将变量名统一改为大写ID_PARAM

kettle多表拼接json更新到MongoDB kettle多表抽取_数据_09

4) 将两个步骤联结起来,并保存

kettle多表拼接json更新到MongoDB kettle多表抽取_数据源_10

1.4 设置数据库链接信息为结果

1) 新建transfer,命名为getJDBC,包含三个步骤,如下图:

kettle多表拼接json更新到MongoDB kettle多表抽取_批零数据库操作_11

2) 设置数据库链接,这里的链接跟获取id的链接是一样的,如下图:

kettle多表拼接json更新到MongoDB kettle多表抽取_数据源_12

 

3) 设置数据库脚本,根据上一步的ID参数获取每一次要获取的数据库链接,注意要勾选上允许替换SQL中的变量

kettle多表拼接json更新到MongoDB kettle多表抽取_数据_13

4) 设置选择字段,根据上一个脚本查出来的字段,选择将要设置为变量的字段,并加上一个参数标识。

kettle多表拼接json更新到MongoDB kettle多表抽取_数据_14

5) 设置变量将选取的字段设置为变量

kettle多表拼接json更新到MongoDB kettle多表抽取_批零数据库操作_15

6) 将三个步骤联结起来并保存

kettle多表拼接json更新到MongoDB kettle多表抽取_批零数据库操作_16

1.5 抽取数据库数据

1) 新建transfer命名为getDatas,包含两个步骤,如下图所示:

kettle多表拼接json更新到MongoDB kettle多表抽取_数据_17

2) 设置表输入的数据库链接,因为这里的数据库链接是从上一个的变量找那个获取,因此这里的链接信息基本上都是用变量代替,如下图所示:

kettle多表拼接json更新到MongoDB kettle多表抽取_数据_18

 

3) 设置数据库抽取脚本,这里只用一个表做抽取,如下图所示:

kettle多表拼接json更新到MongoDB kettle多表抽取_kettle_19

4) 设置表输出的目标链接信息,如下图所示:

kettle多表拼接json更新到MongoDB kettle多表抽取_数据源_20

5) 设置目标表,根据上一步设置的表输入的脚本中表名,选择目标表

kettle多表拼接json更新到MongoDB kettle多表抽取_批零数据库操作_21

6) 将两个步骤链接,保存。

kettle多表拼接json更新到MongoDB kettle多表抽取_kettle_22

1.6 建立数据库抽取子Job

1) 新建Job,命名为jobData,包含如下三个步骤:

kettle多表拼接json更新到MongoDB kettle多表抽取_kettle_23

2) 设置第一个转换,从文件中选择之前步骤设置的setIdParam绑定,如下图:

kettle多表拼接json更新到MongoDB kettle多表抽取_ETL   _24

3) 设置第二个转换,从文件中获取之前的步骤setJDBC绑定,如下图:

kettle多表拼接json更新到MongoDB kettle多表抽取_ETL   _25

4) 设置第三个转换,从文件中获取之前设置的getDatas绑定,如下图

kettle多表拼接json更新到MongoDB kettle多表抽取_批零数据库操作_26

5) 连接三个步骤,并保存,如下图

kettle多表拼接json更新到MongoDB kettle多表抽取_kettle_27

1.7 建立数据库抽取整个Job

1) 新建一个job,命名为jobAll,包含如下三个步骤

kettle多表拼接json更新到MongoDB kettle多表抽取_批零数据库操作_28

2) 设置第一个转换,从文件中选择前面设置的getIds绑定,如下图所示:

kettle多表拼接json更新到MongoDB kettle多表抽取_kettle_29

3) 设置子job,选择之前步骤设置的jobDatas绑定,并在高级中勾选每个输入执行一次,如下图所示:

  

kettle多表拼接json更新到MongoDB kettle多表抽取_ETL   _30

kettle多表拼接json更新到MongoDB kettle多表抽取_ETL   _31

4) 链接job中的所有步骤,并保存。

kettle多表拼接json更新到MongoDB kettle多表抽取_数据_32

1.8 执行任务并查看结果

数据源1数据:22条

数据源2数据:54条

执行后目标库数据:76条

通过实验可以发现两个数据源的数据都已入库。