数据分析指北之 KNIME 模块:Data Access 类型模块之二 Database 模块集合

栏目: 数据库 · 发布时间: 5年前

内容简介:欢迎关注公众号 数据分析指北感觉有用?帮忙转发?谢谢!

数据分析指北之 KNIME 模块:Data Access 类型模块之二 Database 模块集合

欢迎关注公众号 数据分析指北

感觉有用?帮忙转发?谢谢!

数据分析指北 - KNIME 模块( Data Access 类型模块之二 Database 模块集合)

历史回看:

- 基础(Data Access类型模块之一IO模块集合)

- 泰坦尼克沉船数据分析之二)

- 附录五 运行 KNIME workflow 时出现问题怎么办?

数据分析指北之 KNIME 模块:Data Access 类型模块之二 Database 模块集合

Photo by Tobias Fischer on Unsplash

微信公众号:数据分析指北

  • Data Access 类型模块(继续…)

    • Connector 部分

    • KNIME 从数据库获取数据的两种模式

    • Read/Write部分

    • Manipulation 部分

    • Utility 部分

上一节我们讲了 KNIME 中 Data Access 类型模块中的一大类–IO模块集合,并给出了对应于各模块的学习建议。这节我们讲 DATA Access 类型模块中的 Database 模块集合。

Data Access 类型模块(继续…)

Database 模块集合简述

注:以下 Database 模块均是 KNIME 3.6.2 中的模块,KNIME 官方正在开发新一套的数据库相关模块,支持流相关操作,可能会在不久后释出,名称类似 DB xxxx,请注意区别。

数据分析指北之 KNIME 模块:Data Access 类型模块之二 Database 模块集合

Node Repository中的Database模块集合

Database类型的模块主要分为 Read/Write、Connector、Manipulation 和 Utility 四个部分。按照逻辑来讲,如果我们只谈纯粹Data Access类型的模块,似乎讲其中的 Read 部分就够了,但实际上,因为 Database 模块的非独立性(即它不像上面所说的文件读写模块类型,单独就可以运行),除了 Write 部分以外,其余部分可以均成为“Data Access”这个类型的组成成分,所以也将其归类在这里。我们先从 Connector 部分开始讲起。

Connector 部分

基础(基础数据操作之二,读取数据源) 一篇中,我们描述了 KNIME 是如何通过 JDBC 驱动去连接各种各样类型的数据库。对于一些基本的关系型数据库,SQLite、 MySQL 、MSSQL、PostgresSQL等,KNIME 已经内置了相应的 JDBC 驱动,我们需要做的只是选择特定的connector,然后配置数据库地址、端口、用户名以及密码之类的信息就可以连接了。对于 KNIME 中没有内置驱动的数据库,我们需要做的是先在相应数据库的官网或社区下载到对应的 JDBC 驱动,并在 KNIME 中配置,最后使用   Database Connector   这个通用模块连接数据库。可参照 附录四 如何配置 KNIME 访问 MS Access   中关于 MS Access DB 的连接学习 KNIME 不默认支持的数据库如何访问。

数据分析指北之 KNIME 模块:Data Access 类型模块之二 Database 模块集合

Database模块集合中的Connector部分

[重点::sparkles::sparkles::sparkles:;难度::sparkles:]Database Connector模块。这是一个通用型的模块,在使用时,需要指定相应的 JDBC 驱动,并且配置相应数据库的URL以及其他相关信息。在其他 KNIME 数据库 connector 模块不能满足你要求的情况下,它将是你的唯一选择。甚至在这个模块当中,你也可以配置其驱动,使其变成一个MySQL Connector。如下图所示,在Database driver选择了 MySQL 的驱动,然后在 URL 位置按照格式写下MySQL的连接地址和端口就可以了。如果你的数据中有时间相关的字段,那么在整个配置中,TimeZone 需要特别注意一下。

数据分析指北之 KNIME 模块:Data Access 类型模块之二 Database 模块集合

经过特定配置后可以读取 MySQL 的 Database Connector

[重点::sparkles::sparkles:;难度::sparkles:]MySQL Connector 模块。这里不用像上面的模块根据格式列写数据库 URL,而只需要按照格式填写数据库相应配置内容就可以了。其实内部的组成和上面的 Database Connector 组成一致。对于学过计算机语言的人来说,这其实就是面对对象编程(OOP)中的概念,Database Connector 对应了基类,而 MySQL Connector 只是在基类上做了继承的子类。这个模块的输出和上面 Database Connector 的输出都是 a database JDBC connnection ,可以理解为类的一个实例。对于没有系统学过OOP的人,只需要把输出理解为数据库的连接就可以了。此模块输出端口在图形上显示的是一个红色的实心框框。

数据分析指北之 KNIME 模块:Data Access 类型模块之二 Database 模块集合

MySQL Connector的配置界面

而其余的 Connector 和 MySQL Connector 一样,都是继承自 Database Connector,不再赘述。

KNIME 从数据库获取数据的两种模式

[重点::sparkles::sparkles::sparkles:;难度::sparkles::sparkles:]在继续讲模块之前,先介绍一下(Big Picture)数据库读取的两种模式:一种是将数据从数据库中取出后,利用 KNIME 的模块进行分析;另外一种方式是,在数据库中就做一些预处理,然后再把接下来的数据放在 KNIME 中处理。

比如我们有一个叫做 titanic 的 sqlite 数据库(具体数据内容请参照 泰坦尼克沉船数据分析之一)   中的介绍)。我们现在想了解一下整个数据中男性和女性的数量是多少,按照上面介绍的第一种方法,我们做出如下的 workflow:

数据分析指北之 KNIME 模块:Data Access 类型模块之二 Database 模块集合

将数据从数据库中读出再做处理

其中 Database reader 的配置如下:

数据分析指北之 KNIME 模块:Data Access 类型模块之二 Database 模块集合

配置 Database reader

group by 模块配置很简单,不做赘述,最后得到如下结果:

数据分析指北之 KNIME 模块:Data Access 类型模块之二 Database 模块集合

group by 模块结果

如果按照上面所说的第二种方法,那么我们删除 Group by 模块,重新配置 database reader 模块:

数据分析指北之 KNIME 模块:Data Access 类型模块之二 Database 模块集合

第二种方法配置 Database reader

第一种方法是将计算的过程放在了 KNIME 中,而第二种方法是把计算的过程放在了数据库中(这种方式称为 in-database processing )。这两种方法究竟哪一种合适,需要根据具体情况具体分析,有时你的数据库硬件配置比较强,那么放在数据库中计算能够显著加快你构建模型、调试的速度;有时你的 SQL 语句太复杂,那么也许将计算的过程放在 KNIME 中是比较适合。需要你根据具体情况 trade off。

另外,在KNIME中,第二种方法有另外一种写法,就是利用 KNIME database 相关的 Manipulation 模块,比如对于前面的问题来说,可以这样构建 workflow:

数据分析指北之 KNIME 模块:Data Access 类型模块之二 Database 模块集合

第二种方法的另外一种形式

注意和上面的区别,其中的 database table selector 模块,只是读取了 titanic 数据(这个过程是发生在数据库层面的),然后在数据库层面做了 group by 的操作( Database GroupBy 和 KNIME中的 GroupBy 大同小异),最后利用 Database Connection Table Reader 模块(注意,这不是上面的 Database Reader模块)将数据从数据库中读取到 KNIME 中。

Database Manipulation 模块其实只是把第二种方法复杂的 SQL 语句变成了图形化的方案,你可以通过观察 Database GroupBy 的输出对这种方法的原始实现有一个认识。Database GroupBy 节点的输出:

Database Driver:  
org.sqlite.JDBC  

Database URL: jdbc:sqlite:/Users/HaveF/Desktop/knime-workspace/practicalDA/07DatabaseExample1/db.sqlite  

User Name:    

Database Type:  
sqlite  

SQL Statement: SELECT Sex, COUNT(table_1189361459.Survived) AS Survived FROM (SELECT * FROM titanic) table_1189361459 GROUP BY Sex

可以通过上面的 SQL Statement 看出,这里和第二种方法类似,构建了 SQL 语句,但这种方法最大的好处在于,方便调试复杂的 SQL 语句,具体可以参照 database 相关节点输出中的 table preview 来理解,在此不做细讲。

如果想实验整个过程,可以利用我已经构建好的 workflow 做实验。

关注公众号:数据分析指北,回复“作业”,即可获得下载链接。

Read/Write部分

如果已经搞明白上面两种获取数据库数据的方法,那么下面的内容就相对来说很简单了。我们快速浏览一下:

数据分析指北之 KNIME 模块:Data Access 类型模块之二 Database 模块集合

Database模块集合中的Read/Write部分

[重点::sparkles::sparkles::sparkles:;难度::sparkles:]Database Reader 在上面已经使用过,配置项很少,只需要把sql语句填进去就可以了。

[重点::sparkles::sparkles::sparkles:;难度::sparkles:]Database Writer 只需要填好需要写的表名,并配置好数据的 SQL type 。

数据分析指北之 KNIME 模块:Data Access 类型模块之二 Database 模块集合

Database Writer配置一瞥

[重点::sparkles::sparkles:;难度::sparkles::sparkles:]Database Table Selector 在上面也已经使用过,这是一个 in-database processing 的模块,这个模块的输出其实是一个sql语句,后面只能接其他 in-database processing 的模块,这些类型的模块的终点只能是database connection table reader 或 database connection table writer,通过这两个节点,要么把在数据库中内部处理的数据输出到 KNIME 中,要么把处理的结果再重新写回到数据库中。

[重点::sparkles:;难度::sparkles::sparkles:]Database Table Connector其实是 Database connector 和 Database Table Selector两个模块组合的一个快捷方式。

[重点::sparkles::sparkles::sparkles:;难度::sparkles::sparkles:]Database Update、Delete 模块都是类似Writer的标准模块。需要注意的是,Update 模块不能够插入数据库中没有的条目,它只是一个更新(update)模块。如果你有一些数据想更新到数据库中,那么你需要先把这部分数据根据条件(比如主键)分成数据库中有的数据和数据库中没有的数据,将数据库中有的数据通过 Update 更新,而将数据库中没有的数据通过 Writer 模块写入。在将来的KNIME数据库模块中,会有名为DB merge的模块,一个节点统一处理上述情况。

[重点::sparkles:;难度::sparkles::sparkles::sparkles:]Database Looping 和 Parameterized Database Query 主要就是一些参数化的查询。比如 可以通过 Looping 模块来查询一系列类似条件的数据。而后一个模块在查询时可以加入一些动态参数,比如下面的例子中,就是将动态数据(例子中是以 web 服务获取到JSON数据做为临时数据)放在查询语句中,查询出结果并返回。

数据分析指北之 KNIME 模块:Data Access 类型模块之二 Database 模块集合

Parameterized Database Query的一个例子

Manipulation 部分

Manipulation部分的模块,主要是配合上面说的 in-database processing 的过程,如下所示:

数据分析指北之 KNIME 模块:Data Access 类型模块之二 Database 模块集合

Database 模块集合中的 Manipulation 部分

[重点::sparkles::sparkles:;难度::sparkles::sparkles:]可以看到,模块和 KNIME column/ row 相关的 Manipulation 类似,只不过这些操作是在数据库中进行的。这样也带来了另外一个问题 – 这些模块有一些功能其实比较依赖于数据库本身,就拿 Group By 模块来说,KNIME 自身的 Group By 模块有很多的 Group Functions 或 Aggregate Functions 聚合函数(参照 基础( 基础数据操作之四,从SQL的case,group by,join 到工具KNIME ) ),但这些 Functions 在 Database GroupBy 中就只有少部分能支持了。

对于数据库操作能力比较强的小伙伴来说,也许感觉 Manipulation 部分比较鸡肋,但根据个人经验来说,如果你写的 SQL 百行以上时,Debug 就相对来说比较困难了,这种时候,也许这些模块能够帮你忙。

Utility 部分

Utility 部分内容比较少,Drop Table 含义一望即知;SQL executor 是 in-database processing 中的一个可以自定义sql语句的模块;而 SQL inject、Extract 是在 in-database processing 中操作中间生成 SQL 语句的模块,相对来说用的较少。

数据分析指北之 KNIME 模块:Data Access 类型模块之二 Database 模块集合

Database 模块集合中的 Utility 部分

至此,基础的关系型数据库相关的 Data Access 类型模块就介绍完毕了。

回头聊

感觉有用?帮忙转发?谢谢!

数据分析指北之 KNIME 模块:Data Access 类型模块之二 Database 模块集合


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

第一本Docker书 修订版

第一本Docker书 修订版

詹姆斯·特恩布尔 (James Turnbull) / 李兆海、刘斌、巨震 / 人民邮电出版社 / 2016-4-1 / CNY 59.00

Docker是一个开源的应用容器引擎,开发者可以利用Docker打包自己的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。 本书由Docker公司前服务与支持副总裁James Turnbull编写,是Docker开发指南。本书专注于Docker 1.9及以上版本,指导读者完成Docker的安装、部署、管理和扩展,带领读者经历从测试到生产的整个开发生......一起来看看 《第一本Docker书 修订版》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具