本申请要求2003年9月15日提交的No.60/502,908、2003年10月20递交的No.60/513,038以及2003年12月22日递交的No.60/532,956的美国临时申请的权益。上述引用的申请通过参考援引在此。
发明内容
一般而言,在一个方案中,本发明的特征是方法、对应的软件以及数据处理系统。将来自数据源的数据归档。此归档包括从数据源读取数据,在读取数据时计算用以描述数据特性的概述数据,以及存储基于概述数据的归档信息。然后,处理来自数据源的数据。此处理包括访问所存储的归档信息和根据访问的归档信息处理数据。
一般而言,在另一个方案中,本发明的特征是数据处理方法。将来自数据源的数据归档。此归档包括从数据源读取数据,在读取数据时计算用以描述数据特性的概述数据,以及存储基于概述数据的归档信息。数据归档包括以并行方式归档数据,这包括将数据分割成多个部分,并使用第一组并行组件中分开的一些组件处理这些部分。
本发明的方案可以包括一个或多个以下特征。
对来自数据源的数据的处理包括从数据源读取数据。
在进行数据归档时,不保留数据源外的数据的副本。例如,数据可包括具有可变记录结构(例如条件字段和可变数目的字段)的记录。在读取数据时对概述数据的计算包括在计算用以描述数据特性的概述数据时对可变记录结构记录作出解释。
数据源包括数据存储系统,例如数据库系统、或串行或并行文件系统。
对概述数据的计算包括对字段的一组相异值中的每个值的出现次数进行计数。归档信息可以包括基于对所述字段计算的出现次数得到的该字段的统计数字。
对包含与数据源相关的元数据的元数据存储器进行维护。对归档信息的存储可包括更新与数据源相关的元数据。对数据的归档和对数据的处理均可以利用数据源的元数据。
对来自数据源的数据的归档还包括基于归档信息确定格式规范。也可包括基于归档信息确定有效性规范。在数据处理期间,可以基于格式规范和/或有效性规范识别无效记录。
基于归档信息指定数据转换指令。然后,对数据的处理可以包括将转换指令应用于数据。
对数据的处理包括将数据输入到数据存储子系统。在将数据输入数据存储子系统之前,可以将数据进行验证。这种数据验证可以包括例如通过比较数据的统计属性将数据的特性与数据的基准特性相比较。
对数据的归档可以以并行方式进行。这可以包括将数据分割成多个部分,并使用第一组并行组件中分开的一些组件处理这些部分。对不同数据字段的概述数据的计算可以包括使用第二组并行组件中分开的一些组件。第一组并行组件的输出可以被重新分割,以形成第二组并行组件的输入。数据可以从并行数据源读取,该并行的数据源的每个部分由第一组并行组件中不同的一个并行组件处理。
一般而言,在另一个方案中,本发明的特征是方法、对应的软件以及数据处理系统。接受用以描述第一数据源的记录中第一字段的值的特性的信息和用以描述第二数据源的记录中第二字段的值的特性的信息。然后,基于所接受的信息,计算用以描述第一字段与第二字段之间的关系的特性的参量。呈现与第一字段和第二字段有关的信息。
本发明的方案可以包括一个或多个以下特征。
将与第一字段和第二字段有关的信息呈现给用户。
第一数据源和第二数据源可以是同一个数据源,或者是分开的数据源。所述数据源中的任一个或两个都可以是数据库表格或文件。
用以描述该关系的特性的参量包括描述第一字段的值与第二字段的值的汇合特性的参量。
用以描述第一字段的值(或类似的第二字段的值)的特性的信息包括描述该字段的值的分布特性的信息。此信息可以存储在数据结构,例如“调查”数据结构中。用以描述第一字段的值的分布特性的信息可以包括多个数据记录,每个数据记录与第一数据源的第一字段中不同的值以及该值的对应出现次数相关联。类似地,用以描述第二字段的值的分布特性的信息可以包括相同或类似格式的多个记录。
处理用以描述第一字段的值和第二字段的值的分布特性的信息,以计算与这些多个不同同现(cooccurrence)类别的值相关的参量。
与多种同现类别的值相关的参量包括多个数据记录,每个数据记录与多个同现类别之一相关联,并包括第一和第二字段在所述类别中的不同值的数量。
分别在第一字段和第二字段上,计算描述在第一数据源与第二数据源的“汇合”数据源中的值的分布特性的信息。此计算可以包括:计算与多种同现类别的值相关的参量。这些类别的范例包括:在第一字段和第二字段的一个中至少出现一次但在另一个字段中不出现的值,在第一字段和第二字段的每个中恰好出现一次的值,在第一字段和第二字段的一个中恰好出现一次、而在另一个字段中出现超过一次的值,以及在第一字段和第二字段的每个中出现超过一次的值。
对于不同的多对字段,例如来自第一数据源的一个字段和来自第二数据源的另一个字段,重复下述两个步骤,即接受用以描述值的特性的信息以及计算描述值的汇合特性的参量。然后,与多对字段中的一对或更多对字段有关的信息可以呈现给用户。
与多对字段中的一对或更多对字段相关的信息的呈现包括:识别侯选类型的字段关系。这种类型的字段关系的范例包括主键(primary key)关系、外键(foreign key)关系以及通用域(common domain)关系。
一般而言,在另一个方案中,本发明的特征是方法、对应的软件以及数据处理系统。对数据源的数据记录中字段的多个子集进行识别。确定多个子集中每个子集的同现统计数字。识别多个子集中的一个或多个子集,使得在所识别的子集的字段之间具有函数关系。
本发明的方案可以包括一个或多个以下特征。
字段的至少一个子集是两个字段的子集。
识别多个子集中的一个或多个子集、使得在所识别的子集的字段之间具有函数关系的处理包括:识别多个子集中的一个或多个子集,使其具有多个可能的预定函数关系之一。
对同现统计数字的确定包括:形成多个数据元素,每个数据元素识别一个数据记录中的一对字段并识别在该对字段中出现的一对值。
对同现统计数字的确定包括:将数据记录分割成多个部分,这些数据记录具有第一字段和第二字段;基于在第一部分中一个或多个记录的第二字段中出现的值的分布,确定参量,其中所述一个或多个记录具有在所述一个或更多个记录的第一字段中出现的公共值;以及将该参量与基于其它部分中的记录得到的其它参量进行合并,以产生总参量。
识别多个子集中的一个或多个子集、使得在所识别的子集的字段之间具有函数关系的处理包括:基于该总参量,识别在第一与第二字段之间的函数关系。
这些部分是基于第一字段的值和第二字段的值而得到。
使用一组并行组件中分开的一些组件处理这些部分。
识别多个子集中的一个或多个子集、使得在所识别的子集的字段之间具有函数关系的处理包括:确定与所述函数关系的匹配程度。
该匹配程度包括与所述函数关系不一致的异常记录的个数。
该函数关系包括将第一字段的至少一些值映射到第二字段的至少一些值。
该映射可以是例如多对一映射、一对多映射或一对一映射。
该方法还包括基于描述多个子集的字段中的值的特性的信息,对这多个子集进行过滤。
这些数据记录包括一个或多个数据库表格的记录。
本发明的方案可以包括一个或多个以下优点。
本发明的方案在各种情况中都可体现其优势。例如,在研发一个应用程序时,研发人员可以使用输入数据集来测试该应用程序。将使用该测试数据集运行的应用程序的输出与希望的测试结果相比较,或对其进行手动检验。然而,当使用实际的“生产数据(production data)”运行该应用程序时,结果通常太大而不能通过检验来验证。数据归档可以用于验证该应用程序的行为(behavior)。取代检验每个记录(其通过使用生产数据运行该应用程序而产生),可对输出的归档检验。该数据归档可以检测无效或不希望的值,以及将导致应用程序设计问题的输出中的不希望的图形或分布。
在另一情况下,数据归档可以用作生产过程的一部分。例如,作为常规生产运行数据的一部分的输入数据可以被归档。在完成数据归档后,处理模块可以装载归档结果,并验证该输入数据是否符合某些质量标准。如果输入数据看起来是不合格的,可以取消产品的运行并警告相关人员。
在另一情况下,通过有规律地数据归档,可以对大量收集数据(例如,在多个数据集中的数百个数据库表格)进行定期审核。例如,可以每晚对数据的子集进行数据归档。被归档的数据可以是循环的从而所有数据被归档,例如,一个季度一次,从而每个数据库表格在一年内将被归档四次。这在必要时可以提供对日后可以参考的所有数据的历史数据质量审核。
该数据归档可以自动进行。例如,该数据归档可以从脚本(script)(例如,SHELL脚本)进行,并与其它形式的处理相结合。该数据归档的结果可以例如以能在网络浏览器中显示的形式自动发布,而不必手动地后处理这些结果或运行单独的报告应用程序。
对描述数据源中记录的值的特性的信息进行操作,而不必直接对数据源中的记录本身进行操作,可以相当大地减少计算量。例如,使用调查数据而非原始数据记录,可以将计算两个字段的汇合特性的复杂性从一个大的量级减少到一个小的量级,即从两个数据源中数据记录数量的乘积的量级减少到两个数据源中独有值的数量的乘积的量级。
在进行数据归档时不保留数据源外数据的副本,可以避免与保留复制的副本相关联的误差可能性,并避免使用外部存储空间来存储数据副本。
可以根据数据值并行处理这些操作,由此实现有效分配的处理。
描述字段之间关系的特性的参量可以提供这样的指示,即,指明哪些字段可以用不同类型的关系相关联。然后,用户可以更严密地检查该数据,以确定这些字段是否确实形成那种类型的关系。
对数据源中数据记录的字段的多个子集中每个子集的同现统计数字进行确定,能够有效地识别在字段之间的潜在的函数关系。
本发明的各个方案在对用户不熟悉的数据集进行归档时是很有用的。可以自动确定或协同用户确定的信息可以用于转存(populate)数据源的元数据,之后用于进一步的处理。
本发明的其它特征和优点将从以下描述以及权利要求书中显而易见。
具体实施方式
1概述
参照图1,数据处理系统10包括:归档和处理子系统20,其用于处理来自数据源30的数据,更新数据存储子系统40中的元数据存储器112和数据存储器124。然后,所存储的元数据和数据对于使用接口子系统50的用户是可访问的。
一般而言,数据源30包括多种独立的数据源,每个数据源具有独有的存储格式和接口(例如,数据库表格、电子数据表(spreadsheet)文件、平面文本文件或主机110使用的固有格式)。各独立的数据源对于归档和处理子系统20可以是本地的,例如,位于相同的计算机系统(例如,文件102),或者对于归档和处理子系统20可以是远端的,例如,位于通过局域或广域数据网访问的远端计算机(例如,主机110)。
数据存储子系统40包括数据存储器124和元数据存储器112。元数据存储器112包括与数据源30中的数据相关的信息和关于数据存储器124中的数据的信息。这种信息可包括记录格式和确定这些记录中字段值的有效性的规范(有效性规范)。
元数据存储器112可以用于存储关于待归档的数据源30中的数据集的初始信息,以及在归档过程中获得的关于此数据集的信息,和从该数据集获取的数据存储器124中的数据集。数据存储器124可以用于存储已从数据源30读取的、使用从数据归档过程中获取的信息随意转换后的数据。
归档和处理子系统20包括归档模块100,其以离散工作元素例如单独记录为单位直接从数据源读取数据,而不必在归档之前装载(landing)数据的完整副本至存储介质。一般地,一个记录与一组数据字段相关联,并且对于每个记录,每个字段具有特定值(可能包括零值)。数据源中的记录可以具有固定的记录结构,即,每个记录包括相同的字段。可替换地,记录可以具有可变记录结构,例如,包括可变长度矢量或条件字段。在可变记录结构的情况下,处理记录,不必在归档前存储数据的“展平(flattened)”(即,固定的记录结构)副本即可处理记录。
首先,当从数据源读取数据时,归档模块100一般利用关于数据源中的记录的某些初始格式信息启动。(注意,在某些情况下,甚至不知道数据源的记录结构)。关于记录的初始信息可包括:表示相异值(例如,16位(=2字节))的位数;值(包括与记录字段相关联的值和与标志符或分隔符相关联的值)的顺序;以及由位表示的值的类型(例如,串、带符号/不带符号的整数)。此关于数据源的记录的信息在元数据存储器112所存储的数据操纵语言(DML)文件中说明。归档模块100可以使用预定义的DML文件,来自动说明来自各种通用数据系统格式(例如,SQL表格、XML文件、CSV文件)的数据,或使用从元数据存储器112获得的DML文件描述定制化的数据系统格式。
部分地,可能不精确地,在归档模块100初始读取数据之前,归档和处理子系统20可以得到关于数据源的记录的初始信息。例如,与数据源相关联的副本簿(copy book)可以作为存储的数据114得到,或者由用户118通过用户接口116输入得到。这种已有信息由元数据输入模块115处理并存储在元数据存储器112中和/或用于定义访问数据源时使用的DML文件。
当归档模块100从数据源读取记录时,其计算统计数字和反映数据集内容的其他描述性信息。然后,归档模块100将这些统计数字和描述性信息以“归档”的形式写入到元数据存储器112中,然后,通过用户接口116或其他任何可以访问元数据存储器112的模块来检查元数据存储器112。归档中的统计数字优选包括每个字段中的值的直方图、最大值、最小值及平均值,最小公共值和最大公共值的采样。
通过读取数据源所获得的统计数字可以用于各种用途。这些用途包括发现不熟悉数据集的内容、建立与数据集相关联的元数据的集合、在购买或使用之前检查第三方数据,以及对收集到的数据实施质量控制方案(scheme)。下面将详细描述使用数据处理系统10执行这些任务的过程。
元数据存储器112能够存储与每个被归档的字段相关联的有效性信息,例如将其作为对有效性信息编码的有效性规范。可替换地,有效性信息可以存储在外部存储位置并由归档模块100检索(retrieved)。在将数据集归档前,有效性信息可以指定每个字段的有效数据类型。例如,如果一个字段是一个人的“头衔”,默认有效值可以是“串”数据类型的任何值。用户在将数据源归档前还可以提供有效值例如“Mr.”、“Mrs.”和“Dr.”,从而归档模块100读取的任何其他值都将被识别为无效。用户还可使用从归档运行过程中获得的信息来指定特定字段的有效值。例如,在将数据集归档后,用户可能会发现作为公共值出现的“Ms.”和“Msr.”。用户可以将“Ms.”添加为有效值,并将值“Msr.”映射到“Mrs.”作为数据清除选项。因此,有效性信息可包括有效值和映射信息,从而允许通过将映射信息映射到有效值来清除有效值。当通过连续的归档运行过程发现更多关于数据源的信息时,可以以迭代方式对数据源归档。
归档模块100也可以产生可执行代码,以实施能够访问被归档的数据系统的其它模块。例如,处理模块120可包括归档模块100产生的代码。作为对数据源的访问过程的一部分,这种代码的一个范例可以将值“Msr.”映射到“Mrs.”。处理模块120可以在与归档模块100相同的运行时间环境中运行,且优选能与元数据存储器112通信,以访问与数据集相关联的归档。处理模块120可以读取与归档模块100相同的数据格式(例如,通过从元数据存储器112获得相同的DML文件)。处理模块120在将输入记录存储在数据存储器124之前,可以使用数据集归档获得验证或清理这些输入记录的值。
与归档模块100相似,处理模块120也以离散工作元素为单位直接从数据系统读取数据。工作元素的这种“数据流”有利于对较大数据集进行数据归档,而不必在本地存储器(例如,磁盘驱动器)上复制数据。将在下文详细描述的此数据流模型还允许处理模块进行复杂的数据转换,而不需先将源数据复制至集结区,这就潜在地节省了存储空间和时间。
2元数据存储器组织结构
归档模块100使用元数据存储器112组织和存储各种元数据,并将优选项和结果以数据对象的形式归档。参照图2,元数据存储器112可以存储一组归档建立对象201(均用于与归档工作相关的信息)、一组数据集对象207(均用于与数据集相关的信息)、以及一组DML文件211(均描述特定的数据格式)。归档建立对象包含归档模块100执行的归档运行过程的优选项。用户118可以输入用于建立新归档建立对象的信息或选择预存储的归档建立对象200。
归档建立对象200包含对数据集对象206的参考204。数据集建立对象206包含数据集定位器202,用于使归档模块100将待归档的数据定位在一个或多个在运行时间环境中可访问的数据系统上。数据集定位器202一般是路径/文件名、URL,或路径/文件名和/或URL的列表,用于在多个位置上的数据集散布(spread)。数据集对象206可以选择性地包含对一个或多个DML文件210的参考208。
一个或多个DML文件210可以基于关于数据集中的数据格式的知识被预选择,或可以由用户在运行时间指定。归档模块100能够获得数据集的初始部分,并基于默认的DML文件通过用户接口116向用户呈现对初始部分的解释。然后,用户可以基于解释的交互视图来修改默认的DML文件规范。如果数据集包括具有多种格式的数据,则需要参考一个以上的DML文件。
数据集对象206包含对一组字段对象214的参考212。在待归档的数据集的记录中,每个字段有一个字段对象。一旦由归档模块100执行的归档运行过程完成,数据集对象206中就包含对应于已归档数据集的数据集归档216。数据集归档216包含与数据集相关的统计数字,例如记录的总数和有效/无效记录的总数。
字段对象218可以选择性地包含有效性信息220,归档模块100可使用有效性信息220来确定对应字段的有效值,并指定用于清除无效值的规则(即,将无效值映射到有效值上)。字段对象218也包含归档模块100在完成归档运行过程时存储的字段归档222,字段归档222包含与对应字段相关的统计数字,例如相异值、零值以及有效/无效值的数量。字段归档222还可包括采样值,例如最大值、最小值、最大公共值和最小公共值。一个完整的“归档”包括数据集归档216和所有被归档字段的字段归档。
其他用于归档装置(profiler)运行的用户优选项可以被收集和存储在归档建立对象200或数据集对象206中。例如,用户可以选择过滤表达式(filter expression),该过滤表达式可用于限制字段或已归档的值的个数,包括对值的随机采样(例如,1%)归档。
3运行时间环境
归档模块100在允许数据从数据源读出并处理成离散工作元素流的运行时间环境中运行。归档模块100和处理模块120执行的计算通过有向(directed)图表以数据流的形式表达,同时这些计算式中的分量与图表的顶点(vertice)以及这些分量之间的数据流(其对应于图表的链路(弧、边缘))相关联。实施这种基于图表的计算的系统在U.S.专利5,966,072,“运行表达成图表的计算”中有描述。按照此系统制成的图表提供了这样这些方法,即,获取进/出由图表分量表示的各进程的信息,在这些进程之间移动信息,以及定义这些进程的运行次序。此系统包括选择进程间通信方法(例如,与图表链路一致的通信路径可以使用TCP/IP或UNIX字段套接字,或使用共享存储器来在这些进程之间传递数据)的算法。
运行时间环境也允许归档模块100作为并行进程来运行。与上述相同类型的图表表示(representation)可以用于描述并行处理系统。作为讨论,并行处理系统包括使用多个中央处理单元(CPU)的任意结构的计算机系统,或者本地的(即,多处理器系统例如SMP计算机),或本地分布式(例如,连接成群集的多处理器或MPP),或远程的,或远程分布式(例如,经LAN或WAN网连接的多处理器),或它们的任意组合。再者,这些图表将由分量(图表顶点)和流(图表链路)组成。通过明确或暗含地复制图表的元素(分量和流),可以表现系统中的并行度。
使用用于输入分量的链路输入队列来实施流控机制。此流控机制允许数据在图表的分量之间流动,而不会被写入非易失性本地存储器例如通常较大但速率较慢的磁盘驱动器中。输入队列可以足够小,以能够将工作元素保存在一般来讲比非易失性存储器小和快速的易失性存储器中。即使对于非常大的数据集,这也能潜在地节省存储空间和时间。这些分量可以使用输出缓冲器来代替输入队列,或在使用输入队列之外还使用输出缓冲器。
当两个分量通过流连接时,只要下游分量持续使用工作元素,上游分量就发送工作元素至下游分量。如果下游分量滞后(falls behind),上游分量将填补(fill up)下游分量的输入队列,并停止工作,直到输入队列再次清除为止。
可以使用不同程度的提取方式(abstraction)来指定计算图表。因此,可以在另一个图表中将包含分量和链路的“子图表”表示为单个分量,该单个分量仅显示那些连接至图表剩余部分的链路。
4图表归档
参照图3,在一个优选实施例中,图表归档装置400进行用于归档模块100的计算。输入数据集组件402表示来自潜在的几种类型的数据系统的数据。这些数据系统可以具有不同的物理介质类型(例如,磁、光、磁光)和/或不同的数据格式类型(例如,二进制、数据库、电子数据表、ASCII串、CSV或XML)。输入数据集组件402发送数据流到调查进行组件406中。调查进行组件406进行数据集的“调查”,在流入该调查进行组件的记录中为每个独有的字段/值对创建单独的调查记录。每个调查记录包括用于该调查记录的独有字段/值对(pair)的出现次数的计数。
调查进行组件406具有清除选项,该清除选项可以根据存储在对应字段对象的有效性信息将一组无效值映射到有效值上。该清除选项也可以将记录(具有包含无效值的字段)存储在由无效记录组件408表示的位置上。然后,例如想要确定无效值的源的用户可以检查这些无效记录。
在所示出的实施例中,从调查进行组件406流出的调查记录被存储在由调查文件组件410表示的文件中。在某些情况下,对调查记录进行中间存储可以增加多个图表分量访问调查记录的效率。可替换地,调查记录可以从调查进行组件406直接流到调查分析组件412,而不存储在一个文件中。
调查分析组件412创建每个字段的值的直方图,并基于调查记录对数据集进行其他分析。在所示出的实施例中,字段归档组件414表示字段归档的中间存储位置。元数据装载库组件416将字段归档和其他归档结果装载到元数据存储器112中的对应对象中。
用户接口116允许用户使用分析后的数据浏览,例如,查看字段中的直方图或公共值。提供“往下深钻(drill-down)”能力,例如,查看与直方图中的条(bar)相关联的特定记录。用户还可以基于归档结果通过用户接口116更新优选项。
采样组件418存储采样记录420的集合,采样记录420表示与用户接口116上显示的值相关联(例如,与直方图中的条相关联)的记录的采样。阶段(phase)虚线422表示图表400中执行的两个阶段,即,在左侧线的所有组件运行完成后,右侧线的组件开始运行。因此,在调查分析组件412完成将结果存储在字段归档组件414之后,采样组件418运行。可替换地,可以从输入数据集402中所记录的位置检索(retrieved)采样记录。
归档模块100可以由用户118或自动调度程序初始化。一旦初始化归档模块100,主脚本(master script)(未示出)从元数据存储器112收集归档图表400将使用的任何DML文件和参数。参数可以从对象例如归档建立对象200、数据集对象206以及字段对象218获得。如果必要,主脚本可以基于所提供的、关于待归档的数据集的信息来创建新的DML文件。为方便起见,主脚本可以将参数编译成工作文件。然后,主脚本可以使用来自工作文件的适当参数运行归档图表400,并在归档图表400运行完成前呈现出进程显示,来跟踪已经经过的时间和估计剩余时间。在归档图表400运行时,基于写入元数据存储器112的数据(例如,工作元素)来计算所估计的剩余时间。
4.1数据格式解释
利用一个输入组件来实施归档模块100中能解释广泛类型的数据系统的数据格式部分。该输入组件配置为直接解释一些数据格式,而不使用DML文件。例如,输入组件可以从使用结构化查询语言(SQL)(一种访问和操纵数据库的ANSI标准计算机语言)的数据系统读取数据。不使用DML文件处理的其它数据格式例如是根据XML标准或使用逗号分隔值(CSV)格式化的文本文件。
对于其它数据格式,输入组件使用归档建立对象200中指定的DML文件。DML文件可以指定解释和操纵数据集中的数据的各个方面。例如,DML文件可以指定数据集的以下方面:
类型对象-定义原始数据与原始数据所表示的值之间的对应关系。
键指定符(key specifier)-定义在记录之间的排序、分割和分组关系。
表达式-定义使用来自常数、数据记录字段或其它表达式结果的值进行的计算,以产生新的值。
转换函数-定义用于从0到多个输入记录产生一个或更多个输出记录的规则和其它逻辑的集合。
包(packet)-提供将类型对象、转换函数以及可以由组件使用而完成各种任务的变量进行分组的便利方式。
类型对象是基本机构(mechanism),用于从数据系统中的原始数据读取各工作元素(例如,各记录)。运行时间环境允许以原始数据位的串(例如,安装在文件系统中或在网络连接上流动)访问物理计算机可读存储介质(例如,磁、光或磁光介质)。输入组件可以访问DML文件以确定如何读取和解释原始数据,以产生工作元素流。
参照图4,类型对象502例如可以是基本类型504或复合类型506。基本类型对象504指定如何将位的串(给定长度的串)解释成单个值。基本类型对象504包括长度说明,其指出待读取和分析的原始数据位的个数。长度说明可以指示固定长度例如指定个数的字节、或可变长度(在数据末端指定分隔符(例如,特定字符或串)、或待读取的字符的个数(潜在可变的长度)。
空类型(void type)514表示其含义或内部结构不必解释的数据块(例如,压缩数据,其不被解释,直到解压之后)。空类型514的长度用字节指定。数字类型516表示一个数字,并且如果该数字根据标准的或特定CPU固有的各种编码被指定为整数524、实数526,或小数528,则会对其作出不同的解释。串类型518用于使用指定的字符集解释文本。日期类型520和日期时间类型522用于使用指定的字符集和其它格式化信息解释日历日期和/或时间。
复合类型506是由多个子对象构成的对象,这些子对象本身可以是基本类型或复合类型。矢量类型508是包含相同类型(基本或复合类型)的对象序列的对象。在矢量中的子对象的个数(即,矢量长度)可以由DML文件中的常数或由允许用可变长度来归档矢量的规则(例如,指明矢量末端的分隔符)指明。记录类型510是包含对象序列(其中每个对象可以是不同的基本类型或复合类型)的对象。该序列中的每个对象对应于与被命名的字段相关联的值。使用记录类型510,组件可以解释原始数据块,以提取一个记录的所有字段的值。联合(union)类型512是与记录类型510相似的对象,不同之处在于对应于不同字段的对象可以将相同的原始数据位解释成不同值。联合类型512提供了对相同原始数据进行多种解释的方式。
DML文件还允许使用定制数据类型进行数据归档。用户通过提供类型定义,可以用其它DML类型对象(基本或复合类型)定义一个定制类型对象。然后,归档模块100可以使用定制类型对象来解释不具有标准结构的数据。
DML文件也允许使用条件结构进行数据归档。记录可以基于与其它字段相关联的值而仅包括一些字段。例如,如果字段“婚否”的值是“是”,记录可以仅包括字段“配偶”。DML文件包括用于为给定记录确定是否存在条件字段的规则。如果记录中确实存在条件字段,可以用DML类型对象来解释字段的值。
图表可以使用输入组件有效地处理各种类型的记录结构。输入组件使用可变记录结构例如条件记录或可变长度矢量来解释记录的能力,使得图表不必先将这种数据展平成固定长度的区段就能处理这种数据。图表使用输入组件可以进行的另一类型的处理是发现数据的各部分之间的关系(例如,不同的记录、表格或文件中的数据)。图表可以使用输入组件内的规则来寻找在一个表格中的外键或字段与另一个表格中的主键或字段之间的关系,或对数据的各部分进行函数依赖性计算。
4.2统计数字
参照图5A,实施调查进行组件406的一个实施例的子图表600包括过滤组件602,其可以基于归档建立对象200a中存储的过滤表达式使一部分输入记录通过。过滤表达式可以限制被归档的字段或值的个数。过滤表达式的一个范例是将归档限制到每个输入记录的单个字段(例如,“标题”)。过滤组件602的另一个可选的功能是运行上述的清除选项,发送无效记录的采样值到无效记录组件408。从过滤组件602流出的记录流入局部上滚序列统计数字组件604和循环分割组件612。
在子图表600中,归档图表400(以及其它图表和子图表)在多个处理器和/或计算机上并行运行的能力,以及归档图表400读取多个位置上存储的并行数据集的能力,通过组件的线厚度和组件之间的链路上的符号不明显地表示。表示存储位置的组件例如输入数据集组件402的厚边线表明其可选的为并行数据集。处理组件例如过滤组件602的厚边线表明:以多个分区可选地运行进程,每个分区在不同的处理器或计算机上运行。用户可以通过用户接口116表明是否以并行或串行方式可选地运行并行图表组件。细边线表明数据集或程序是串行的。
局部上滚序列统计数字组件604计算与输入记录的顺序特性相关的统计数字。例如,组件604可以对顺序的记录对(其字段值增加、减少或递增1)的个数进行计数。在并行运行的情况下,为每个分区分别计算序列统计数字。上滚程序涉及从多个输入元素(组件604执行的用于上滚程序的序列统计数字)合并信息,产生单个输出元素来代替合并的输入元素。集合链接符号606表示将来自并行组件的任意多个分区的数据流合并或“集合”到串行组件的单个数据流中。整体上滚序列统计数字将来自多个分区的“局部”序列统计数字合并到单个的“整体”序列统计数字集合(其表示来自所有分区的记录)。所得到的序列统计数字可以存储在临时文件610中。
图6为用于执行上滚程序的程序700的范例的流程图,包括局部上滚序列统计数字组件604和整体上滚序列统计数字组件608执行的上滚程序。程序700通过接收输入元素(步骤702)开始。然后,程序700在步骤704更新正在编译的信息,在步骤706确定是否还有元素需要编译。如果还有要编辑的元素,程序700在步骤702接收下一个元素,继而在步骤704更新信息。如果没有要更新的元素,程序700在步骤708基于已编译的上滚信息结束输出元素。上滚程序可以用于将一组元素合并成单个元素,或确定一组元素的集聚(aggregate)属性(例如,这些元素中的值的统计数字)。
循环分割组件612从输入数据集402的单个或多个分区中提取记录,并在多个并行处理器和/或计算机(例如,用户选择的)之间重新分割记录,以在这些处理器和/或计算机之间平衡工作负荷。交叉连接链路符号614表示数据流的重新分割(由链接的组件612执行)。
标准化组件616提取记录流,并送出包含字段/值对(其表示输入记录中每个字段的值)的调查元素流。(具有10个字段的输入记录产生10个调查元素的流)。每个值被转换成规范的(即,根据预定的格式)、由人员可读取的串表达方式。调查元素中还包括标志(flag),其指出值是否有效以及值是否为0(即,对应于预定的“0”值)。这些调查元素流入局部上滚字段/值组件,后者(为每个分区)提取相同字段相同值的出现率,并将其合并到一个调查元素(包括对出现次数的计数)中。规范化组件616的另一个输出是对字段和值的总数的计数,对于所有分区,这些字段和值都被集合并合并到上滚总计数组件618中。这些总计数存储在临时文件620中,用于装载到数据集归档216中。
图7为标准化组件执行的程序710的范例的流程图,可以处理可能并不都具有相同字段的条件记录,以产生包含字段/值对的调查元素流。程序710执行嵌套循环,该嵌套循环始于在步骤712得到新记录。对于每个记录,程序710在步骤714得到那个记录中的字段,在步骤716确定那个字段是否是条件字段。如果该字段是有条件的,程序710在步骤718确定那个记录的那个字段是否存在。如果该字段确实存在,则程序710在步骤720规范化那个字段的记录的值,并产生对应的包含字段/值对的输出元素。如果该字段不存在,则程序710在步骤722继续确定是否有另一个字段或在步骤724确定是否有另一个记录。如果该字段不是有条件的,则程序710在步骤720规范化那个字段的记录的值(包括可能的0值)并继续到下一个字段或记录。
字段/值分割组件624通过字段和值重新分割这些调查元素,从而在整体上滚字段/值组件626中执行的上滚程序能够添加在不同分割中计算的出现率,以便为包含在已归档记录内的每个独有字段/值对产生单个调查元素中的总出现计数。整体上滚字段/值组件626在由调查文件组件410表示的潜在并行文件的潜在多个分区中,处理这些调查元素。
图5B为实施归档图表400的调查分析组件412的子图表630的示意图。字段分割组件632从调查文件组件410读取调查元素流,并基于字段根据散列值(hash value)重新分割这些调查元素,从而使具有相同字段(但具有不同的值)的调查记录位于同一分区中。串、数字、日期分割组件634还根据调查元素中的值的类型分割这些调查元素。对于作为串(在上滚串组件636中)、作为数字(在上滚数字组件638中)或作为日期/日期时间(在上滚日期组件640中)的值,(使用上滚进程)计算不同的统计数字。例如,计算平均值和标准偏差对于数字而言是适当的,但不适用于串。
从所有分区收集这些结果,并且直方图/十分位数信息计算组件642将用于构建直方图的信息(例如,每个字段的最大和最小值)提供给渲染区域(bucket)计算组件654,并将用于计算十分位数统计数字(例如,每个字段的值的个数)的信息提供给十分位数计算组件652。在直方图/十分位数信息计算组件642(在阶段虚线644上方)完成运行后,子图表630的产生直方图和十分位数统计数字(在阶段虚线644下方)的组件运行。
子图表630通过以下步骤构建十分位数边界的值(例如,大于值的10%、20%的值等等)的列表:在每个分区(在归类组件646中)内通过值对这些调查元素进行归类;根据所归类的值(在值分割组件648中)重新分割这些调查元素;并将这些调查元素合并成已归类(串行)流,并流入十分位数计算组件652。十分位数计算组件652在每个字段中的值的总数的十分之一的组中,计数该字段的已归类值,以寻找在十分位数边界的值。
子图表630通过以下步骤构建每个字段的直方图:计算定义每个值的括弧(或“渲染区域”)的值;对落入相同渲染区域的每个分区的值进行计数(在局部上滚直方图组件656中);对来自所有分区的每个渲染区域内的值进行计数(在整体上滚直方图组件658中)。然后,合并字段归档部分组件660从临时文件610将用于每个字段归档的所有信息,包括直方图、十分位数统计数字以及序列统计数字,收集到字段归档组件414中。图5C为实施归档图表400的采样组件418的子图表662的示意图。与子图表600一样,循环分割组件664从输入数据集402的单个或多个分区提取记录,并在多个并行处理器和/或计算机之间重新分割记录,以在这些处理器和/或计算机之间平衡工作负荷。
查找和选择组件666使用来自字段归档组件414的信息,确定记录是否对应于用户接口116上显示的值,该值可以由用户选择用于“往下深钻”的查看。用户接口116中显示的每种类型的值对应于不同的“采样类型”。如果记录中的值对应于采样类型,查找和选择组件666计算随机选择数,该随机选择数确定该记录是否被选择用于表示采样类型。
例如,对于特定采样类型的总共五个采样记录,如果选择数是能够看到的五个最大数之一(其为单个分区内的特定采样类型),那么传递对应的记录以及指明什么值可以对应于“往下深钻”的浏览的信息作为输出。采用这种方案,任何采样类型的第一组五个记录与具有所能看到的五个最大选择数之一的任何其他记录一样,可以自动地传递到下一个组件。
下一个组件是采样类型分割组件668,其根据采样类型重新分割记录,从而归类组件670可以使用每个采样类型内的选择数进行类别。然后,搜寻)组件672为每个采样类型选择具有最大选择数(在所有分区之间)的五个记录。然后,记录/链接采样组件674将这些采样记录写入到采样记录文件420,并将这些记录链接到字段归档组件414中的对应值。
元数据装载库组件416将数据集归档从临时文件组件620装载到元数据存储器112中的数据集归档216对象中,并将每个字段归档从字段归档组件414装载到元数据存储器112中的字段归档222对象中。然后,用户接口116可以检索数据集的归档结果,并在用户接口116产生的屏幕上显示给用户118。用户可以浏览归档结果,以观看字段的直方图或公共值。例如,可以提供“往下深钻”的能力,以观看与直方图中的条相关联的特定记录。
图8A-C例示了显示归档结果的用户界面屏幕输出。图8A示出来自数据集归档216的结果。数据集的各种总数802作为整体示出,还示出了与已归档字段相关联的属性的概述804。图8B-C示出来自示范性的字段归档222的结果。以各种形式显示对例如最大公共值806以及最大公共无效值808的值的选择,这些形式包括:其自身作为人员可读的串的值810、值的出现率的总计812、作为值的总数的百分比的出现率814以及条形统计图表816。所显示的值的直方图818示出跨越值的范围的多个渲染区域中每个渲染区域的条目,包括计数为0的渲染区域。还显示了十分位数边界820。
5范例
5.1数据发现
图9为程序900的范例的流程图,用于将数据集归档,以便在将其用于另一个程序之前发现其内容。程序900可以自动(例如,由调度脚本)或手动(例如,由用户在终端)进行。首先,程序900在902在在运行时间环境中可访问的一个或多个数据系统上识别待归档的数据集。然后,程序900可以基于所提供的信息或已有的元数据,选择性地在步骤904设置记录格式并在步骤906设置有效性规则906。对于某些类型的数据,例如数据库表格,可以使用默认记录格式和有效性规则。然后,程序900在步骤908对数据集(或数据集的子集)运行归档。程序900可以基于初始归档的结果在步骤910精简记录格式,或在步骤912精简有效性规则。如果任一归档选项发生改变,那么程序900在步骤914判定是否使用新的选项对该数据集运行另一归档,或者如果已经从(可能重复的)归档过程中获得关于该数据集的足够信息,则在步骤916处理该数据集。该过程将使用从归档过程中获得的信息直接从一个或更多个数据系统读取。
5.2质量测试
图10为程序1000的范例的流程图,用于将数据集归档,以在将其转换并装载到数据存储器中之前测试其质量。进程1000可以自动或手动进行。测试数据集的质量的规则可以来自数据集的先前知识,和/或来自归档程序例如对相似的数据集(例如,作为待测试数据集的来自相同源的数据集)进行的程需900的结果。此程序1000例如可以为商业上使用,用以在输入或处理数据之前,将从商业伙伴发送的定期的(例如每月)数据输入进行归档。这将允许商业上检测到“坏”数据(例如,无效值的比例高于阈值的数据),因此不会因难以取消的动作“污染”了已有的数据存储器。
首先,程序1000在步骤1002在运行时间环境中可访问的一个或多个数据系统上识别待测试的数据集。然后,程序1000在步骤1004对数据集(或数据集的子集)运行归档,并在步骤1006基于归档结果进行质量测试。例如,可以将该数据集的特定公共值的出现比例与先前数据集(基于先前的归档运行)的该公共值的出现比例相比较,如果二者的比例相差超过10%,则质量测试失败。此质量测试可以应用于一系列数据集中众所周知的一直出现的值(在10%内)。程序1000在步骤1008确定质量测试的结果,如果失败则在步骤1010产生标志(例如,用户界面提示或登录到日志文件)。如果质量测试通过,则程序1000直接从一个或多个数据系统读取数据,并在步骤1012变换(可能使用来自归档的信息)并将其从数据集装载到数据存储器中。然后,例如通过在步骤1002识别另一个数据集重复该程序。
5.3代码产生
归档模块100可以产生可执行代码,例如可以用于处理来自数据集的记录流的图表组件。所产生的组件可以对输入(incoming)记录进行过滤,只允许有效记录流出,这类似于归档图表400的清除选项。例如,用户可以选择归档选项,该归档选项指明一旦完成归档运行就应产生清除组件。用于实施该组件的代码指向文件位置(由用户指定)。然后,所产生的清除组件可以在与归档模块100(其在归档运行期间使用存储在元数据存储器112的信息)相同的运行时间环境中运行。
6汇合-字段分析
归档模块100可以选择性地对一组或多组字段内的关系进行分析。例如,归档模块100能够在一对字段的两个字段之间进行分析,这一对字段可以在相同或不同的数据集中。类似地,归档模块能够对多个字段对进行分析,例如分析一个数据集中的每个字段与一个数据集中的每个字段,或分析一个数据集中的每个字段与同一数据集中的每个其它字段。在不同数据集中的两个字段的分析与这两个数据集在这些字段上的汇合操作的特性有关,这一点将在下面详细描述。
在汇合-字段分析的第一种方式中,对两个数据集(例如,文件或表格)进行汇合操作。在另一方式(将在下面的6.1节中描述)中,在调查进行组件406产生数据集的调查文件后,该调查文件中的信息可以用于在两个不同的已归档数据集中的字段之间,或在相同的已归档数据集(或任何其它存在调查文件的数据集)的两个不同部分中的字段之间进行汇合-字段分析。汇合-字段分析的结果包括关于这些字段之间的潜在关系的信息。
发现三种类型的关系:“通用域”关系,“汇合井(joint well)”关系以及“外键”关系。如果汇合-字段分析的结果符合如下文所述的某种标准,一对字段则被分类为具有这三种类型的关系之一。
汇合-字段分析包括编译信息,该信息例如是使用这两个字段作为键字段进行的汇合操作所产生的记录个数。图11A-B为对来自两个数据库表格的记录进行的汇合操作的两个范例。表格A和表格B均具有标注为“字段1”和“字段2”的两个字段和四个记录。
参照图11A,汇合组件1100将来自表格A的记录的键字段的值与来自表格B的记录的键字段的值相比较。对于表格A,键字段是字段1;对于表格B,键字段是字段2。因此,汇合组件1100将来自表格A、字段1(A1)的值1102与来自表格B、字段1(B1)的值1104相比较。汇合组件1100从这些表格接收输入记录流1110,并基于键-字段值的比较结果产生用以形成的新的汇合表格,即表格C的汇合记录流1112。汇合组件1100为这些输入流的每对匹配的键-字段值,产生一个汇合记录,该汇合记录是具有匹配的键-字段值的记录的串联。
在汇合输出端口1114输出的具有特定键-字段值的汇合记录的个数是记录个数分别与每个输入的键-字段值的笛卡尔乘积(Cartesianproduct)。在所示出的范例中,所示出的输入记录流1110由它们各自的键字段的值标注,并且所示出的汇合记录的输出流1112由匹配值标注。由于在两个输入流中均出现两个“X”值,在输出流就有四个“X”值。对于表格A和表格B的输入流,在一个输入流中具有与在其它输入流中的任何记录都不匹配的键-字段值的记录,分别在“拒绝”输出端口1116A和1116B输出。在所示出的范例中,“W”值出现在“拒绝”输出端口1116A。
归档模块100编译汇合和拒绝的值的统计数字,用于对两个字段之间的关系进行分类。这些统计数字被概述在分布表1118中,该分布表1118对这两个字段中的值的分布进行分类。“出现次数”表示在字段中值出现的次数。该表中的栏对应于第一字段(在此范例中来自表格A)的出现次数0、1以及N(其中N>1),该表中的行对应于第二字段(在此范例中来自表格B)的出现次数0、1以及N(其中N>1)。该表中的框包含与对应的分布图形相关联的计数:“栏出现数”ד行出现数”。每个框包含两个计数:具有该分布图形的相异值的个数,这些值的各汇合记录的总数。在一些情况下,这些值在两个字段都出现(即,具有分布图形:1×1、1×N、N×1或N×N),在另一些情况下,这些值仅在一个字段中出现(即,具有分布图形:1×0、0×1、N×0或0×N)。 这些计数用逗号分开。
分布表1118包含对应于汇合记录1112和在端口1116A上的拒绝记录的计数。在“拒绝”输出端口1116A上的值“W”对应于分布图形1×0的框中的计数“1,1”,分别表示单个值和单个记录。由于值“X”在每个输入流出现两次,对于总的四个汇合记录,值“X”对应于分布图形N×N的框中的计数“1,4”。由于值“Y”在第一输入流出现一次而在第二输入流出现两次,对于总的两个汇合记录,值“Y”对应于分布图形1×N的框中的计数“1,2”。
图11B为与图11A的范例类似的范例,但是具有不同的键字段对。对于表格A,键字段是字段1;对于表格B,键字段是字段2。因此,汇合组件将来自表格A、字段1(A1)的值1102与来自表格B、字段2(B2)的值1120相比较。此范例具有分布表1122,该分布表1122的计数对应于这些字段的输入记录流1124。与图11A中的范例类似,存在单个拒绝值“Z”,其对应于分布图形0×1的框中的计数“1,1”。然而,在此范例中,存在两个值“W”和“Y”,由于有两个值和两个汇合记录,它们都具有分布图形1×1,对应于分布图形1×1的框中的计数“2,2”。值“X”对应于分布图形N×1的框中的计数“1,2”,指明单个值和2个汇合记录。
从分布表的这些数字可以进行各种合计。其中某些合计包括:在表格A和表格B中都出现的相异键-字段值的总数,在表格A中出现的相异键-字段值的总数,在表格B中出现的相异键-字段值的总数,以及在每个表格中的独有值(即,在键字段值的单个记录中仅出现一次的值)总数。基于这些合计的某些统计数字用于确定一对字段是否具有前述三种类型的关系之一。这些统计数字包括:字段中具有相异或独有值的总记录的比例、具有特定分布图形的总记录的比例,以及每个字段的“相对值重叠”。相对值重叠是在一个字段出现、也在其它字段出现的相异值的比例。确定一对字段是否具有三种类型的关系(这些关系不一定是互斥的)之一的标准如下:
外键关系-这些字段的第一个字段具有较高的相对值重叠(例如,>99%),且第二个字段具有较高比例(例如,>99%)的唯一值。第二个字段是潜在的主键,且第二字段是潜在的主键的外键。
汇合井关系-这些字段中至少一个字段的拒绝记录具有较小的比例(例如,<10%),且具有分布图形N×N的各汇合记录的比例较小(例如,<1%)
通用域关系-这些字段中至少一个字段具有较高的相对值重叠(例如,>95%)
如果一对字段具有外键以及汇合井或通用域关系,则报告外键关系。如果一对字段具有汇合井与通用域关系,但不具有外键关系,则报告汇合井关系。
6.1调查汇合
参照图1 2A,在实际对这些表格执行汇合操作的一个替换方案中,调查汇合组件1200分析来自表格A和表格B的字段,并通过对这些表格的调查数据执行“调查汇合”操作,来编译分布表的统计数字。每个调查记录具有字段/值对以及该值在该字段中的出现计数。由于对于给定的键字段,每个调查记录具有独有的字段/值对,则调查汇合组件1200的输入流的值是独有的。图12A的范例对应于对键字段对A1、B1(图11A所示)的汇合操作。通过比较与该汇合操作中的键字段对应的调查记录,由过滤组件1202选择“字段1”(A1)和由过滤组件1204选择“字段1”(B1),调查汇合组件1200潜在地进行比汇合组件1100(其比较来自表格A和表格B的各记录的键字段)的比较数目小得多的比较。图12B的范例对应于对键字段对A1、B2(图11B所示)的汇合操作,由过滤组件1206选择“字段1”(A1)和由过滤组件1208选择“字段2”(B2)。所示出的所选调查记录1210-1218由它们各自在字段/值对中的字段值和该值的出现计数来标注。
如果调查汇合组件1200发现两个输入调查记录1210-1218中的值之间的匹配,输出记录包含:匹配值、基于这两个计数的对应分布图形,以及在该对键字段的汇合操作中将产生的记录总数(其就是这两个计数的乘积)。如果没有发现该值的匹配,也输出该值与对应的分布图形和记录总数(其是在单个输入记录中的单个计数)。在调查汇合组件1200的输出记录内的此信息足以编译在汇合操作的分布表中的所有计数。
在图12A的范例中,在输出端出现的值“W”的分布图形为1×0,共为1;在输出端出现的值“X”的分布图形为N×N,共为4;以及在输出端出现的值“Y”的分布图形为1×N,共为2。此信息对应于图11A的分布表1118中的信息。在图12B的范例中,在输出端出现的值“W”的分布图形为1×1,共为1;在输出端出现的值“X”的分布图形为N×1,共为2;在输出端出现的值“Y”的分布图形为1×1,值为1;以及在输出端出现的值“Z”的分布图形为0×1,值为1。此信息对应于图11B的分布表1122中的信息。
6.2扩展记录
用于在单个调查汇合操作中的多个字段对的汇合-字段分析包括基于调查记录产生“扩展记录”。在图13所示的范例中,调查汇合组件1200比较用于两对键字段A1、B1和A1、B2的汇合-字段分析的记录,并结合图12A-B所示的汇合-字段分析。通过连接被汇合的一对键字段的独有标识符与在调查记录中的值,并保持相同的出现计数作为该调查记录,从该调查记录产生扩展记录。
如果汇合-字段分析包括与多个其它字段汇合的一字段的结果,则为该字段的每个值产生多个扩展记录。例如,调查记录1210对应于两个扩展记录1301-1302,且值“W”分别与标识符“A1B1”和“A1B2”连接。调查汇合组件1200处理扩展记录1301的方式与其将处理具有值“WA1B1”的调查记录的方式相同。同样,调查记录1211对应于两个扩展记录1303-1304,以及调查记录1212对应于两个扩展记录1305-1306。
在图13的汇合-字段分析中,字段B1仅与一个其它字段(A1)汇合,因此每个调查记录1213-1214分别对应于单个扩展记录1307-1308。同样,字段B2仅与一个其它字段(A1)汇合,因此每个调查记录1215-1218分别对应于单个扩展记录1309-1312。每个扩展记录包括基于与独有的字段标识符连接的原始值的值。
参照图14,扩展组件1400基于汇合信息1401处理输入调查记录以产生扩展记录,汇合信息1401指明在汇合-字段分析中哪些字段与哪些其它字段汇合。在此范例中,汇合信息1401指明来自表格T1的调查数据的字段F1(具有四个调查记录1402)正与四个其它字段汇合:来自表格T2的调查数据的字段F1(具有两个调查记录1404),来自表格T2的调查数据的字段F2(具有两个调查记录1406),来自表格T3的调查数据的字段F1(具有两个调查记录1408),以及来自表格T3的调查数据的字段F2(具有两个调查记录1410)。流入扩展组件1400的调查记录1412表示来自表格T1(具有字段F1和值Vi,其中i=1,2,3,或4)的调查数据的四个调查记录1402之一。对于输入调查记录1412,扩展组件1400产生四个扩展记录1413-1416。
对于字段(包括在不同表格中具有相同名字的字段),调查汇合组件1200使用独有的标识符。扩展记录1413具有值c(T1,F1,T2,F1,Vi),值c是原始值Vi与被汇合的字段的标识符以及表格(或文件或其它数据源)的标识符的连接,其中从该表格(或文件或其它数据源)中产生字段的调查数据。表格包括标志符能够区分具有相同名称的字段。扩展记录1415具有区别于扩展记录1413的值c(T1,F1,T2,F1,Vi)的值c(T1,F1,T3,F1,Vi),其中两个表格T2和T3具有相同的字段名F1。可替换地,可以代替字段名,将独有数字分配给每个字段并使用。
6.3汇合-字段分析图表
图15A-B为归档模块100使用的图表,以对在数据源30内的源(例如,表格或文件)中所选择的字段进行任意的汇合-字段分析。用户118选择用于归档和汇合-字段分析的选项,包括执行不进行汇合-字段分析的归档的选项。用户118选择用于汇合-字段分析的字段对,包括:互相成对的两个指定字段、与每个其它字段成对的一个字段、或与每个其它字段成对的每个字段。用户118选择一选项,以允许在相同的表格或文件内的字段的成对,或仅允许在不同的表格或文件内的字段的成对。这些选项存储在元数据存储器112中。
参照图15A,对于汇合-字段分析选项中指定的字段的每个源(例如,表格或文件),图表1500利用为这些指定字段准备的调查数据1510产生一文件。图表1500对汇合-字段分析中所含的每个这样的源运行一次。过滤组件1504从调查进行组件406产生的调查数据1502接收记录,并准备用于汇合-字段分析的记录。过滤组件1504丢掉该分析中不包括的字段的记录(由存储在元数据存储器112的用户选项确定)。过滤组件1504还丢掉无效值、零值、以及对数据源的内容的有意义的分析中不包括的其它值(例如众所周知的数据标志)。
调查数据组件1502中的值已经被规范化组件616在调查进行组件406中规范化。然而,这些规范化的值可能具有不应当用在值的逻辑比较中的部分(例如,具有引导或拖尾空间的串,或具有引导或拖尾零的数字)。用户118可以选择用于“字面地”或“逻辑地”比较这些值的选项。如果用户118选择“字面”比较,则调查记录中的这些值以规范化的形式保留。如果用户118选择“逻辑”比较,则过滤组件1504根据规则(例如除去数字的引导和拖尾空间以及除去数字的引导和拖尾零)来转换调查记录中的值。
值分割组件1506基于调查记录中的值重新分割记录。具有相同值的任何调查记录被放入相同的分区。这允许汇合-字段分析跨过任意个数的分区并行运行。由于对于具有匹配值的输入记录,调查汇合组件1200只产生输出记录,在不同分区中的调查记录(或它们产生的任何扩展记录)不必互相比较。
上滚逻辑值组件1508合并因过滤组件1504进行的转换具有匹配的字段/值对的任意调查记录。合并后的记录具有出现计数,该出现计数是对所有合并记录的计数的和。例如,如果字段、值、计数为“数量,01.00,5”的调查记录被转换为“数量,1,5”,且字段、值、计数为“数量,1.0,3”的调查记录被转换为“数量,1,3”,则上滚逻辑值组件1508将这两个转换后的记录合并成字段、值、计数为“数量,1,8”的单个记录。
参照图15B,对于如汇合-字段分析选项所指定的具有一个或多个待比较字段的每对源,即,源A和源B,图表1512使用准备的调查数据A1514和准备的调查数据B 1516(均由图表1500准备)运行。两个扩展组件1400从这些准备的调查数据组接收记录以及汇合信息1515,该汇合信息1515指定将要与源B中的指定字段进行比较的源A中的指定字段。扩展记录流入调查汇合组件1200,该调查汇合组件1200产生包含值、分布图形、以及分布表中正在比较的字段的计数的记录。局部上滚汇合统计数字组件1518编译在每个分区内的这些记录中的信息。然后,在各种分区中的记录由整体上滚汇合统计数字组件1520收集和编译,该整体上滚汇合统计数字组件1520输出文件1522,其包含对被分析的所有数据源对中的字段的所有汇合-字段分析统计数字。汇合-字段分析的结果(包括在各种字段之间潜在地存在这三种类型的关系中的哪个)装载到元数据存储器112中,用于呈现给用户118。例如,用户118可以在用户接口116上选择用于具有潜在关系的一对字段的链路,并在用户接口116上观看页面,该页面具有详细的分析结果(其包括来自分布表的该对字段的计数)。
参照图15C,当对相同源(源C)内的两个字段进行汇合-字段分析时,图表1524使用图表1500准备的调查数据C1526运行。单个扩展组件1400从该组准备的调查数据C1526接收记录以及汇合信息1528,该汇合信息1528指定待比较的源C中的指定字段。扩展记录流入调查汇合组件1200的两个端口,该调查汇合组件1200产生包含值、分布图形、以及分布表中待比较字段的计数的记录。
在汇合-字段分析选项指明源C中的每个字段将要与源C(具有四个字段:F1,F2,F3,F4)中的每个其它字段相比较的情况下,一种方式是汇合信息1528指定十二对字段(F1-F2,F1-F3,F1-F4,F2-F1,F2-F3,F2-F4,F3-F1,F3-F2,F3-F4,F4-F1,F4-F2,F4-F3)。然而,由于对于字段对F1-F3和F3-F1要进行相同的操作,一些操作被重复进行。因而,另一种方式是汇合信息仅指定六对独有字段对F1-F2,F1-F3,F1-F4,F2-F3,F2-F4,F3-F4。在此情况下,通过将已分析的六对字段的分析结果中的字段次序颠倒,输出文件1530的结果可以被扩大为包括其它六个字段对的结果。
7函数依赖性分析
归档模块100能够进行的另一种类型的分析是测试字段值之间的函数关系。所测试的字段可以来自具有一组字段的单个表格或来自“虚拟(virtual)表格”,该虚拟表格包括来自彼此相关的多个源(例如,通过使用公共键字段对这些字段的汇合操作而相关,这将在7.3节中详细描述)的字段。在一对字段之间的一种类型的函数关系是“函数依赖性”,即,与记录的一个字段相关联的值可以由与记录的另一个字段相关联的值唯一地确定。例如,如果数据库具有州(State)字段和邮政编码(Zip Code)字段,邮政编码字段的值(例如,90019)确定州字段的值(例如,CA)。邮政编码字段的每个值映射到州字段的独有值(即,“多对一”映射)。函数依赖性关系也可以存在于字段的子集(其中与记录的一个字段相关联的值可以由与记录的另一个字段相关联的值唯一地确定)之间。例如,邮政编码字段的值可以由城市字段和街道字段的值唯一地确定。
函数依赖性也可以是“近似的函数依赖性”,即与一个字段相关联的某些(不必全部)值映射到另一个字段的独有值,且具有未映射独有值的例外值具有一定比例。例如,一些记录可能具有未知的由特殊值00000表示的邮政编码。在此情况下,邮政编码字段的值00000可以映射到州字段的超过一个的值(例如CA,FL,以及TX)。也可能因具有不正确的值或其它错误的记录而出现例外值。如果例外值的比例小于预定(例如,由用户输入的)阈值,则字段可以仍被确定为与另一个字段存在函数依赖性。
参照图16,示出范例表格1600,其具有将要测试函数依赖性或近似函数依赖性的记录(行)和字段(栏)。姓(LastName)字段具有对应于十二个记录(行1-12)的十二个值。其中十个值是独有的,这些记录中的两个具有相同的重复值名g。国籍(Citizenship)字段具有两个独有值:US出现十一次,CANADA出现一次。邮政编码字段具有各种值,每个对应于州字段的三个值CA、FL以及TX的一个。除了对应于一个记录(行10)中的FL和对应于另一个记录(行12)中的TX的邮政编码值00000,邮政编码的每个值唯一地确定州的值。
7.1函数依赖性分析图表
图17为归档模块100使用的图表1700的范例,以对在数据源30内的一个或多个源(例如,在单个表格或文件中,或如7.3节所述的在多个表格和/或文件中)中所选择的字段进行任意的函数依赖性分析。用户118选择用于归档和函数依赖性分析的选项,包括执行不进行函数依赖性分析的归档的选项。用户118可以选则哪对字段或哪些字段对进行函数关系的测试。用户118选择数据源(例如,表格或文件)的特定字段,并选择例如“全部到选择”或“选择到选择”来确定测试哪些字段对,或选择“全部到全部”,来测试数据源中的所有字段对。在决定字段与或不与另一个字段存在函数依赖性之前,用户可以选择确定函数依赖性程度的阈值。例如,用户可以选择确定允许多少例外值(作为记录的比例)的阈值。这些选项存储在元数据存储器112中。
对于将要分析的每对字段(f1,f2),图表1700确定是否存在函数依赖性关系,如果存在,则将字段f1和字段f2之间的关系归类为:“f1确定f2”、“f2确定f1”、“一对一”(在f1与f2之间存在一对一的映射),或“等同”(在每个记录中f1基本具有与f2相同的值)。图表1700读取由在归档模块100存储的字段信息1702,以确定待分析的字段的独有标识符。配对组件1704使用待测试的每对字段的一对独有标识符产生字段对(f1,f2)的流。由于f2与f2之间的关系不必是对称的,该对字段(f1,f2)是有序的对。因此该流中包括两对字段(f1,f2)和(f2,f1)。
字段对选择组件1706通过选择用户为分析选择的字段对,来限制流到图表1700的其余部分的字段对。字段对选择组件1706还基于各种优化法,进一步限制流到图表1700的其余部分的字段对。例如,字段与其自身不成对,因为这样的对通过定义被归类到“等同”。因此,该流中不包括字段对(f1,f1),(f2,f2)...等。其它优化法可以从该流中去掉一个或多个字段对,这将在下面的7.2节中详细描述。
广播组件1708将字段对的序列流广播到(潜在地并行的)附加值组件1718的每个分区,由广播链接符号1710表示。附加值组件1718的每个分区采用字段对(例如,(LastName,Citizenship),(Zip,State)...等)的流和字段/值对(例如,(LastName,name_a),(LastName,name_b),(LastName,name_c)...,(Citizenship,Canada)(Citizenship,US),(Citizenship,US)...等)的流作为输入。
为获得字段/值对的流,过滤组件1712从输入数据集402提取记录,并基于过滤表达式选择性地去掉部分记录。从过滤组件1712流出的记录流入循环分割组件1714。循环分割组件1714从输入数据集402的分区提取记录,并在多个并行处理器和/或计算机之间重新分割记录,以在这些处理器和/或计算机之间平衡工作负荷。规范化组件1716(与前述规范化组件616类似)获取记录流,并发送出表示输入记录中每个字段的值的字段/值对的流。如上所述,每个值被转换成规范化的人员可读的串表示。
附加值组件1718执行一序列汇合操作,以产生f1/f2/v1/v2四重(quadruples)流,其中f1和f2对应于在输入端接收到的字段对之一,v1和v2对应于与记录中的这些字段成对的值。在表格1600的范例中,当姓字段对应于f1以及国籍字段对应于f2时,附加值组件1718产生十二个f1/f2/v1/v2四重流,包括:(LastName/Citizenship/name_a/Canada),(LastName/Citizenship/name_b/US)...(LastName/Citizenship/name_k/US),(LastName/Citizenship/name_g/US)。对于(Zip,State)和已分析的任何其它字段对,附加值组件1718产生类似序列,即f1/f2/v1/v2四重流。
附加值组件1718将f1/f2/v1/v2四重流输出到“局部上滚f1/f2/v1/v2”组件1720,“局部上滚f1/f2/v1/v2”组件1720(对于每个分区)使用相同的字段和值f1、f2、v1、v2累加多个四重流,并将它们表示成单个四重流,其具有输入流中四重流的出现次数的计数。“局部上滚f1/f2/v1/v2”组件1720的输出流由具有计数(“累加的四重流”)的四重流组成。
在“局部上滚f1/f2/v1/v2”组件1720中发生的累加位于每个分区内。因此一些具有相同的f1、f2、v1、v2值的四重流不会被此组件1720累加。“f1/f2分割”组件1721重新分割累加的四重流,从而具有相同字段f1、f2的四重流在相同的分区中。“整体上滚f1/f2/v1/v2”组件1722进一步累加重新分割后的四重流。“整体上滚f1/f2/v1/v2”组件1722的输出流由唯一累加的四重流组成。在表格1600的范例中,当邮政编码字段对应于f1且州字段对应于f2时,组件1720-1722的组合效果产生以下六个累加的四重流:(Zip/State/90019/CA,4)、(Zip/State/90212/CA,2)、(Zip/State/33102/FL,3)、(Zip/State/00000/FL,1)、(Zip/State/77010/TX,1)、(Zip/State/00000/TX,1)。当州字段对应于f1且邮政编码字段对应于f2时,组件1720-1722的组合效果产生以下六个累加的四重流:(State/Zip/CA/90019,4)、(State/Zip/CA/90212,2)、(State/Zip/FL/33102,3)、(State/Zip/FL/00000,1)、(State/Zip/TX/77010,1)、(State/Zip/TX/00000,1)。
为了准备测试一对字段之间的函数依赖性关系,“整体上滚f1/f2/v1”组件1724合并所累加的、共同具有两个字段f1、f2和第一值v1的四重流。在生成输出元素的过程中,此组件1724检查伴随v1值的所有v2值,并选择最频繁的v2与该v1值相关联。共享最频繁的v2的四重流的数量被计数为“好”,其余的四重流被计数为“例外”。如果对于给定的v1只有一个v2值,则具有该值的所累加的四流重是好的并且没有例外值。如果最频繁的v2值有一个“结(tie)”,则选择第一个值。在表格1600的范例中,当邮政编码字段对应于f1且州字段对应于f2时,组件1724产生:(Zip/State/90019/CA,4好)、(Zip/State/90212/CA,2好)、(Zip/State/33102/FL,3好)、(Zip/State/00000/FL,1好,1例外)、(Zip/State/77010/TX,1好)。当州字段对应于f1且邮政编码字段对应于f2时,组件1724产生:(State/Zip/CA/90019,4好,2例外)、(State/Zip/FL/33102,3好,1例外)、(State/Zip/TX/77010,1好,1例外)。
“整体上滚f1/f2”组件1726将每个独有字段对f1、f2的好的计数和例外值相加。在表格1600的范例中,当邮政编码字段对应于f1且州字段对应于f2时,组件1726产生:(Zip/State,11好,1例外)。当州字段对应于f1且邮政编码字段对应于f2时,组件1726产生:(State/Zip,8好,4例外)。
依赖性发现组件1728使用来自“整体上滚f1/f2”组件1726的所累加的同现统计数字(即,好的和例外的记录的个数),确定一对字段是否具有“f1确定f2”的关系。如果例外值的比例(例外的个数/(好的个数+例外的个数))小于所选择的用于确定允许多少例外值的阈值,则该对字段具有“f1确定f2”的关系。在表格1600的范例中,对于阈值10%,当邮政编码字段对应于f1且州字段对应于f2时,例外值的比例是8.3%,并且邮政编码字段的值确定州字段的值。当州字段对应于f1且邮政编码字段对应于f2时,例外值的比例是33%,因此邮政编码字段与州字段之间的关系并非一对一映射。
可替换地,基于累加的值的数学属性的值可以用于确定是否是字段f1确定字段f2(例如,字段f1的值给定的字段f2的值的条件熵,或数值的标准偏差)。
7.2选择字段对的优化
可以采用各种优化法来加快函数依赖性分析的速度,例如在字段对选择组件1706过滤字段对,或在过滤组件1712过滤记录。一些优化法基于这样的认识,即,上述的图表1700发现的一些函数依赖性关系对于用户来讲并不像对其他人那样有意义。对于一给定字段对,这些情况中的一些情况可以被字段对选择组件1706基于归档模块100提供的统计数字检测到并过滤掉,这节省了计算资源。例如,如果第一字段f1的所有值都是独有的(在单个记录中每个值仅出现一次),则该字段f1的值确定第二字段f2的值,而与字段f2中出现的值无关。
图表1700可以使用在归档过程中获得的调查数据,基于这些字段中的值的随机(例如,统一概率分布)配对来计算由第一字段f1确定第二字段f2的概率。如果随机配对将导致函数依赖性的概率较高(例如,>10%),则该字段对被字段对选择组件1706过滤掉。在表格1600的范例中,除了当name_g值(在行7或行12中)中的一个与值Canada随机配对以外,当姓字段对应于f1且国籍字段对应于f2时,姓与国籍的每个随机配对将导致所有四重流被计数为好。即使当此随机配对发生(概率为16.7%(12个配对中的2个)),例外比例仅是低于阈值的8.3%。因此,在此范例中,字段对选择组件1706过滤该对字段(LastName,Citizenship)。
另一个优化法基于归档模块100从调查数据计算出的值的直方图。字段对选择组件1706过滤掉字段f1不能确定字段f2的字段对。在表格1600的范例中,州的最频繁的值出现6次,而邮政编码的最频繁的值仅出现4次。因此,州的值不能确定邮政编码的值,因为对于至少一半的值,在6个范围内至少有2个例外,这导致至少16.7%的例外比例。因此,在此范例中,字段对选择组件1706过滤掉该对(State,Zip)。
对于数量众多的记录,图表1700可以通过在处理所有记录之前先处理小部分记录采样,以排除一些很有可能不具有函数相关性的字段对,来加快测试函数依赖性的速度。图表1700可以使用过滤组件1712选择部分记录。可替换地,图表1700可以使用规范化组件1716选择部分字段/值对。
可以基于各种标准对记录或字段/值对采样。图表1700可以基于归档模块100提供的统计数字采样。例如,图表1700可以基于第一字段f1(“决定因素(determiner)”)的最频繁的值测试函数依赖性。如果得到的例外值个数高于阈值,则不必处理该决定因素的其余值。图表1700也可以基于决定因素值的随机采样测试函数依赖性。如果在这些采样值之间足够数目的四重流被计数为好,则假定可以忽略在其它值之间发现实际数目的例外值的概率。其它采样标准也可以使用。
另一个可选的优化法是基于已知的函数库测试字段之间预定的函数关系。此测试可以对记录或四重流的值进行。
7.3跨过多个源的函数依赖性分析
在一种跨过多来源(例如,多个数据库表格)的函数依赖性测试的方式中,归档模块100产生包括来自所述多个源的字段的“虚拟表格(virtual table)”。该虚拟表格可以例如,通过利用对这些源共用的键字段对这些源进行汇合操作而产生。
在使用虚拟表格进行函数依赖性分析的范例中,第一数据源是机动车辆登记信息(机动车辆登记(MVR)数据库)的数据库,第二数据源是发出的交通罚单(交通罚单(TC)数据库)的数据库。MVR数据库包括字段例如制造商、型号、颜色,并包括被指定为“主键”字段的执照字段。MVR数据库的每个记录具有独有的执照字段值。TC数据库包括字段例如姓名、日期、位置、违规记录、机动车制造商、机动车型号、机动车颜色,并包括被指定为“外键”字段的机动车执照字段。机动车执照字段的每个值具有与MVR数据库中的执照字段的值对应的记录。TC数据库可以具有机动车执照字段值相同的多个记录。
归档模块100汇合来自MVR数据库和TC数据库的记录,以形成虚拟表格(例如,如前面参考图11A所示的汇合组件1100所述的)。该虚拟表格的每个记录具有来自两个数据库的每个字段,包括单个执照字段,其具有与来自MVR执照字段和TC机动车执照字段的匹配值。然而,记录可以具有与来自TC数据库的机动车颜色字段值不同的、来自MVR数据库的颜色字段值。例如,MVR数据库可以使用“BLU”代码来表示蓝色,而TC数据库使用“BU”代码来表示蓝色。在此情况下,如果机动车在这两个数据库中具有相同的颜色,则颜色字段与机动车颜色字段将具有“一对一”的函数关系。可替换地,如果在登记和接收传讯(citation)之间的时间机动车已被涂上不同的颜色,对于颜色字段与机动车颜色字段,记录可以具有不同的值。
由于汇合虚拟表格包括来自多个数据集中每个数据集的字段,归档模块100可以发现这些数据集中的字段之间可能存在的各种关系中的任何关系。如上所述的相同的或相似的依赖性分析可以对汇合虚拟表格中的字段运行。
上述方式可以利用在计算机上运行的软件来实施。例如,该软件可以形成在一个或多个已编程或可编程的计算机系统(它们可以是各种架构的,例如分布式、客户/服务器、或网格)上运行的一个或多个计算机程序中的程序;其中,每个计算机系统包括:至少一个处理器、至少一个数据存储系统(例如,易失性和非易失性存储器和或存储元件)、至少一个输入装置或端口,以及至少一个输出装置或端口。该软件可以形成更大的程序例如,提供与图表的设计和配置相关的其它服务的程序的一个或多个模块。
该软件可以设置在一般或专用目的的可编程计算机可读的介质或装置上,或经网络传递(编码成可传播的信号)到将运行它的计算机。所有这些功能可以在专用目的的计算机上或使用专用目的的硬件例如协处理器实现。该软件可以以分布方式实施,其中,软件指定的不同的计算部分由不同的计算机进行。每个这种计算机程序优选存储在或下载到一般或专用目的的可编程计算机可读的存储介质或装置(例如,固态存储器或介质,或磁或光介质),用于在该计算机系统读取该存储介质或装置以运行这里描述的程序时,配置和操作计算机。本发明的系统也可以考虑作为配置有计算机程序的计算机可读存储介质来实施,其中,存储介质被配置为使计算机系统以实现这里所述的功能的特定和预定义的方式操作。
应当理解前面的描述意在示例性的说明而非限制本发明的范围,本发明的范围由所附的权利要求书的范围来限定。其他实施例落在所附的权利要求书的范围内。