内容


InfoSphere 最佳实践

了解 IBM InfoSphere Information Analyzer 中数据质量规则的资源使用

使用特定类型数据质量规则的性能意义

Comments

系列内容:

此内容是该系列 # 部分中的第 # 部分: InfoSphere 最佳实践

敬请期待该系列的后续内容。

此内容是该系列的一部分:InfoSphere 最佳实践

敬请期待该系列的后续内容。

简介

IBM InfoSphere Information Analyzer 8.1.1 引入了关于数据质量的规则。规则描述了干净数据应该如何出现,以及一个监测数据质量的强大工具。一般分析工具会在所执行的 SQL 语句中顺序地转换每个数据规则,与此相反,InfoSphere Information Analyzer 可并行地,在大批记录上执行大量的规则。想要获得最高性能,必须要了解有多少资源需要执行这些规则。

本文的目的就是帮助您了解数据规则的执行流程,以及特定数据规则的使用对性能及资源的影响。

本文重点关注以下要点:

  • 执行时间:在执行规则时发生了什么?哪类规则执行得较快?哪类规则占用较多资源?
  • 内存使用:如何降低内存使用率,以及这会对性能产生什么影响?
  • 分析数据库中磁盘使用:在规则执行过程中创建了什么项目?分析数据库的规模应该是多大?如何节省分析数据库中的磁盘空间?

规则执行时间

标量与柱状规则

标量规则 是最简单的可执行规则。为返回一个结果,标量规则只需要记录的当前已评估字段值。当规则中所有测试及在其逻辑中使用的函数都是标量时,该规则就是标量的。

以下例子展示了如何对 postal code 及 country 应用标量规则。

if trim(country)='US' then postal_code matches_regex '^[0-9]{5}$'

该规则验证了任何 country 为 US 的记录,其 postal codes 也匹配一个特定正则表达式。虽然它包括多个测试及函数,但是它只需要评估的真实记录值。

需要传递多个数据的规则称为柱状规则

以下是柱状规则的例子。

id unique

该规则检查所有记录,来确保每个记录具有唯一的 id。虽然该规则的定义看起来很简单,但是该规则的评估,需要通过列 id 来对值进行排序或分组,并计数来确定列中的每个值是否唯一。

标量规则线性扩展,并可并行执行,因此,在应对大量 InfoSphere DataStage® 节点时,它们也具有很好的水平可伸缩性。向规则集中增加新的标量规则时,通常仅会对执行时间产生轻微的影响。另一方面,柱状规则要求在规则本身可评估之前,首先要存储数据。在针对大数据集执行时,这会很明显地影响执行时间。此外,这些规则会减少任务的可并行执行能力。

可在可用于数据规则的所有测试及函数执行类型的 概述 部分,找到哪些测试及函数是标量的以及哪些是柱状的。

下面部分解释了依据规则所包含测试及函数类型的不同,规则执行的区别。

标量规则的一般执行

在执行标量规则时,来自数据源的,需要被规则评估的数据,已经通过 ODBC 连接器,或者 InfoSphere Information Server 中可用的来源特定连接器做好准备。发送给源的查询是个简单的 SQL SELECT 查询,该查询用于检索在规则中扮演某一角色的所有列,仅对用于绑定或者规则输出的列进行检索。

然后 InfoSphere DataStage 并行任务对数据进行处理。依据所采用 InfoSphere DataStage 节点的数量,数据被分块为几个分区,并且每个不同节点中 InfoSphere DataStage 任务实例会并行处理数据的每个分块。

InfoSphere DataStage 任务通过使用高级逻辑来评估一行,该高级逻辑在评估其所需执行规则的阶段中,处理每个记录。这一阶段通过组合规则的数据表,以及关于哪些规则没有被每个记录评估的细节信息,来生成关于记录的信息。然后附加阶段搜集并汇总这些结果,并通过 ODBC 连接将其加载到分析数据库中。

图 1 展示了如何对来自所分析数据源的单个表中的列,执行标量规则。

图 1. 标量规则的执行
图中展示了标量规则的执行:源表连接到 Evaluate Rules,它已连接到连接 Analysis Database 的 Collect Results
图中展示了标量规则的执行:源表连接到 Evaluate Rules,它已连接到连接 Analysis Database 的 Collect Results

图 2 展示了规则绑定涉及来自不同表中的列时所发生的情况。只通过简单的 SQL SELECT 语句对每个数据源进行读取,并且在 InfoSphere DataStage 流程之内完成连接。不同表是属于相同物理数据源,还是属于不同源并无关系。

图 2. 对连接表执行标量规则
图中展示了对连接表执行标量规则的执行流程:Source Table 1 与 Source Table 2 连接到 Join,它连接到连接 Analysis Database 的 Evaluate Rules
图中展示了对连接表执行标量规则的执行流程:Source Table 1 与 Source Table 2 连接到 Join,它连接到连接 Analysis Database 的 Evaluate Rules

如果规则绑定涉及多于两个表时,在 InfoSphere DataStage 任务开始时,级联多个连接阶段。

甚至,如果连接结果仅包含少量记录,连接所涉及的所有表的所有记录也要通过 ODBC,或者特定连接器,加载到 InfoSphere DataStage。过滤仅在 InfoSphere DataStage 任务的附加阶段中执行。这样比较有利,因为在所分析源上执行的 SELECT 语句,比简单的 SELECT 语句要复杂很多,并且不会在源上产生高 CPU 负载。然而,它也有缺陷,因为在数据源与 InfoSphere DataStage 之间的 I/O 传输等于规则所涉及所有列的总和,即使连接操作仅涉及几个记录时也是如此,这将成为规则执行的瓶颈。

最佳实践:如果想要减少执行时间,那么不要在可能过滤掉大量所评估记录的规则中定义连接。相反,可使用具有 WHERE 子句的虚拟表,或者将连接作为数据源的视图进行定义,并在这一视图中执行规则。

抽样与过滤

与连接类似,如果在规则中定义了数据抽样,那么会在 InfoSphere DataStage 任务中执行。这意味着,在抽样前,需要将源的所有记录传递到 InfoSphere DataStage 中。这样,就可以利用抽样来很有效地减少规则所评估的记录的数量,并减少输出量。然而,这不会减少数据源与 InfoSphere DataStage 之间的 I/O 传输。如果您的目标是减少规则的执行时间,用于柱状规则的数据抽样比用于标量规则的数据抽样更高,因为通过快速执行标量规则,源与 InfoSphere DataStage 之间的 I/O 可能成为瓶颈,因此,执行时间不会明显降低。图 3 展示了如何在示例数据上执行标量规则。

图 3. 在示例数据上执行标量规则
图中展示了在示例数据上执行标量规则的执行流程:源表连接到 Sample,它连接到已连接 Analysis Database 的 Evaluate Rules
图中展示了在示例数据上执行标量规则的执行流程:源表连接到 Sample,它连接到已连接 Analysis Database 的 Evaluate Rules

图 4 展示了具有绑定的规则,它涉及来自多个表的列,这导致了在连接操作之后进行抽样。这确保了连接规则是正确的,但是抽样不会减少对连接资源必须的计算影响。

图 4. 在示例连接表上执行标量规则
图中展示了在示例连接表上执行标量规则的执行流程:Source table 1 与 Source table 2 连接到 Join,它连接到 Sample 的,它连接到已连接 Analysis Database 的 Evaluate Rules
图中展示了在示例连接表上执行标量规则的执行流程:Source table 1 与 Source table 2 连接到 Join,它连接到 Sample 的,它连接到已连接 Analysis Database 的 Evaluate Rules

您可通过定义具有过滤条件的虚拟表,来有效地减少从源所读取记录的数量,并减小规则的总执行时间。图 5 展示了如何将在虚拟表中定义的过滤条件,或者在用于数据源的分析设置中定义,推入用于加载数据的 SELECT 语句中,这样源数据本身就可过滤记录。从源加载,并且在 InfoSphere DataStage 任务中执行的记录的真实数量就减少了。

图 5. 在虚拟表上执行标量规则
图中展示了在虚拟表上执行标量规则的执行流程:源表连接到具有 SELECT ... WHERE ... Evaluate Rules 的 Evaluate,它连接到 Analysis Database
图中展示了在虚拟表上执行标量规则的执行流程:源表连接到具有 SELECT ... WHERE ... Evaluate Rules 的 Evaluate,它连接到 Analysis Database

不采用抽样方法,而是利用在虚拟表或者数据源分析设置中定义过滤条件,来减少规则的执行时间,这样做是非常有效的。特别是对于开发并测试需要快速验证器逻辑的规则而言,尤其如此。

可在 InfoSphere Information Analyzer 列分析面板中创建虚拟表。

规则集与简单规则

组成规则集的所有规则会在同一 InfoSphere DataStage 任务中评估,同一规则集中所有的标量规则会通过一个数据传递,来同时进行评估,因此将多个规则合并为规则集来执行,比对它们单独执行效率要高很多。当单独执行规则时,会为每个规则重复同一流程,与执行规则集相比,这样做效率很低,因为需要为每个规则重复进行源与 InfoSphere DataStage 之间的数据传输,并且,每个规则各自传输需要评估的数据。规则集可在同一操作中取得相同的结果,并且,如果规则集中多个规则采用了同一测试,该测试也仅评估一次。

图 6 展示了由 10 个规则所构成的规则集的执行时间比分别执行 10 个规则要快 74%。

图 6. 规则集的执行时间对比单个规则的顺序执行时间
图中展示了 10 个规则所构成规则集的执行时间与单独执行 10 个规则的执行时间的区别。规则集的执行时间比单独执行规则的时间减少 74%(1030 秒对比 3987 秒)。
图中展示了 10 个规则所构成规则集的执行时间与单独执行 10 个规则的执行时间的区别。规则集的执行时间比单独执行规则的时间减少 74%(1030 秒对比 3987 秒)。

最佳实践:如果在同一数据集上运行多个规则,那么以规则集的方式执行将最小化执行时间。除了优化执行时间外,还可得到单独执行规则所无法得到的附加统计及输出视图。

采用参考列的规则

当规则包含 in_reference_column 测试或者 lookup (value, refKey, refValue) 函数时,采用参考列。在这种情况下,参考列采用 ODBC,或者数据库特定连接器进行加载,并且所测试的数据左外部连接这一参考列,来确定测试或者函数的结果。图 7 展示了在 InfoSphere DataStage 中执行左外部连接,以及 in_reference_column 测试或者 lookup(value, refKey, refValue) 函数与所分析数据集和参考列之间的连接操作具有相同的成本。

图 7. 执行包含 in_reference_column 测试的规则
图中展示了包含 in_reference_column 测试的规则的执行流程:Source Table 与 Reference Table 连接到 Left Outer Join,它连接到已连接 Analysis Database 的 Evaluate Rules
图中展示了包含 in_reference_column 测试的规则的执行流程:Source Table 与 Reference Table 连接到 Left Outer Join,它连接到已连接 Analysis Database 的 Evaluate Rules

图 8 展示了如果规则使用了多个参考列,那么左外部连接就进行级联。如果不同的参考列属于同一表,那么参考表仅加载一次,并且会在 InfoSphere DataStage 任务中进行拷贝。

图 8. 执行包含两个 in_reference_column 测试的规则
图中展示了包含两个 in_reference_column 测试的规则的执行流程:Source Table 与 Reference Table 1 连接到 Left Outer Join,它与 Reference Table 2 连接到 Left Outer Join,Left Outer Join 连接到已连接 Analysis Database 的 Collect Results
图中展示了包含两个 in_reference_column 测试的规则的执行流程:Source Table 与 Reference Table 1 连接到 Left Outer Join,它与 Reference Table 2 连接到 Left Outer Join,Left Outer Join 连接到已连接 Analysis Database 的 Collect Results

利用带有 in_reference_column 测试的抽样,与利用带有普通连接操作的抽样不同,因为它是在与参考列左外部连接之前执行,如图 9 所示,这减少了使用参考列的规则的执行时间。

图 9. 在示例数据上执行包含 in_reference_column 测试的规则
图中展示了在示例数据上执行包含 in_reference_column 测试的规则的执行流程:Source Table 连接到 Sample,它与 Reference Table 连接到 Left Outer Join,Left Outer Join 连接到已连接 Analysis Database 的 Evaluate Rules
图中展示了在示例数据上执行包含 in_reference_column 测试的规则的执行流程:Source Table 连接到 Sample,它与 Reference Table 连接到 Left Outer Join,Left Outer Join 连接到已连接 Analysis Database 的 Evaluate Rules

包括计数函数或测试的规则

可利用如下函数及测试来计数一个列中值的数量:

  • count(value, groupBy)
  • occurs
  • occurs<
  • occurs<=
  • occurs>
  • occurs>=
  • unique

每次使用函数或者测试时,必须依照所计数列对数据集进行排序。图 10 展示了在评估规则本身之前,进行了排序与计数操作,因此,要执行这一规则,至少需要三次数据传递:一次传递来进行数据排序,一次传递进行计数,以及一次传递来评估规则。

图 10. 执行包含计数函数或者测试的规则
图中展示了包含计数函数或测试的规则的执行流程:Source table 连接到 Sort,它与已连接 Evaluate Rules 的 Count,Evaluate Rules 连接到已连接 Analysis Database 的 Collect Result
图中展示了包含计数函数或测试的规则的执行流程:Source table 连接到 Sort,它与已连接 Evaluate Rules 的 Count,Evaluate Rules 连接到已连接 Analysis Database 的 Collect Result

如果规则包含多个计数测试或者函数,并且,如果每个测试中所计数的列不同,那么排序与计数操作必须级联,如图 11 所示。注意,如果多个计数函数或测试在同一列上运行,那么排序与计数操作仅需做一次。任务的复杂性取决于所计数列的数量,而不是测试的原始数据。

图 11. 包含两个计数函数或测试的规则的执行
图中展示了包含两个计数函数或测试的规则的执行流程:Source table 连接到 Sort,它连接到已连接 Count 的 Sort,Sort 连接到已连接 Evaluate Rules 的 Count,Evaluate Rules 连接到已连接 Analysis Database 的 Collect Result
图中展示了包含两个计数函数或测试的规则的执行流程:Source table 连接到 Sort,它连接到已连接 Count 的 Sort,Sort 连接到已连接 Evaluate Rules 的 Count,Evaluate Rules 连接到已连接 Analysis Database 的 Collect Result

包含聚合的规则

可利用以下函数之一,来在一个规则中计算大量聚合:

  • avg(value, groupBy)
  • max(value, groupBy)
  • min(value, groupBy)
  • standardize(value, groupBy)
  • stddev(value, groupBy)
  • sum(value, groupBy)

可在整个列上计算聚合,或者由作为函数的第二个参数所给出的分组列指定的子组上计算聚合。

如图 12 所示,当不指定分组关键词,而在整个列上计算聚合时,集合在第一个数据传递中计算,并且规则的评估在第二个数据传递中完成。

图 12. 包含聚合函数的规则的执行
图中展示了包含聚合函数的规则的执行流程:Source table 连接到 Compute Statistics,Compute Statistics 连接到 Evalate Rules,Evalate Rules 连接到 Collect Results,Collect Results 连接到 Analysis Database
图中展示了包含聚合函数的规则的执行流程:Source table 连接到 Compute Statistics,Compute Statistics 连接到 Evalate Rules,Evalate Rules 连接到 Collect Results,Collect Results 连接到 Analysis Database

指定了分组关键词后,必须在完成聚合计算之前,依据这一关键词对数据进行分组,如图 13 所示。分组操作的 performance-wise 成本与依据分组列进行数据排序的成本类似。

图 13. 包含具有分组关键词的聚合函数的规则的执行
图中展示了具有分组关键词的聚合函数的规则的执行流程:Source table 连接到 Group By,Group By 连接到 Compute Statistics,Compute Statistics 连接到 Evalate Rules,Evalate Rules 连接到 Collect Results,Collect Results 连接到 Analysis Database
图中展示了具有分组关键词的聚合函数的规则的执行流程:Source table 连接到 Group By,Group By 连接到 Compute Statistics,Compute Statistics 连接到 Evalate Rules,Evalate Rules 连接到 Collect Results,Collect Results 连接到 Analysis Database

与计数函数类似,当在一个规则中使用多个具有分组关键字的聚合,对分组与计数操作必须进行级联,如图 14 所示。影响任务复杂性的相关要素是不同分组关键字的数量,而不是在计数函数中所看到的,不同的所聚合列的数量。如果利用相同的分组关键字或者没有分组关键字,来聚合多个列,那么,所有的聚合都在单个数据传递中的相同操作中进行。如果聚合具有不同的属性,这也成立。如果规则必须包含一个聚合,那么可以在同一规则中,对不同列计算附加聚合,只要分组关键字相同,就不会影响性能。

图 14. 执行包含两个具有不同分组关键字的聚合函数的规则
图中展示了包含两个具有不同分组关键字的聚合函数的规则的执行流程:Source table 连接到 Group By,Group By 连接到 Compute Statistics,Compute Statistics 连接到 Group By,Group By 连接到 Compute Statistics,Compute Statistics 连接到 Evalate Rules,Evalate Rules 连接到 Collect Results,Collect Results 连接到 Analysis Database
图中展示了包含两个具有不同分组关键字的聚合函数的规则的执行流程:Source table 连接到 Group By,Group By 连接到 Compute Statistics,Compute Statistics 连接到 Group By,Group By 连接到 Compute Statistics,Compute Statistics 连接到 Evalate Rules,Evalate Rules 连接到 Collect Results,Collect Results 连接到 Analysis Database

小结

作为规则集执行比单独执行规则效率更高。可非常高效地执行标量规则,并可在规则中增加附加标量测试或者函数,而不会显著影响规则的执行时间。但是,如果使用参考列,计数函数,或者具有分组关键字的聚合,则可通过在任务中增加附加连接与排序操作,来显著增加规则的执行时间。但是,如果使用具有相同分组关键字的多个聚合,或者对相同列进行计数的计数函数,其不会显著增加规则的执行时间。

要减少执行时间,除非规则是柱状的,否则,在可能的情况下采用虚拟表,并避免使用抽样。

数据规则可用的所有测试及函数的执行类型概述

以下表包含了可用于数据规则逻辑中的所有函数及测试的概述。还可查看这其中哪些是标量,哪些是柱状。

会在规则执行中影响性能的柱状测试及函数已通过加粗来突出显示。可通过表中第二列中的链接,来到达描述测试或函数执行类型细节信息的部分。

表 1. 可用在数据规则中的函数执行类型
函数名执行类型
abs(value)标量
ascii(char)标量
avg(value, groupBy)柱状:参见 包含聚合的规则
char(asciiCode)标量
coalesce(value, replacementValue)标量
convert(originalString, searchFor, replaceWith)标量
count(value, groupBy)柱状:参见 包括计数函数或测试的规则
date()标量
datediff(date1, date2)标量
datevalue(string, format)标量
day(date)标量
exp(value)标量
hours(time)标量
index(string, substring)标量
lcase(string)标量
left(string, n)标量
len(string)标量
lookup(value, refKey, refValue)柱状:参见 采用参考列的规则
lpad(string, n)标量
ltrim(string)标量
max(value, groupBy)柱状:参见 包含聚合的规则
min(value, groupBy)柱状:参见 包含聚合的规则
minutes(time)标量
month(date)标量
pad(string, begin, end)标量
right(string, n)标量
rpad(string, n)标量
rtrim(string)标量
seconds(time)标量
sqrt(value)标量
standardize(value, groupBy)柱状:参见 包含聚合的规则
stddev(value, groupBy)柱状:参见 包含聚合的规则
str(string, n)标量
substring(string, begin, length)标量
sum(value, groupBy)柱状:参见 包含聚合的规则
time()标量
timediff(time1, time2)标量
timestamp()标量
timestampvalue(string, format)标量
timevalue(string, format)标量
tostring(value, format)标量
trim(string)标量
ucase(string)标量
val(string)标量
weekday(date)标量
year(date)标量
表 2. 可用于数据规则中的测试的执行类型
测试名执行;类型
=标量
>标量
>=标量
<标量
<=标量
contains标量
exists标量
in_reference_column柱状:参见 采用参考列的规则
in_reference_list标量
is_date标量
is_numeric标量
matches_format标量
matches_regex标量
occurs柱状:参见 包括计数函数或测试的规则
occurs<柱状:参见 包括计数函数或测试的规则
occurs<=柱状:参见 包括计数函数或测试的规则
occurs>柱状:参见 包括计数函数或测试的规则
occurs>=柱状:参见 包括计数函数或测试的规则
unique柱状:参见 包括计数函数或测试的规则

内存使用

在执行一个规则时,在分配给 InfoSphere Information Analyzeran 的 InfoSphere DataStage 项目中生成 InfoSphere DataStage 并行任务。默认情况下,在所有逻辑节点上并行执行的任务,在 InfoSphere DataStage 的配置中声明。建议在 InfoSphere DataStage 安装时使用的逻辑节点数量,通常为 InfoSphere DataStage 服务器 CPU 数量的一半。

当并行执行 InfoSphere DataStage 任务时至少为每个构成任务的阶段,以及每个逻辑节点创建一个进程。当执行规则时,可在服务器的任务管理器中轻易发现所有名为 osh 的进程。所创建的流程的数量,要依据构成任务的阶段数量,以及逻辑节点的数量。其中每个进程所使用的内存数量,要与所处理记录的数量无关。与规则执行相关的,全部进程所使用的内存数量,可能会非常大。在规则执行过程中,您可能会注意到服务器的一个内存使用高峰,但是,当规则执行时会释放内存,并且进程 osh 会终止。

从前,看到所生成任务的复杂性,组成任务的阶段数量,在使用具有柱状测试或者函数的规则时会增长。使用多个计数函数的规则,会在其作为标量规则来执行的过程中使用更多内存,因为必须将附加的排序及计数阶段插入任务,来执行计数操作。如果在执行的高峰时,服务器内存的整体使用量,超过了 InfoSphere DataStage 服务器可用的内存数量,那么,机器将不得不进行一些硬盘上的内存交换,规则执行速度将明显降低。在这种情况下,只有少量记录需要评估的规则,很可能要执行 10 多分钟。这一问题的典型症状是机器的 CPU 使用率一直很低,而内存使用率却很高。

在这种情况下,可通过变更配置,来减少所运行的逻辑节点,从而降低内存的使用量。如果只用了一个逻辑节点,而内存使用量还是很高,那么还可以改变分配给 InfoSphere Information Analyzer 的 InfoSphere DataStage 项目的相关配置,这样每个任务仅能创建单个 osh 进程。然而,任务再无法并行运行,或使用多个 CPU,它会使用更少的内存,并会运行得更快,因为 InfoSphere DataStage 服务器不需要再进行内存交换。这对于安装在笔记本电脑或者具有少于 4 GB 内存的低规格系统中的测试与开发环境很有用。

通过启动 InfoSphere DataStage Administrator,打开 InfoSphere Information Analyzer 所使用的 InfoSphere DataStage 项目,并将 APT_EXECUTION_MODE 环境变量设置为 ONE_PROCESS,可强制任务在单个处理器中执行。

最佳实践:当执行规则时,如果 InfoSphere DataStage 的内存使用量与系统的物理限制接近,那么,可以减少逻辑节点的数量。如果使用低规格的系统,则可以改变 InfoSphere DataStage 项目设置,来在单个处理器上执行任务。

分析数据库中的硬盘使用量

每次运行数据规则时,都会测试规则定义,而且会在分析数据库中创建几个包含规则输出与规则统计信息的表。表的数量,以及这些表的内容,基于所执行的是单个规则还是规则集,以及规则定义的输出。可以在 关于在分析数据库中所创建表的细节信息 部分找到所创建表的细节信息,其中有用于分析数据库容量计划的重要信息。

如果多次运行同一个数据规则,每此运行都创建新表。因为前一次运行所创建的表不会自动删除,所以可以看到以前的输出,但是如果具有大输出量的规则多次运行,可能会导致分析数据库中硬盘使用量的大量增加。

可随时删除以前运行所创建的表。还可从运行历史记录中删除旧有的运行。打开规则的输出历史记录,选择想要删除的执行运行,并单击 Delete 。然后会出现如下两个选项:

  • Delete Selected Rows。可用这一选项将所选执行运行从规则历史记录中删除。这不仅会从分析数据库中删除与已删除运行相关的表,而且还会从元数据库中移除可用的元数据信息及统计信息。 可用这一选项来删除那些失败或其结果不需保留的旧有执行运行。所选运行就如同从未运行过一样被删除。
  • Delete Result Tables Only。可用这一选项来只删除分析数据库中与运行相关的表。这会在元数据库中保留运行的元数据与统计信息,并保持运行在规则历史记录中可见。一般统计,比如传递或者失败行的数量,仍然可用,但是输出表的记录,或者关于哪个记录违背了哪个规则的细节信息,则不再可见。当旧有运行的输出表细节信息不需保留,而需要保留规则的历史记录时,应当使用这一选项来节省分析数据库的空间。这一运行的结果与输出类型设置为 Statistics Only 的规则的结果相同。

当测试规则定义时,它会创建作为相同表的一般规则执行。区别在于规则的定义,每次测试过程中,将移除表并在分析数据库中创建表,但是没有简便的方法来删除一般规则执行的测试输出表。这意味着,如果测试运行产生了大量输出表,这些表不会被 InfoSphere Information Analyzer 删除,除非再次测试规则。

然而,可以通过对数据的少量示例进行测试,或者通过最小化输出表大小的输出定义,来释放规则定义测试运行所占用的空间,

还可打开 InfoSphere Information Analyzer 中的表管理工作区,来获取在数据规则及列分析过程中所创建表的概述。还可在该工作区中间删除表。

最佳实践: 为节省分析数据库的空间,应当从旧有运行中删除不需要的输出表。如果不再需要运行的元数据,也可将其删除。如果规则定义的测试运行产生了大量输出,应当使用包含少量数据的新表,然后在这一包含少量数据的表上再次测试规则定义,来替代上一次测试中所创建的大表。如果分析数据库为 DB2®,还可利用 DB2 的数据压缩特性来压缩输出表。

关于在分析数据库中所创建表的细节信息

在执行规则时,所创建的所有表都有由一个前缀和一个后缀所组成的名称。该前缀是字母与数字的长组合,每个特定规则执行的前缀是唯一的。后缀为以下内容之一,_DATADEVSCORES_SCOREDIST_VIOLATIONS_RULESPATTERNS、或者_RULESASSOCPATTERNS。下面部分展示了不同表的意义与内容。

DATA 表

该表包含规则所产生的输出记录。其中一列包含所生成的,唯一标识每个记录的关键字。其他列对应规则的输出定义。 该表中与规则变量对应的列,或者来自规则输出定义的物理列,具有与元数据中相应列相同的数据类型。如果输出定义包含返回字符串的输出表达式,它们会生成 VARGRAPHICS(255) for DB2 类型的列,或者基于数据库类型的等效列。

  • 如果对于简单规则的输出类型为 Do not meet rule condition 或者,对于规则集的输出类型为 Do not meet 1 or more rule condition, 那么,表包含没有验证一条规则的所有已评估记录。
  • 如果输出类型是 Meet all rules,那么,对于简单规则,该表包含已验证规则的所有已评估记录,对于规则集,则包含所有验证了全部规则的记录。
  • 如果输出类型为 All records,那么,表包含所有已评估记录,与规则的结果无关。
  • 如果根本没有生成表。

表 3 展示了当分析数据库为 DB2 时,该表的定义。不同数据库类型的数据类型可能不同。

表 3: XXX_DATA table for DB2 的定义
名称数据类型长度
IA_GENERATED_KEY__VARGRAPHIC32
FIELD1REAL4
FIELD2VARGRAPHIC12
.........

DEVSCORES 表

对于每个测试记录,此表包含如下内容:

  • 所生成的,唯一标识每个记录的关键字。这与 XXX_DATA.IA_GENERATED_KEY 中的关键字相同。
  • 未被每个记录验证的规则数量。对于简单规则来说,0 意味着规则没有被记录验证,而 1 意味着记录违背了规则。

此表中行数总是与所测试记录的数量相同,与规则的类型无关。如果输出类型为 Statistics only 或者 All records,那么,会在规则执行过程中创建并填充该表,这样就可在执行的最后来计算聚合,而且接下来还可立即移除该表。

表 4 展示了分析数据库为 DB2 时表的定义。不同数据库类型之间的数据类型可能不同。

表 4. XXX_DEVSCORES table for DB2 的定义
名称数据类型长度
RECORDIDVARGRAPHIC10
NBVIOLATEDRULESINTEGER4

SCOREDIST 表

此表包含展示未验证规则百分比的分布表的数据。该表总是包含 100 行,与输出类型无关。如果输出类型为 Statistics only,那么会创建表,但是会在执行的最后移除表。

表 5 展示了当分析数据库为 DB2 时,此表的定义。不同数据库类型之间的数据类型可能不同。

表 5. XXX_SCOREDIST table for DB2 的定义
名称数据类型长度
LOWERRANGEREAL4
HIGHERRANGEREAL4
FREQUENCYBIGINT8
PERCENTAGEREAL4

VIOLATIONS 表

此表包含每个已测试记录的未验证规则清单。对于简单规则,它包含所有未通过规则的行。对于规则集,它包含未验证规则集中一个或多个规则的记录,并为每个未验证规则创建一行。例如,通过所有规则的记录将不会向此表输出内容。违背规则集中三个规则的记录将在该表中产生三行。

该表中所生成的行的数量与输出类型无关。如果输出类型为 Statistics only,那么将会在规则执行过程中创建并填充表,但是,在规则终止后会立即删除该表。

关于容量计划,可通过查看经过最终过滤、抽样、及连接操作后,所剩下的已测试记录数量,并将其乘以记录所违背规则的平均数量,来估计表中的行数。

表 6 展示了当分析数据库为 DB2 时此表的定义。不同数据库类型之间的数据类型可能不同。

表 6. XXX_VIOLATIONS table for DB2 的定义
名称数据类型长度
RECORDIDVARGRAPHIC255
RULEIDVARGRAPHIC255
CONFIDENCEREAL4
SUPPORTREAL4
LIFTREAL4

RULESPATTERNS 表

仅在使用规则集时创建此表。它包含了经常被相同记录所违背的规则的组合。此表所产生的行数与规则集中规则的数量成正比,通常都很少。

表 7 展示了分析数据库为 DB2 时此表的定义。不同数据库类型之间的数据类型可能不同。

表 7. XXX_RULESPATTERNS table for DB2 的定义
名称数据类型长度
GROUPIDINTEGER4
RULE_RIDVARCHAR128
RULE_NAMEVARCHAR128
SUPPORTDOUBLE8

RULESASSOCPATTERNS 表

仅在使用规则集时创建此表。它包含了规则集中规则之间的相关信息。此表中所生成行的数量与规则集中规则的数量成正比,通常很少。

表 8 展示了当分析数据库为 DB2 时,该表的定义。不同数据库类型之间的数据类型不同。

表 8. XXX_RULESASSOCPATTERNS table for DB2 的定义
名称数据类型长度
ANTECEDENT_RULE_RIDVARCHAR128
ANTECEDENT_RULE_NAMEVARCHAR128
CONSEQUENT_RULE_RIDVARCHAR128
CONSEQUENT_RULE_NAMEVARCHAR128
CONFIDENCEDOUBLE8
SUPPORTDOUBLE8
LIFTDOUBLE8

结束语

在本文中,您已了解到不同测试及函数如何影响规则的执行时间,以及如何使用不同方法来优化执行时间。还了解了内存使用量是关键的资源,能够影响执行性能,如果内存使用量太高,可通过减少并行操作来提高性能。最后,看到了在分析数据库中每次执行成功所生成的数据类型,以及如何降低硬盘使用量。在本文中所学习的内容将帮助您优化数据质量规则,并有助于制定良好的容量计划。


相关主题


评论

添加或订阅评论,请先登录注册

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Information Management
ArticleID=607976
ArticleTitle=InfoSphere 最佳实践: 了解 IBM InfoSphere Information Analyzer 中数据质量规则的资源使用
publish-date=01132011