在关系数据库系统中用于使数据稠密的DML语句技术方案

技术编号:2847733 阅读:274 留言:0更新日期:2012-04-11 18:40
提供了一种用于数据的稠化的方法和装置。提供了一种用于包括用于在DML语句内分区数据的结构的方法和装置。用于分区数据的结构不必执行数据的稠化,以及数据的稠化不必包括用于分区数据的结构。在实施例中,OUTER  JOIN的语法被扩展为包括可以用于数据稠化的PARTITION  BY结构。

【技术实现步骤摘要】
【国外来华专利技术】
本专利技术涉及数据操作。更特别地,本专利技术涉及用于使相对于一维或多维的一组数据稠密的技术。
技术介绍
术语“维”指的是一组相关的不同值。例如,TIMES维可以包括从1998年1月到2003年12月的所有日期。相似地,PRODUCTS维可以包括代表公司的所有可能的产品的值。如果集合中的每一数据项都与特定维的值相关联,则该数据项集合是“维的”。例如,假设表的每一行都包括关于特定事件的数据,包括该事件的日期。在该实例中,“事件数据”是关于TIMES维的“维”。如果数据项集合是关于多于一维的维,则该数据项集合是“多维的”。例如,假设SALES表的每一行都包括用于特定销售的数据,包括(1)销售的日期,(2)所售的产品,以及(3)销售发生的区域。在该实例中,“销售数据”是多维的,因为销售数据关于TIMES维、PRODUCTS维、和REGION维的维。存储多维数据的表通常被称作“事实表(fact table)”。存储特定维的维值的表被称作“维表”。因此,具有上述的SALES表的相同数据库通常还包括TIMES表、PRODUCTS表、和REGION表。事实表的每一行都将对应于包括每一维的一个值的维值组合。例如,在上述的SALES表中,每一行通常对应于TIMES维值、PRODUCTS维值、和REGION维值的组合。与给定的SALES表格行相关的维值的集合可以被表示为(t,p,r),其中t是TIMES维的值,p是PRODUCTS维的值,以及r是REGION维的值。通常,并不是所有的维值的组合在事实表中具有对应行。因此,与事实表中的行相关的维值组合的集合是每一维的维值的叉积的子集。如果事实表包含用于该事实表中的其它维值的任何给定组合的所有可能的维‘D’的值,则该事实表被称作沿维‘D’是“稠密”的。例如,假设REGION维仅有三个可能的值RGN1、RGN2、和RGN3。如果对于SALES表中反映的每一组合(t,p),SALES表包括用于维值组合(t,p,RGN1)、(t,p,RGN2)和(t,p,RGN3)的行,那么SALES表相对于REGION维是稠密的。“稠化(densification)”是使数据集合沿所关注的维比其最初更加稠密的过程。行集合可以被稠化,例如通过为缺少的维值组合创建虚行。密度已被增加的数据被称作已被“稠化”,并且关于数据的密度已被增加或正被增加的维被称作“稠密”维。稠化可用于多种情形。例如,一些多维数据库系统中的查询(例如,联机分析处理(OLAP))要求沿时间维使数据稠密。一些用户,诸如OLAP用户也习惯于观看稠密格式的数据,特别是当窗口函数被计算和提交时。例如,如果特定的一天没有销售,一些用户仍然想要观看显示销售的累计、日期、以及销售列中的空白区(因为累计是OLAP中的窗口函数,其通常显示稠化的数据)的屏幕。使用结构化查询语言(SQL),稠化可以通过一系列的操作来实施,该操作包括DISTINCT、CROSS JOIN(交叉连接)、和OUTERJOIN(外连接)操作。作为实例,假设有包括下面表的数据库模式SALES(time_id,prod_id,amount_sold)TIMES(time_id,calendar_month_desc,calendar_quarter_desc,Calendar_year)PRODUCTS(prod_id,prod_subcategory,prod_category)在上面的一组表中,SALES事实表存储一个指标(销售量),该指标是关于TIMES维和PRODUCTS维的维。对于SALES表中的每一行,“time_id,”列存储用于该行的时间维值,以及“product_id,”列存储用于该行的PRODUCTS维值。因此,对于SALES事实表中包括的产品值和时间值的给定组合,amount_sold列存储指标值“amount sold”。TIMES维表存储所有的time_id值以及关于对应于每个time_id值的时间的细节。相似地,PRODUCTS维表存储所有的product_id值以及关于对应于每个product_id值的产品的细节。假设,SALES中的数据沿TIMES维是稀疏的。将沿TIMES维使SALES数据稠密的查询Q1是Q1SELECT V2.prod_id,V2.time_id,V1.amount_soldFROM SALES V1 RIGHT OUTER JOIN((SELECT DISTINCT prod_idFROM SALES)CROSS JOIN(SELECT time_idFROM TIMES) )V2ON(V1.prod_id=V2.prod_id AND V1.time_id=V2.time_id);在Q1中,V2包括(1)实际上在SALES表中的prod_id值,以及(2)TIMES表中的所有time_id值的所有组合。特别地,“SELECT DISTINCT prod_id FROM SALES”子句查找在SALES表中找到的所有prod_id的唯一值。相似地,“SELECT time_idFROM TIMES”子句查找TIMES表中的所有time_id的值。“CROSSJOIN”结构使所找到的唯一prod_ids和所有的time_ids进行叉积。V1(SALES表)和V2之间的RIGHT OUTER JOIN操作生成结果集合,该结果集合包括(1)SALES表中的所有行,以及(2)来自V2并且在SALES表中未找到的对应于time_id和prod_id组合的空行。图1是在Q1中使用的示出用于执行稠化的方法100的流程图。在步骤102,执行排序来获得SALES表中的prod_id的所有DISTINCT值。在步骤104,执行TIMES表中的所有prod_id值和time_id值的CROSS JOIN,从而获得在TIME维是稠密的但仅仅包括在SALES表中找到的那些prod_id值的(prod_id,time_id)维值组合的集合。在步骤106,具有步骤104的CROSS JOIN的结果的SALES事实表的OUTER JOIN被执行,从而将空白行添加到用于在原始的SALES表中未找到的CROSS JOIN的任何(prod_id,time_id)维值组合的SALES表。作为使用相同事实表和维表的另一实例,假设用户对每天每一产品的年-到-日(YTD)销售的累计感兴趣。假设数据是稀疏的,用SQL表达的产生YTD销售数据的查询Q2是 Q2SELECT V2.prod_id,V2.time_id,SUM(sales)OVER(PARTITION BY V2.prod_id,V2.year ORDER BYV2.time_id)YTD_salesFROM SALES V1 RIGHT OUTER JOIN((SELECT DISTINCT prod_idFROM SALES)CROSS JOIN(SELECT time_id,calendar_year yearFROM TIMES))V2ON(V1.prod_id=V2.prod_id AND V1.time_id=V2.time_id);在Q2中,“FROM SALES...”语句与Q1相本文档来自技高网...

【技术保护点】
一种由机器实现的方法,包括以下步骤:基于与多个维相关的第一数据集合,生成相对于所述多个维的第一维比所述第一数据集合更稠密的第二数据集合;其中,所述第一数据集合包括多个数据子集;以及其中,所述生成步骤包括在每个所述数据 子集和第三数据集合之间执行外连接。

【技术特征摘要】
【国外来华专利技术】US 2003-8-22 60/497,111;US 2003-8-28 60/499,078;US1.一种由机器实现的方法,包括以下步骤基于与多个维相关的第一数据集合,生成相对于所述多个维的第一维比所述第一数据集合更稠密的第二数据集合;其中,所述第一数据集合包括多个数据子集;以及其中,所述生成步骤包括在每个所述数据子集和第三数据集合之间执行外连接。2.根据权利要求1所述的方法,其中,所述第一数据集合包括与维值组合相关的行,其中,所述维值组合是从所述多个维选择的维值的组合,其中,所述第二数据集合包括用于对应于所述第一数据集合的所述行的所述维值组合的对应行,其中,所述对应行与所述维值组合相关,以及其中,所述生成的步骤包括以下步骤检查在用于维值组合的集合的所述第二数据集合中是否存在对应的行,其中,所述维值组合的集合相对于一维而言是稠密的;以及如果所述对应的行不存在,则创建所述行。3.根据权利要求2所述的方法,其中,所述检查步骤在一组嵌套的循环指令内执行,所述指令对于所述维值组合集合的每个维值组合执行一次循环。4.根据权利要求1所述的方法,其中,每个所述数据子集是单个数据行。5.根据权利要求1所述的方法,其中,每个所述数据子集是所述第一数据集合的分区,并且与从所述多个维的一个维中选择的单一维值相关。6.根据权利要求1所述的方法,其中,响应于检查数据操作语言语句来执行所述生成步骤。7.根据权利要求1所述的方法,其中,所述生成步骤包括使用第一处理器对第一子集执行所述外连接,以及使用不同于所述第一处理器的第二处理器对第二子集执行所述外连接。8.根据权利要求7所述的方法,其中,所述外连接是右外连接。9.根据权利要求8所述的方法,其中,所述外连接是左外连接。10.根据权利要求1所述的方法,其中,所述生成步骤由SQL引擎执行。11.根据权利要求1所述的方法,其中,所述生成步骤包括接收指示用于分区所述第一数据集合的分区键的表达式。12.根据权利要求1所述的方法,其中,所述外连接与包括布尔表达式的连接条件相关。13.根据权利要求1所述的方法,其中,所述第一数据集合包括行的第一集合;以及其中,所述外连接在所述行的第一集合和行的第二集合之间,以及所述生成步骤包括向多个进程中的每个进程发送所述行的第一集合的子集和所有所述行的第二集合。14.根据权利要求13所述的方法,其中,所述生成包括指定所述多个维的至少一个维;以及相对于所述指定的维散列分区所述第一数据集合。15.根据权利要求1所述的方法,进一步包括检测包括条件的结构,所述条件限制哪些维值组合被包括在所述第二数据集合中;以及响应于检测所述其它的结构,仅相对于所述第二数据集合被限制到的所述维值组合来执行所述操作。16.根据权利要求1所述的方法,其中,所述第一数据集合与多个维相关,所述第二集合与所述多个维相关,以及所述第二数据集合相对于所述多个维中的一个维更加稠密。17.一种由机器实现的方法包括基于与多个维相关的第一数据集合,生成相对于所述多个维的第一维比所述第一数据集合更稠密的第二数据集合;其中,执行所述生成,而不执行用于所述多个维的第二维的不同值的所述第一数据集合的排序的组合,通过执行所找到的所述不同值和所述第一维的维值集合的叉积,生成行的第一集合,以及为在所述行的第一集合中不存在行的所述行的第一集合添加对应于所述维值集合的维值的行。18.根据权利要求17所述的由机器实现的方法,其中,执行所述生成,而不执行所述第一数据集合的排序,其中,所述第一数据集合的所述排序被用于找到所述多个维的第二维的不同值。19.一...

【专利技术属性】
技术研发人员:阿比希纳夫古普塔盛磊桑卡尔苏布拉马尼亚恩内森福尔克特
申请(专利权)人:甲骨文国际公司
类型:发明
国别省市:US[美国]

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

1