一直觉得,数据库查询、数据库连接以及表输入,这三者实现的功能有点相似,所以就想仔细的研究下这三个。表输入已经在前面讲过了(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子句中用到的字段数量一致。而【数据库连接】可以指定使用字段。

Kettle: 数据库查询/数据库连接相关推荐

  1. kettle数据库查询

    表employees: 表departments: 操作: 修改输出格式:

  2. kettle中使用javascript步骤和fireToDB函数实现自己定义数据库查询

    kettle中使用javascript步骤和fireToDB函数实现自己定义数据库查询 如果你须要实现非传统的数据库查询操作.为了讨论这样的情景,我们如果你须要读取数据库中的正則表達式,然后检查输入的 ...

  3. db 文件 加密_有人说Kettle 数据库JNDI方式数据库密码不能加密,搞他!

    Kettle 数据库JNDI方式数据库密码不能加密,搞他! 1新建数据库连接 1.1 普通局部变量 Step 1: 选择连接类型,这里选择Oracle Step 2: 连接方式选择Native(JDB ...

  4. Java数据库查询简介

    利用Connection对象的createStatement方法建立Statement对象,利用Statement对象的executeQuery()方法执行SQL查询语句进行查询,返回结果集,再形如g ...

  5. kettle组件-查询

    1:数据库查询      数据库连接:所要连接的数据库   模式名称:一般选取用户模式  表名:所要查询的表名  是否使用缓存:指定是否使用数据库缓存查询结果.   缓存大小:指定缓存的大小.   从 ...

  6. JDBC数据库查询操作

    以下是按正常的数据库查询操作(没有做优化),代码如下: package com.test.main;import java.sql.Connection; import java.sql.Result ...

  7. oracle查询并更新数据库,oracle数据库查询和更新

    package sqltest; import java.sql.*; import parameter.BaseCanShu; public class PublicDbOracle { stati ...

  8. python进行数据查询_如何进行python数据库查询?(实例解析)

    在这篇文章之中我们来了解一下关于python数据库的相关知识,有些朋友可能是刚刚接触到python这一编程语言,对这一方面不是特别的了解,在接下来这篇文章将会来带大家来了解关于python查询数据库中 ...

  9. JdbcTemplate(操作数据库-查询返回对象、查询返回集合)

    JdbcTemplate(操作数据库-查询返回对象.查询返回集合) 1.创建数据库 数据库中有三条记录,数据库名为user_db,数据库表为t_book 2.新建实体类: Book类中的每一个属性对应 ...

最新文章

  1. 什么是传感器融合?我们从“盲人摸象”讲起……
  2. python中else什么意思_python中的else语句
  3. 【opencv】边缘高斯模糊(canny+dilate+GaussianBlur)Python实现
  4. mysql删除数据表show_数据库与表显示、创建、删除
  5. 桌面支持--电脑出现临时账户--解决办法
  6. Java黑皮书课后题第8章:8.29(相同的数组)如果两个二维数组m1和m2具有相同的内容,则它们是相同的。编写一个方法,如果m1和m2相同的话,返回true
  7. Linux系列(一):简介与目录结构
  8. 牛客网华为机试考试java_牛客网——华为机试(题17:坐标移动)(Java)
  9. 【李宏毅机器学习】Unsupervised Learning - Word Embedding 无监督学习 - 词嵌入(p22) 学习笔记
  10. 返回json格式的编写(Msg)
  11. 什么是中台?这篇漫画总算讲清楚了
  12. 节点通讯共享信息的问题
  13. php网站渗透实战_PHP网站安全-漏洞渗透及解决方式—概述
  14. 你是否也陷入了《能力陷阱》?
  15. matlab进行预测误差过大,神经网络预测误差太大怎么办,如何看预测结果
  16. CSS中强大的EM(转)
  17. “偶遇” 爱可生 与 MYSQL 大型应用
  18. tomcat与servlet共存时报错 org.apache.catalina.LifecycleException:
  19. 公积金为何会沦为穷人的“鸡肋”?
  20. 百度SEO站群Pofo英文版主题-创意组合和博客主题(WordPress响应式)

热门文章

  1. 巧把任意程序添加到Win10控制面板(添加“系统配置”为例)
  2. pdm中的表 在xml文件中的结构展现
  3. 双目视觉立体匹配matlab,双目视觉立体匹配方法
  4. 3D麻将游戏开发通用算法
  5. 2019 China Collegiate Programming Contest Qinhuangdao K. MUV LUV UNLIMITED
  6. 【每日一看】数据分析面试题归纳整理总结
  7. android将图片宽高定死,Android 图片裁剪功能实现详解(类似QQ自定义头像裁剪) - 酷_莫名简单、KNothing - 51CTO技术博客...
  8. Java的Calendar类怎么用
  9. HDMI延长器与HDMI IP延长器应用区别
  10. laravel+easywechat对接微信公众号自动回复图文消息