在这个由三部分组成的关于 IBM® SPSS® Modeler 与数据库集成建模及优化系列的前两部分中,我们谈到了与数据库相关的基本操作及集成建模,本部分将重点关注 SPSS Modeler 集成使用数据库的过程中的">性能优化,包括多种功能的介绍和技巧的使用:
• 数据操作回送
• 模型回送
• 数据库插件 - 评分服务适配器
• 调用数据库函数
• 重新排列执行顺序
• 性能提升技巧总结
本文假设读者熟悉在 SPSS Modeler 中如何建立数据库连接及其他一些基本的操作,如创建数据流、编辑节点等。
SQL 回送功能
SQL 回送功能是 IBM® SPSS® Modeler 最强大的功能之一, 可直接在数据库中执行许多数据准备和数据挖掘的操作。 正如 SQL 回送名称字面上的意思, 其基本原理是通过生成可在数据库内部进行执行的 SQL 语句, 然后回送到数据库里执行。通过在数据库中执行, 而不必在 IBM® SPSS® Modeler 或 IBM® SPSS® Modeler Server 所在的计算机上执行,可以减少需要传输的数据规模( 比如先在数据库中进行抽样、汇总、连接等) 和利用数据库并行处理及索引功能带来的高性能, 获得数据挖掘过程整体的性能优化。也正是基于此原因, SPSS Modeler 的设计尽最大可能地利用 SQL 回送功能。 但是由于不同数据库的差别,及标准 SQL 所能表达的内容限制, SPSS Modeler 中还是有一部分的操作不能支持 SQL 回送。 如果在流文件中使用到这些功能,那么将会在 SPSS Modeler Server 端执行而不是在数据库内执行。
如果需要使用 SQL 回送功能,首先需要购买此功能相应的许可码, 然后启用”Generate SQL”,具体方法请参见帮助文档。当然, 所有的 SQL 回送都需要以一个或多个数据库源节点为数据源。
数据操作回送
通过回送至数据库进行执行而获得性能提升的数据操作大致分为两类,可减少数据规模的操作和可利用数据库高性能处理的操作。前者比如选择 (select)、汇总 (aggregate)、抽样 (sample) 、过滤 (filter) 等操作,后者比如排序(sort)、字段派生 (derive) 等。我们在这里以选择操为示范作简单介绍。如图 1 所示,将 Modeler 示例文件 DRUG1n 写出至数据库(此处使用 DB2 9.7),然后再从数据库读入。
图 1. 数据回送示例流
假设我们不需要全部的数据,比如只需要年龄大于 45 岁的人群的数据进行后续操作,那么在 Select 节点中的表达式可以写为”Age > 45”,如图 2 所示。
数据回送示例 select 节点
回到图 1 所示,上方工具栏中有一个紫色的”SQL”图标,当在 Modeler 的操作区域选取可执行节点(如图中的 Table 节点)时,此按钮即变为可点击状态,点击它即可预览当前所选可执行节点所在流分支的 SQL 回送情况。它并不会真正地执行数据操作,只是生成当前流分支的 SQL 语句,以供用户进一步使用作参考,本文后面我们会反复使用这个预览功能生成 SQL 语句。点击这个图标后,流会短暂地进入不可编辑状态,进行流 SQL 语句的生成,以及对流分支是否可回送的状态进行展示。其中被紫色高亮的节点表示可以回送至数据库执行,其他未变色的节点将在 SPSS Modeler 本地执行。如图 3 所示本例中下方分支前两个节点可回送至数据库执行,最后一个节点在本地执行。
数据回送示例预览
此时察看流文件的 Messages 信息可以看到类似如下的 SQL 语句产生。其中第一行"Previewing SQL"表示后面的语句是在预览时产生的 ( 正式执行时为"Executing SQL"),最后一行的 where 子句即我们在 Select 节点中使用的表达式对应的条件。
SQL:
SELECT T0."Age" AS "Age",T0."Sex" AS "Sex",T0.BP AS BP,T0. "Cholesterol" AS "Cholesterol",T0."Na" AS "Na",T0.K AS K, T0."Drug" AS "Drug" FROM "test" T0 WHERE (T0."Age" > 45)