一直觉得,数据库查询、数据库连接以及表输入,这三者实现的功能有点相似,所以就想仔细的研究下这三个。表输入已经在前面讲过了(https://blog.csdn.net/yeshang_lady/article/details/107863528),这里不再赘述了。
1. 数据库查询
创建如下转换,具体如下:
先来看【自定义常量数据】中设定的参数,这里只设定了一个参数,并且只指定了一个值,具体如下:
再来看看【数据库查询】中将要用到的表csv(下图中并没有把csv表中的数据全部截取展示出来,但是不影响后续结论):
下面是【数据库查询】中的配置,这里只关注【查询所需的关键字】与【查询表返回的值】的配置,具体如下:
运行该转换,其结果如下:
从这个实验结果可以看出,与【表输入】不同,【数据库查询】并没有将所有满足Gender=Male的所有数据都返回,而只返回了满足条件的第一条数据。接着,更改【自定义常量数据】中的值,具体如下:
重新运行该转转换,其结果如下:
从结果可以看出,尽管Gender=Male这个条件重复了两次,【数据库查询】也没有返回两个不同的结果,推测【数据库查询】每次都是从表头开始查找。【数据库查询】还有其他功能,继续更改【自定义常量数据】中的值,具体如下:
【数据库查询】中的配置修改如下(只截取了重要部分):
重新运行该转换,其结果如下:
针对其结果,有几点需要说明:
- 【查询表返回的值】中可以更改返回的字段的名称(在新的名称里进行更改),这里我没有设置。但是从执行结果中可以看到,原始csv表中的Gender字段因为与【自定义常量数据】中指定的参数同名,在最后的结果中其字段名称从Gender默认更改成了Gender_1。如果不想使用这个名字,则可以在这里进行更改。
- 我在【自定义常量数据】中增加了一个无效的值None。原始表csv中并没有Gender=None的数据,所以在最终的结果中,Gender=None返回的值为在【查询表返回的值】中指定的字段默认值。如果没有在【查询表返回的值】中指定默认值,则其对应字段返回的值为null。
- 【查询表返回的值】中的指定的默认值必须与字段参数类型一致,否则会报错。
- 【查询失败时忽略】:如果勾选了这个选项,那么在执行结果中不会出现Gender=None那一行结果(因为在csv表中查询不到Gender=None的数据)
- 【多行结果时失败】:前面已经说了,【数据库查询】只会返回满足条件的第一条数据。当满足条件的数据有多行时并且勾选了【多行结果时失败】选项,那么这个转换在执行时会报错(如果勾选了这个选项,我们这个转换就会报错。因为无论Gender=Female后者Gender=Male,满足条件的数据都不止一行)。
2. 数据库连接
构建如下转换
先来看看【自定义常量数据】,在这里设置两个参数,一个Gender,一个Age,并分别分配一个值。
接着设置【数据库连接】,具体如下:
运行该转换,其结果如下:
【数据库连接】和【表输入】一样,会把满足条件的所有数据都返回,这一点与【数据库查询】不同。继续更改【自定义常量数据】中的参数,具体如下:
更改【数据库连接】的配置,具体如下:
重新运行该转换,其执行结果如下:
尽管前述步骤【自定义常量数据】提供了两个参数给【数据库连接】,但在【数据库连接】中可以使用其中的一个。而此种情况在【表输入】中会报错(这可能也是【表输入】经常用在转换的起点处的原因吧)。从这个执行结果中也可以看出,查询返回的字段与前述步骤中的字段名相同时,会默认对查询返回的字段名进行更改。在【数据库连接】中如果想要更改查询字段的名称,就只能在SQL代码部分更改了。
3.总结
- 【表输入】和【数据库连接】会将满足条件的所有数据都输出出来,而【数据库查询】只将满足条件的第一条数据输出出来。
- 【数据库查询】和【数据库连接】中返回的查询字段会加入到原始的输入流字段中(如果原始输入流字段与查询返回的字段重名,默认会对查询字段命进行更改)。而【表输入】操作只返回查询字段。这一点很重要,会对后续步骤产生影响。
- 【表输入】使用前述步骤提供的字段时,字段数量必须与where子句中用到的字段数量一致。而【数据库连接】可以指定使用字段。