本节书摘来自华章出版社《大数据集成(1)》一书中的第2章,第2.1节,作者 [美] 董欣(Xin Luna Dong)戴夫士·斯里瓦斯塔瓦(Divesh Srivastava),更多章节内容可以访问云栖社区“华章计算机”公众号查看
2.1 传统模式对齐:快速导览
模式对齐的传统方法包含三个步骤:创建一个中间模式、属性匹配和模式映射,如图2-1所示。
2.1.1 中间模式
首先,创建一个中间模式为不同的数据源提供一个统一的虚拟视图并捕捉到领域的突出方面。大多数情况下,中间模式是人工创建的。对于给出的航班的例子,一种可能的中间模式如下所示:
中间模式Mediate包含三张表:Flight表是航班信息;Fare表是机票信息;Airport表是机场信息。作为统一的视图,中间模式通常比每个模式包含更多的信息。例如,它包含机票和机场的信息,而这些在数据源Airline1、Airline2和Airport3中都不包括;另一方面,它又包含不存在于Airfare4数据源中的信息,如航班的实际出发和到达时间等信息。另外值得注意的是,中间模式并不包含每个数据源中的每项信息。例如,Airport3数据源提供了关于跑道的信息,而这并没被包括在中间模式中,因为这一信息很少被用户查询。
2.1.2 属性匹配
接下来,每个数据源模式中的属性和中间模式中的相应属性进行匹配。很多情况下,属性匹配是一对一的,但有时中间模式中的一个属性可能对应数据源模式中的几个属性的组合,或反之。例如,Mediate.Airport表中的ACI、AST和ACO属性组合起来对应于AirInfo5.AirportCodes表中的AN属性。图2-2给出了从Airline1.Flight表到Mediate.Flight表的属性匹配的一个例子。
研究者们已经提出了许多属性匹配的技术,利用属性名字、类型和值之间的相似度,以及属性间的近邻关系等。这方面的综述详见[Rahm and Bernstein 2001]和[Bellahsene et al. 2011]。
2.1.3 模式映射
根据属性间相应的匹配可以建立每个数据源模式和中间模式之间的模式映射。这些映射说明了不同数据源内容之间的语义关系,被用来将中间模式上的一个用户查询转述成底层数据源上的一组查询。
有三种类型的模式映射:全局视图global-as-view(GAV)、局部视图local-as-view(LAV)和全局局部视图global-local-as-view(GLAV)。GAV说明如何通过查询数据源模式来获得中间模式的数据,换句话说,中间模式的数据被视为源模式数据上的一个视图。LAV将源数据说明为中间模式数据的一个视图,该方法易于增加一个具有新模式的新数据源。最后,GLAV将中间模式数据和各数据源的数据都说明为一个虚拟模式的视图。
例如,下表给出了中间模式和数据源Airline1之间的GAV映射和LAV映射。这些映射被表示为Datalog形式。GAV映射指出可以通过连接Airline1.Schedule表和Airline1.Flight表的Flight ID (FI)列来得到Mediate.Flight表中的属性值。LAV映射则指出可以通过在Mediate.Flight表中先选择Airline (AL)的值等于“Airline1”的所有元组,再投影得到Airline1.Schedule和Airline1.Flight中的属性值。
根据属性匹配的结果半自动地建立模式映射的工具已经被研制出来了[Fagin et al. 2009]。在中间模式上提出的一个用户查询会根据模式映射被重新表述为在数据源模式上的查询[Halevy 2001]。
2.1.4 查询问答
图2-3描绘了一个传统数据集成系统中的查询问答。
用户通过表达中间模式上的查询来查找一个数据集成系统中底层的数据。例如,一个用户可以如下查询所有从EWR出发,到达SFO,并且票价低于$1?000的航班。
然后系统根据中间模式和每个数据源模式之间的模式映射将查询重新表达为底层数据源之上的查询。例如上面的查询无法被数据源Airline1、Airline2和Airport3所回答,因为它们缺少关于票价的信息;但是它可以被重新表达为数据源Airfare4和Airinfo5之上的如下查询来回答。
SELECT DISTINCT Fl.FI, Fl.FN, Fl.DD, A1.AC, . . .
FROM Airfare4.Flight AS Fl, Airfare4.Fares AS Fa,
Airinfo5.AirportCodes AS A1, Airinfo5.AirportCodes AS A2
WHERE A1.AC=‘EWR’ AND A2.AC=‘SFO’
AND A1.AN CONTAINS Fl.DA AND A2.AN CONTAINS Fl.AA
AND Fl.FI = Fa.FI AND Fa.F < 1000
最后,查询处理器在源数据上回答查询,并返回一组合并后的结果给用户。