多表连接方法技术

技术编号:2851089 阅读:258 留言:0更新日期:2012-04-11 18:40
公开了一种将具有多条记录的第一表与具有多条记录的第二表连接以形成第三表的多表连接方法,所述第一表和第二表的每一条记录都具有各自的有效开始日期、有效结束日期、第一数量和/或第二数量。本发明专利技术的方法充分利用了两表根据时间段进行合并的这个前提条件,只需对两表遍历一次就可以得到结果。因此,只需要对M+N条记录进行处理,就能够将两个表连接成一个表,并且克服了SQL方法造成的边界值丢失问题。

【技术实现步骤摘要】

本专利技术涉及数据仓库中的多表连接
,特别是涉及一种按照时间压缩的,以提高多表连接的效率。
技术介绍
数据仓库的一个重要特点是需要对大量历史数据进行存储。一种常见的情况是多目的数据相同,简单地对这些记录进行存储将造成存储空间极大的浪费。一种常用的改进方法是对这些记录按照时间段进行压缩存储,通过在事实表与维表中加上有效开始日期(Effective_From)和有效结束日期(Effective_To)两个字段表示记录的时间有效性。这样,一段时间内相同记录可以压缩为一条记录,这种方法可以充分利用存储空间。数据仓库之父W.H.Inmon和数据仓库专家Ralph Kimball都在各自的专著中对这种方法进行了介绍。但是,这种常用的压缩方法同时也给多表连接操作带来了复杂性,因为传统的索引和表连接方式都不能完全发挥作用。因此,如何快速而高效地实现这种按时间段压缩的多表的连接操作成为了一个常见的问题。为了更清晰地阐述这类问题,下面针对图6(A)~6(C)所示的三张表来进行描述。在图6(A)所示的表,例如T1是常见的事实表,其中SK字段表示代理键,A字段表示一个数量(可能是交易数量或其他数量),有效开始日期,有效结束日期,其中“1900-01-01”表示一个最小的日期,“9999-12-31”表示一个最大的日期。类似地,图6(B)所示的表,例如T2,是常见的维表,其中SK字段表示代理键,B字段表示某个属性信息(可能是信用卡编号或其他信息),有效开始日期和有效结束日期两个字段的含义与如上所述相同。将表T1和表T2按照有效期时间段关系进行连接后生成的正确结果表T3,如图6(C)所示。对于这种类型的多表连接操作,一种最原始的方法是首先“解压”记录,即将按照时间段存储的一条记录变为按日的记录,其中的数量全部相同,例如对于一条时间段为5月1日至5月31日的时间压缩记录,按日进行解压后将生成31条记录,这些记录除了日期字段其余所有字段都相同,然后对事实表与维表按照SK与日期进行合并,最后将结果表重新按照时间段进行压缩存储。这种最简单的方法在效率上十分低下,并且在三个步骤的合并过程中将耗费许多存储空间供临时表使用。其他一些方法是根据时间段合并的不同条件采用SQL语句实现,在这方面,IBM,NCR等公司都给出了他们建议的SQL语句方式,效率比上述的原始方法有较大提高,在数据仓库项目中一般都采用这种SQL语句的方式解决此类连接问题。但是这种目前普遍采用的方法仍然存在着两个主要的缺点。1.SQL语句方式的执行效率不高对于SQL语句的效率从算法理论角度分析如下用SQL语句进行两表的连接操作,其基础建立在对两表做笛卡尔积。如果两表分别有M,N条记录,则需要对M×N条记录进行处理,算法复杂性为O(M×N)。根据更一般的情况可以得到如下分析过程假设T1表中不同SK的取值有M种,每一种SK的取值分别有Ni条记录(即第i个SK有Ni条记录,i=1,2,3……M)。假设T2表中不同SK的取值有P种,每一种SK的取值分别有Qi条记录(即第i个SK有Qi条记录,i=1,2,3……P)。则对于SQL实现的笛卡尔积有如下分析连接条件为T1.SK=T2.SK,则连接后形成的结果表共有 条记录,其中s为N与Q中相同SK的数目。但是,如果考虑索引的因素,可以进一步得到如下的分析过程 对T1表和T2表作为连接条件的字段SK,EF,ET分别加上索引,这样SQL语句在实际执行过程中每次读取T1表中一条记录,然后在T2表中进行查找,由于采用了索引,因此不必顺序查找整个表,而是在一定的排序算法基础上根据查找算法进行查找,根据算法理论证明可知,查找算法效率最高是log2N,其中N是记录条数,经过我们对oracle环境中SQL语句的查询计划分析,oracle环境中对索引表的查找效率即为log2N。为了分析的简洁起见,在这里假设T1表中只有一个SK,取值有M条记录,T2中有同样对应的一个SK,取值有N条记录,可以看到,将M看作T1表中不同SK对应记录数的平均值,将N看作T2表中不同SK对应记录数的平均值,根据上述假设,SQL方式访问表的次数为M×log2N+M,当M,N很大时,这样的操作仍然需要耗费比较长的时间。此外,现代关系数据库管理系统(RDBMSRelation DataBaseManagement System)对于表连接SQL语句主要采用的是在笛卡尔积基础上发展而来的嵌套循环连接(Nested Loop Join)、排序合并连接(Sort Merge Join)以及哈希连接(Hash Join)以及基于这些方法的改进算法。但是,由于此类问题存在的按照时间段进行连接的特殊性,使得这些普遍采用的算法在此类问题上仍然不能完全发挥作用。在实际数据库管理系统所采用的三种表连接算法中,嵌套循环连接方式基本与笛卡尔积操作一样,不同的是实际采用时对于数据的I/O操作进行了一定的优化,但是表连接的基本操作记录比较的数目是不变的。排序合并连接虽然对于一般的表连接可以达到O(M+N)的效率,但是其前提条件是作为连接条件的字段值是表内唯一的并且连接条件为等值连接时才能达到这个最优的效率。如果连接条件字段值不唯一或者连接条件为不等值连接,那么效率将大大下降,这被国外研究者称为排序合并连接算法的本质缺陷(Intrinsic Skew)。针对这些由于数据问题引起的排序连接算法效率下降问题,很多研究者都进行了研究,但是提出的改进算法主要着重于在比较指针需要回溯的时候如何减少数据库的读写次数,目前还没有一种算法能大幅减少记录比较次数,使得效率回到O(M+N)这个最佳值。哈希连接依赖于所选择的哈希函数,目前还没有一种能使得各种表连接情况都能达到最优效率的哈希函数。另外,哈希连接的实现比较复杂,在很大程度上依赖于具体的数据库管理系统。对于一些比较轻型的数据库管理系统可能没有哈希连接,那么多表连接就很难得到优化。2.SQL语句对于边界值情况处理时会造成记录丢失SQL方法对于事实表和维表每个SK第一条记录的处理会丢失一段时间,例如对于图6(A)和图6(B)的表中所示的数据,对于SK=1的记录,使用SQL语句得到的结果表中第一条记录如图7的表所示。从图7中可以看出,丢失了从1999-01-01到1999-04-30这段时间的信息,也就是说对于图6(A)中的第一条记录的信息造成了丢失,而丢失记录在数据仓库中绝对不允许的。SQL语句方式为了解决这种边界值的丢失,必须加入额外的语句进行判别和处理。
技术实现思路
本专利技术克服了现有技术中的不足,提供一种形式简洁,与具体平台和编程语言无关,对数据仓库领域中按时间压缩存储的多表连接具有普遍适用性,执行效率提高明显的时间压缩的。在本专利技术的一个方面,提出了一种将具有多条记录的第一表与具有多条记录的第二表连接以形成第三表的,所述第一表和第二表的每一条记录都具有各自的有效开始日期、有效结束日期、第一数量和/或第二数量,所述的方法包括步骤第一步骤,初始化分别用来暂存第一数量和第二数量的第一数量变量和第二数量变量,以及分别用来暂存第一表的记录和第二表的记录的第一记录变量和第二记录变量;第二步骤,将第一表的一条记录和第二表的一条记录分别读入第一记录变量和第二记录变量;第三步本文档来自技高网
...

【技术保护点】
一种将具有多条记录的第一表与具有多条记录的第二表连接以形成第三表的多表连接方法,所述第一表和第二表的每一条记录都具有各自的有效开始日期、有效结束日期、第一数量和/或第二数量,所述的方法包括步骤:第一步骤,初始化分别用来暂存第一数量和 第二数量的第一数量变量和第二数量变量,以及分别用来暂存第一表的记录和第二表的记录的第一记录变量和第二记录变量;第二步骤,将第一表的一条记录和第二表的一条记录分别读入第一记录变量和第二记录变量;第三步骤,将第一记录变量的有效开 始日期和第二记录变量的有效开始日期中较小的有效开始日期作为第三表中一条记录的有效开始日期,并将较小有效开始日期所在的记录中的第一数量和第二数量的一个作为第三表的该条记录的第一数量和第二数量中的一个,将第一数量变量和第二数量变量之一中的数量作为第三表中该条记录的第二数量;第四步骤,如果第一表和第二表中有效开始日期小的那个表中有未处理的记录,则将该表的第一数量或第二数量保存到第一数量变量和第二数量变量,以及将第一表的下一条记录或者第二表的下一条记录存储到第一记录变量或者第 二记录变量,并保持第一记录变量和第二记录变量中有效开始时间大的那个记录变量不变;以及第五步骤,如果第一表和第二表中有效开始时间小的那个表中没有未处理的记录,则将第一表和第二表的另一表中的所有记录顺序输入到第三表。...

【技术特征摘要】
1.一种将具有多条记录的第一表与具有多条记录的第二表连接以形成第三表的多表连接方法,所述第一表和第二表的每一条记录都具有各自的有效开始日期、有效结束日期、第一数量和/或第二数量,所述的方法包括步骤第一步骤,初始化分别用来暂存第一数量和第二数量的第一数量变量和第二数量变量,以及分别用来暂存第一表的记录和第二表的记录的第一记录变量和第二记录变量;第二步骤,将第一表的一条记录和第二表的一条记录分别读入第一记录变量和第二记录变量;第三步骤,将第一记录变量的有效开始日期和第二记录变量的有效开始日期中较小的有效开始日期作为第三表中一条记录的有效开始日期,并将较小有效开始日期所在的记录中的第一数量和第二数量的一个作为第三表的该条记录的第一数量和第二数量中的一个,将第一数量变量和第二数量变量之一中的数量作为第三表中该条记录的第二数量;第四步骤,如果第一表和第二表中有效开始日期小的那个表中有未处理的记录,则将该表的第一数量或第二数量保存到第一数量变量和第二数量变量,以及将第一表的下一条记录或者第二表的下一条记录存储到第一记录变量或者第二记录变量,并保持第一记录变量和第二记录变量中有效开始时间大的那个记录变量不变;以及第五步骤,如果第一表和第二表中有效开始时间小的那个表中没有未处理的记录,则将第一表和第二表的另一表中的所有记录顺序输入到第三表。2.如...

【专利技术属性】
技术研发人员:张昀李翔刘承岩
申请(专利权)人:中国工商银行股份有限公司
类型:发明
国别省市:11[中国|北京]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1