内容简介:欢迎关注公众号 数据分析指北感觉有用?帮忙转发?谢谢!
欢迎关注公众号 数据分析指北
感觉有用?帮忙转发?谢谢!
数据分析指北 - KNIME 模块( Data Access 类型模块之二 Database 模块集合)
历史回看:
- 附录五 运行 KNIME workflow 时出现问题怎么办?
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,请注意区别。
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 不默认支持的数据库如何访问。
Database模块集合中的Connector部分
[重点::sparkles::sparkles::sparkles:;难度::sparkles:]Database Connector模块。这是一个通用型的模块,在使用时,需要指定相应的 JDBC 驱动,并且配置相应数据库的URL以及其他相关信息。在其他 KNIME 数据库 connector 模块不能满足你要求的情况下,它将是你的唯一选择。甚至在这个模块当中,你也可以配置其驱动,使其变成一个MySQL Connector。如下图所示,在Database driver选择了 MySQL 的驱动,然后在 URL 位置按照格式写下MySQL的连接地址和端口就可以了。如果你的数据中有时间相关的字段,那么在整个配置中,TimeZone 需要特别注意一下。
经过特定配置后可以读取 MySQL 的 Database Connector
[重点::sparkles::sparkles:;难度::sparkles:]MySQL Connector 模块。这里不用像上面的模块根据格式列写数据库 URL,而只需要按照格式填写数据库相应配置内容就可以了。其实内部的组成和上面的 Database Connector 组成一致。对于学过计算机语言的人来说,这其实就是面对对象编程(OOP)中的概念,Database Connector 对应了基类,而 MySQL Connector 只是在基类上做了继承的子类。这个模块的输出和上面 Database Connector 的输出都是 a database JDBC connnection
,可以理解为类的一个实例。对于没有系统学过OOP的人,只需要把输出理解为数据库的连接就可以了。此模块输出端口在图形上显示的是一个红色的实心框框。
MySQL Connector的配置界面
而其余的 Connector 和 MySQL Connector 一样,都是继承自 Database Connector,不再赘述。
KNIME 从数据库获取数据的两种模式
[重点::sparkles::sparkles::sparkles:;难度::sparkles::sparkles:]在继续讲模块之前,先介绍一下(Big Picture)数据库读取的两种模式:一种是将数据从数据库中取出后,利用 KNIME 的模块进行分析;另外一种方式是,在数据库中就做一些预处理,然后再把接下来的数据放在 KNIME 中处理。
比如我们有一个叫做 titanic 的 sqlite 数据库(具体数据内容请参照 泰坦尼克沉船数据分析之一) 中的介绍)。我们现在想了解一下整个数据中男性和女性的数量是多少,按照上面介绍的第一种方法,我们做出如下的 workflow:
将数据从数据库中读出再做处理
其中 Database reader 的配置如下:
配置 Database reader
group by 模块配置很简单,不做赘述,最后得到如下结果:
group by 模块结果
如果按照上面所说的第二种方法,那么我们删除 Group by 模块,重新配置 database reader 模块:
第二种方法配置 Database reader
第一种方法是将计算的过程放在了 KNIME 中,而第二种方法是把计算的过程放在了数据库中(这种方式称为 in-database processing )。这两种方法究竟哪一种合适,需要根据具体情况具体分析,有时你的数据库硬件配置比较强,那么放在数据库中计算能够显著加快你构建模型、调试的速度;有时你的 SQL 语句太复杂,那么也许将计算的过程放在 KNIME 中是比较适合。需要你根据具体情况 trade off。
另外,在KNIME中,第二种方法有另外一种写法,就是利用 KNIME database 相关的 Manipulation 模块,比如对于前面的问题来说,可以这样构建 workflow:
第二种方法的另外一种形式
注意和上面的区别,其中的 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部分
如果已经搞明白上面两种获取数据库数据的方法,那么下面的内容就相对来说很简单了。我们快速浏览一下:
Database模块集合中的Read/Write部分
[重点::sparkles::sparkles::sparkles:;难度::sparkles:]Database Reader 在上面已经使用过,配置项很少,只需要把sql语句填进去就可以了。
[重点::sparkles::sparkles::sparkles:;难度::sparkles:]Database Writer 只需要填好需要写的表名,并配置好数据的 SQL type 。
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数据做为临时数据)放在查询语句中,查询出结果并返回。
Parameterized Database Query的一个例子
Manipulation 部分
Manipulation部分的模块,主要是配合上面说的 in-database processing 的过程,如下所示:
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 语句的模块,相对来说用的较少。
Database 模块集合中的 Utility 部分
至此,基础的关系型数据库相关的 Data Access 类型模块就介绍完毕了。
回头聊
感觉有用?帮忙转发?谢谢!
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 数据分析指北:KNIME 模块
- 数据分析是什么,如何完善数据分析知识体系
- 大数据分析工程师入门(二十):数据分析方法
- 蚂蚁数据分析平台的演进及数据分析方法的应用
- 数据分析的准备工作:从问题分析到数据清洗
- 数据分析:基于智能标签,精准管理数据
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Design systems
Not all design systems are equally effective. Some can generate coherent user experiences, others produce confusing patchwork designs. Some inspire teams to contribute to them, others are neglected. S......一起来看看 《Design systems》 这本书的介绍吧!