專利名稱:多維分組運算符的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)據(jù)聚集和數(shù)據(jù)查詢,尤其涉及各種數(shù)據(jù)源上的多維查詢技木。
背景技術(shù):
語言集成查詢(LINQ)及其支持技術(shù)提供方便且聲明性的簡寫查詢句法(例如,類似SQL)以便于在編程語言(例如C#、Visual Bas1-等)內(nèi)部對查詢的指定。更具體而言,提供映射到較低層語言構(gòu)造或原語的查詢運算符,諸如方法和拉姆達表達式(lambda
expression)。提供用于各種運算(例如,過濾、投影、聯(lián)結(jié)、分組、排序......)族的查詢運
算符,并且查詢運算符可包括但不限于映射到實現(xiàn)這些名稱所表示的運算符的方法的“where” 和 “select” 運算符。通常,LINQ查詢被指定,并相對于諸如關(guān)系存儲和/或非關(guān)系存儲之類的任意數(shù)據(jù)集合執(zhí)行的。在關(guān)系存儲或數(shù)據(jù)庫中,根據(jù)ー個或多個表來結(jié)構(gòu)化數(shù)據(jù)。各個表是包括多個行和列的關(guān)系,其中列(被稱為屬性或維度)以及行(被稱為記錄)捕捉具體實體實例的數(shù)據(jù)。在非關(guān)系數(shù)據(jù)庫或鍵值存儲中,非關(guān)系數(shù)據(jù)庫或存儲表示將各唯一鍵映射成ー個或多個值的集合的簡單數(shù)據(jù)模型。更具體地,非關(guān)系數(shù)據(jù)庫存儲值和便于基于鍵來定位所存儲的值的索引。就關(guān)系數(shù)據(jù)源而言,常見實現(xiàn)通常包括業(yè)務(wù)信息(BI)分析。例如,在線分析處理(OLAP)數(shù)據(jù)源是ー種可接收并執(zhí)行查詢的關(guān)系數(shù)據(jù)源。OLAP數(shù)據(jù)源在基于多維能力和特性的業(yè)務(wù)信息(BI)分析中是有益的。關(guān)系數(shù)據(jù)庫且尤其是OLAP數(shù)據(jù)源通常包括對諸如“Rollup”和“Cube”等運算符進行分組,以便匯總各個表?!癛ollup”和“Cube”兩者都是“GroupBy”運算符的擴展,“GroupBy”運算符允許依據(jù)一個或多個列中的數(shù)據(jù)來對跨各記錄的數(shù)據(jù)進行分組,且該“GroupBy”運算符通常結(jié)合諸如“Sum (求和)”、“Count (計數(shù))”、“Min(最小化)”或“Max (最大化)”之類的聚集函數(shù)一起使用?!癛ollup”運算符跨指定的列或維度計算多個級別的任何潛在聚集,并且還計算總數(shù)之和。這樣的總數(shù)可被插入作為匯總行。“Cube”運算符計算所提供的分組列集合的所有組合的小計,且由此生成由“Rollup”運算符產(chǎn)生的所有值加上與附加組合相關(guān)聯(lián)的值。
發(fā)明內(nèi)容
下面呈現(xiàn)了簡化的發(fā)明內(nèi)容,以便提供對所公開主題的某些方面的基本概念。本發(fā)明內(nèi)容不是廣泛性的概觀。它并不_在標識關(guān)鍵/重要元素,也不_在劃定所要求保護主題的范圍。其唯一目的是以簡化形式呈現(xiàn)ー些概念,作為稍后呈現(xiàn)的更具體實施例的序言。簡言之,本發(fā)明一般涉及多維分組運算符。分組集合運算符可被擴展為查詢包括非關(guān)系數(shù)據(jù)源的任意數(shù)據(jù)源。分組集合運算符可被轉(zhuǎn)換成對象,且具體地被轉(zhuǎn)換成包括函數(shù)序列的多維語言集成查詢(LINQ)對象。通過將分組集合運算符轉(zhuǎn)換成帶有函數(shù)序列的LINQ對象,基本上可對任何數(shù)據(jù)源執(zhí)行多維查詢。具體而言,取決于所實現(xiàn)的分組集合運算符的類型(例如,復(fù)制“Rollup”功能的分組集合運算符,復(fù)制“Cube”功能的分組集合運算符等),分組集合運算符可被轉(zhuǎn)換成包括分別與基于每ー鍵選擇器的數(shù)據(jù)分組相對應(yīng)的函數(shù)的序列的LINQ對象。此外,LINQ對象可包括使得能夠高效獲取查詢結(jié)果的嵌套結(jié)構(gòu)。為實現(xiàn)上述及相關(guān)目的,在此結(jié)合以下描述和附圖描述了所要求保護主題的某些說明性方面。這些方面指示可實踐本主題的各種方式,它們均落在所要求保護主題的范圍之內(nèi)。當結(jié)合附圖閱讀以下詳細描述時,本發(fā)明的其他優(yōu)點和新穎特征將變得顯而易見。
圖1是查詢處理系統(tǒng)的框圖。圖2是代表性轉(zhuǎn)換組件的框圖。圖3是代表性轉(zhuǎn)換組件的框圖。圖4描繪代表性轉(zhuǎn)換組件的框圖。圖5描繪被優(yōu)化以包括嵌套結(jié)構(gòu)的示例性數(shù)據(jù)結(jié)構(gòu)。圖6是便于在任意數(shù)據(jù)存儲上執(zhí)行分組集合運算符的系統(tǒng)的框圖。圖7是ー種基于分組集合運算符和鍵選擇器來聚集數(shù)據(jù)的方法的流程圖。圖8是ー種生成多維LINQ對象的方法的流程圖。圖9是示出用于本公開各方面的合適操作環(huán)境的示意性框圖。
具體實施例方式常規(guī)上,關(guān)系數(shù)據(jù)庫分組運算符聚集數(shù)據(jù),以便產(chǎn)生表格形式的標量結(jié)果集。如上文討論的,“ Rollup”和“ Cube”是這種基于特定鍵選擇器來聚集數(shù)據(jù)的分組運算符,其中鍵選擇器引用關(guān)系數(shù)據(jù)庫中列的各行。這些分組運算符僅允許來自關(guān)系數(shù)據(jù)庫的數(shù)據(jù)的表格表示。鑒于“Rollup”和“Cube”的這ー表格數(shù)據(jù)表示限制,分組運算符的執(zhí)行導(dǎo)致過多的“NULL (空)”值,在“NULL”值中由于使用分組和聚集而不存在數(shù)據(jù)。然而,這些“NULL”值不被用于表示源中不存在數(shù)據(jù),而用于表示由于必需以“矩形”方式表示數(shù)據(jù)的限制而導(dǎo)致的結(jié)果。例如,“NULL”值在常規(guī)上被插入到參與分組的各列中不存在數(shù)據(jù)的地方(例如,“Rollup”和“Cube”可導(dǎo)致具有“NULL”指示符的不同行)。一般而言,諸如“Rollup”和“Cube”之類的常規(guī)運算符被限于關(guān)系數(shù)據(jù)庫(即關(guān)系數(shù)據(jù)表示)以及相關(guān)聯(lián)的表格表示,并且在結(jié)果中注入易混淆的“ NULL”值。下面的細節(jié)大體針對多維分組運算符。一般而言,查詢運算符且更具體的是分組集合運算符可在包括非關(guān)系源的任意數(shù)據(jù)源上運算,并且可基于鍵選擇器來聚集數(shù)據(jù)和實現(xiàn)多維結(jié)果。如上文討論的,常規(guī)的分組運算符是針對關(guān)系數(shù)據(jù)源而被指定的,且基于表格數(shù)據(jù)結(jié)構(gòu)在該關(guān)系數(shù)據(jù)源上執(zhí)行,在表格數(shù)據(jù)結(jié)構(gòu)中,鍵選擇器定義數(shù)據(jù)的分組(例如,聚集)以及作為對關(guān)系數(shù)據(jù)源中列的各行的引用。通過將分組集合運算符擴展為用任何鍵選擇器(例如,不僅僅是對列的各行的引用)來執(zhí)行,可以查詢?nèi)魏蔚娜我鈹?shù)據(jù)源(例如,關(guān)系數(shù)據(jù)源、非關(guān)系數(shù)據(jù)源等),并且可以產(chǎn)生多維結(jié)果。根據(jù)本發(fā)明的一方面,取決于所實現(xiàn)的分組集合運算符的類型(例如,“ Rollup”、“Cube”等),分組集合運算符可被轉(zhuǎn)換成包括分別與基于每ー鍵選擇器的數(shù)據(jù)分組相對應(yīng)的函數(shù)的序列的對象。作為示例而非限制,該對象可包括“GroupBy”函數(shù)調(diào)用的序列,以便返回針對特定數(shù)據(jù)源的一個或多個鍵選擇器的數(shù)據(jù)分組。這樣的分組集合運算符不限于關(guān)系數(shù)據(jù)源,并且可提供多維結(jié)果?,F(xiàn)在參考附圖更詳細地描述本發(fā)明的各個方面,在全部附圖中用相似的標記來指示相似或相應(yīng)的元素。然而應(yīng)該理解,附圖及其相關(guān)詳細描述不g在將所要求保護的主題限于所公開的具體形式。相反,其意圖是覆蓋落在所要求保護主題的精神和范圍之內(nèi)的所有修改、等價物和替換的方案。首先參考圖1,示出了查詢處理系統(tǒng)100。一般而言,查詢處理系統(tǒng)100可在基于鍵選擇器來聚集數(shù)據(jù)的查詢內(nèi)利用分組集合運算符。查詢處理系統(tǒng)100可被配置成采用分組集合運算符,該分組集合運算符針對包括非關(guān)系數(shù)據(jù)源以及關(guān)系數(shù)據(jù)源的任何的任意數(shù)據(jù)源來指定數(shù)據(jù)聚集。具體而言,查詢處理系統(tǒng)100包括轉(zhuǎn)換組件110,轉(zhuǎn)換組件110被配置成創(chuàng)建允許在任意數(shù)據(jù)源上處理并執(zhí)行多維查詢的對象(例如,在下文中更詳細地討論該對象)。作為示例而非限制,該對象可以是多維語言集成查詢(LINQ)對象,LINQ對象作為查詢的表示(例如,具有鍵選擇器的分組集合運算符)。可以理解,本發(fā)明可采用任何合適的編程語言多維對象,并且LINQ對象被用作ー個示例。多維對象可用編程語言來指定,編程語言諸如但不限于C# ,Visual Basic . Java* ,Ruby1i等。由此,此處對LINQ對象的引用還可包括任何合適的編程語言多維對象,且不g在將主題限于LINQ樣式對象。這樣的表示可例如通過LINQ提供者(未示出)被轉(zhuǎn)換成任何目標數(shù)據(jù)源。換言之,包括分組集合運算符的查詢提供便于跨多個不同數(shù)據(jù)源產(chǎn)生經(jīng)聚集的數(shù)據(jù)的統(tǒng)一表示。查詢處理系統(tǒng)100基于統(tǒng)ー表示(例如,對象、LINQ對象等)來實現(xiàn)數(shù)據(jù)聚集??舍槍Πǚ顷P(guān)系數(shù)據(jù)源和關(guān)系數(shù)據(jù)源等基本上任何數(shù)據(jù)源來采用該統(tǒng)ー表示。更具體地,統(tǒng)ー表示可被轉(zhuǎn)換或變換成查詢處理弓I擎等的數(shù)據(jù)源專用表示。這樣的引擎可針對統(tǒng)ー表示來執(zhí)行查詢,并且進而相應(yīng)地提供經(jīng)聚集的數(shù)據(jù)。具體而言,統(tǒng)ー表示可由在線分析處理(OLAP)引擎來處理,該OLAP引擎不僅將分組集合運算符擴展到任意數(shù)據(jù)而且擴展到業(yè)務(wù)信息(BI)數(shù)據(jù)源。換言之,查詢處理系統(tǒng)100可利用帶有分組集合運算符的OLAP樣式查詢,以便提供挖掘和/或鉆入任意數(shù)據(jù)源的精確數(shù)據(jù)。統(tǒng)ー表示便于查詢大的數(shù)據(jù)集合,且尤其是大的BI數(shù)據(jù)源集合。例如,在業(yè)務(wù)信息分析中,需要鉆入大的數(shù)據(jù)集合以供進一歩分析。這種類型的鉆入或向下鉆入數(shù)據(jù)是多維分組的使用所涉及之處。作為示例,用戶可在年度基礎(chǔ)上分析平均銷售數(shù)字。用戶可從所收集的統(tǒng)計數(shù)據(jù)中發(fā)現(xiàn)薄弱年度。用戶隨后可能想要向下鉆入每一年以及每ー產(chǎn)品分類的平均銷售,以便進一歩分析與該薄弱年度有關(guān)的數(shù)據(jù)和情況。這ー數(shù)據(jù)分析過程可不斷進行,從而探索并挖掘數(shù)據(jù)集合。圖2更詳細地示出代表性轉(zhuǎn)換組件110。轉(zhuǎn)換組件110被配置成生成允許分組集合運算符對任何的任意數(shù)據(jù)源執(zhí)行數(shù)據(jù)聚集的對象。換言之,關(guān)于轉(zhuǎn)換組件110的以下描述生成可由基本上任何引擎、查詢提供者等處理的統(tǒng)ー表示,以便產(chǎn)生來自任何數(shù)據(jù)源的查詢結(jié)果。轉(zhuǎn)換組件110還包括被配置成分析代碼的分析組件210。作為示例而非限制,代碼可包括查詢、分組集合運算符、鍵選擇器、目標數(shù)據(jù)源等。分析組件210可標識分組集合運算符以及至少ー個鍵選擇器。轉(zhuǎn)換組件210還包括被配置成生成對象的構(gòu)建組件220。該對象可以是任何基于LINQ的對象,然而g在包括以編程語言創(chuàng)建的任何面向?qū)ο蟮慕Y(jié)構(gòu)。具體地,該對象可以是多維語言集成查詢(LINQ)對象(也被稱為“LINQ對象”)。具體地,構(gòu)建組件220可基于分析組件210創(chuàng)建LINQ對象。一般地,任何面向?qū)ο蟮慕Y(jié)構(gòu)可被類型化和/或可包括函數(shù)序列,其中每ー函數(shù)對應(yīng)于該結(jié)構(gòu)表示的分組集合運算符所定義的數(shù)據(jù)分組??梢岳斫?,盡管本文討論了 LINQ對象,但本發(fā)明g在包括可表示分組集合運算符的任何面向?qū)ο蟮慕Y(jié)構(gòu)。具體而言,構(gòu)建組件220生成LINQ對象,以便包括與分析組件210所標識的分組集合運算符對應(yīng)的函數(shù)序列。該函數(shù)序列可定義多維LINQ對象,使得該序列中的各函數(shù)中的每ー個對應(yīng)于基于鍵選擇器或鍵選擇器的組合的數(shù)據(jù)分組。鍵選擇器通常是對關(guān)系數(shù)據(jù)源中的列的各行的引用。然而,根據(jù)本發(fā)明,此處利用的鍵選擇器可與定義哪些數(shù)據(jù)要鑒于分組集合運算符而被分組的特性的任何函數(shù)有夫。換言之,鍵選擇器可以是但不限于分組集合運算符可執(zhí)行以聚集數(shù)據(jù)的對列的各行的引用、函數(shù)等。因此,可針對分組集合運算符創(chuàng)建多維LINQ對象,使得多維LINQ對象表示多維查詢(例如,針對目標數(shù)據(jù)源的具有鍵選擇器的分組集合運算符)。此外,構(gòu)建組件220可包括該函數(shù)序列中的每ー函數(shù)的“GroupBy”函數(shù)。因此,針對分組集合運算符的LINQ對象內(nèi)的每一分組由“GroupBy”函數(shù) 來執(zhí)行,以便基于鍵選擇器的組合來聚集數(shù)據(jù)。這樣的技術(shù)允許對非關(guān)系數(shù)據(jù)(除了關(guān)系數(shù)據(jù)以外)執(zhí)行多維查詢,因為姆ー查詢被轉(zhuǎn)換成“GroupBy”函數(shù)的序列。具體地,“Rollup”運算符可產(chǎn)生結(jié)果集,該結(jié)果集表示由鍵選擇器所標識的所選列中的值的分層結(jié)構(gòu)的聚集。作為示例,該結(jié)果集可包括空分組、依據(jù)鍵選擇器i的分組、依據(jù)合成的鍵選擇器ェ和鍵選擇器2的分組,…,以及按合成的鍵選擇器ェ、鍵選擇器2、鍵選擇器N的分組,其中“N”為正整數(shù)。此外,“ Cube”運算符可產(chǎn)生結(jié)果集,該結(jié)果集表示由鍵選擇器所標識的所選列中的值的所有組合的聚集。作為示例,該結(jié)果集可包括所有組合,諸如空分組、依據(jù)按鍵選擇器的分組、依據(jù)鍵選擇器2的分組、 、依據(jù)鍵選擇器N的分組(其中,“N”為正整數(shù))、依據(jù)合成的鍵選擇器i和鍵選擇器2的分組、依據(jù)合成的鍵選擇器i和鍵
選擇器3的分組、 、依據(jù)合成的鍵選擇器H和鍵選擇器N的分組.....以及依據(jù)合成的鍵
選擇器1、鍵選擇器2、 、和鍵選擇器N的分組。例如,復(fù)制該“Rollup”的功能的分組集合運算符可以用鍵_選擇器和鍵_選擇器2來標識,其中對應(yīng)的LINQ對象將包括三個函數(shù)的序列。第一函數(shù)可表示作為整個目標數(shù)據(jù)源集合的數(shù)據(jù)分組;第二函數(shù)可表示基于鍵_選擇器i的數(shù)據(jù)分組,而第三函數(shù)可表示基于鍵_選擇器i和鍵_選擇器2的數(shù)據(jù)分組。至少部分基于利用了具有“GroupBy”函數(shù)的序列的LINQ對象的分組集合運算符,可以對非關(guān)系數(shù)據(jù)源執(zhí)行這樣的多維查詢(例如,這里是具有鍵_選擇器和鍵_選擇器2的“Rollup”)??梢岳斫?,分組集合運算符用基于該分組集合運算符的各屬性的函數(shù)的序列來規(guī)定針對各分組的鍵選擇器的組合。作為示例而非限制,分組集合運算符可復(fù)制“Rollup”運算符和/或“Cube”運算符的功能。上文討論了就具有引用多列的各行的鍵選擇器的關(guān)系數(shù)據(jù)源而言,“Rollup”和“Cube”的分組特性。對“Rollup”和“ Cube”的引用與分組數(shù)據(jù)的屬性有夫。可以理解,可以采用具有任何合適的鍵選擇器組合的任何合適的分組集合運算符(例如,“Rollup”、“CUbe”等)。換言之,本發(fā)明g在包括基于鍵選擇器來創(chuàng)建數(shù)據(jù)的分組的任何分組集合運算符,其中,分組集合運算符可利用鍵選擇器的任何組合來創(chuàng)建這樣的數(shù)據(jù)分組。另外,可以理解,可采用具有主題創(chuàng)新的、與“ GroupBy”運算符相當?shù)娜魏魏线m的函數(shù)。
圖3更詳細地示出表示性轉(zhuǎn)換組件110,轉(zhuǎn)換組件110構(gòu)建多維語言集成查詢(LINQ)對象以便對非關(guān)系數(shù)據(jù)存儲執(zhí)行。一般而言,轉(zhuǎn)換組件110被配置成采用對非關(guān)系數(shù)據(jù)執(zhí)行以便產(chǎn)生多維查詢結(jié)果的分組集合運算符。轉(zhuǎn)換組件110包括分析組件210,分析組件210被配置成從一部分代碼中標識分組集合運算符以及至少ー個鍵選擇器。具體地,分析組件210可包括鍵組件310。鍵組件310可從該代碼中收集標識出的鍵選擇器??梢岳斫?,鍵組件310可標識任何合適的鍵選擇器,諸如但不限于作為函數(shù)的鍵選擇器。分析組件210還包括序列組件320,序列組件320被配置成分析分組集合運算符,并且為該分組集合運算符定義ー數(shù)量的分組和/或為該數(shù)量的分組中的每ー個定義鍵選擇器的組合。換言之,鍵組件310和序列組件320可標識分組集合運算符的種類、以及通過該分組集合運算符來定義的數(shù)據(jù)分組。作為示例而非限制,分析組件210可為標識出的分組集合運算符查明以下各項基于鍵選擇器數(shù)量的分組數(shù)量;定義分組中的每一分組的鍵·選擇器的組合等。繼續(xù)圖3,構(gòu)建組件220可生成多維LINQ對象(也被稱為LINQ對象)330。如上所述,LINQ對象330可至少部分基于分析組件210來創(chuàng)建。具體而言,對分組集合運算符所創(chuàng)建的LINQ對象330包括函數(shù)序列,其中該序列中的各函數(shù)中的每ー個對應(yīng)于基于鍵選擇器或鍵選擇器的組合的數(shù)據(jù)分組。一般而言,LINQ對象330包括“GroupBy”函數(shù)的序列。因此,使用LINQ對象330將多維查詢轉(zhuǎn)換成各單維“GroupBy”函數(shù)的序列,使得每ー函數(shù)對應(yīng)于鍵選擇器或鍵選擇器的組合所定義的數(shù)據(jù)分組。此外,構(gòu)建組件220可包括該序列中的各函數(shù)中的每ー個的類型(例如,也被稱為基于鍵選擇器或鍵選擇器的組合的每ー數(shù)據(jù)分組)。具體而言,每ー函數(shù)的類型可對應(yīng)于數(shù)據(jù)分組的定義。例如,在具有針對復(fù)制“Cube”運算的分組集合運算符的兩個鍵選擇器的示例中,該序列中的函數(shù)的第一類型可以是“Empty (空)”,以示出數(shù)據(jù)分組是所有數(shù)據(jù);該序列中的函數(shù)的第二類型可以是“First (第一)”,以示出數(shù)據(jù)分組基于第一鍵選擇器;該序列中的函數(shù)的第三類型可以是“Second (第二),,’以示出數(shù)據(jù)分組基于第二鍵選擇器;而該序列中的函數(shù)的第四類型可以是“Both (兩者)”,以示出數(shù)據(jù)的分組基于第一鍵選擇器和第二鍵選擇器。例如,“ Cube”的分組集合運算符可以用鍵_選擇器1、鍵_選擇器2和鍵_選擇器3來標識,其中對應(yīng)的LINQ對象將包括八個“GroupBy”函數(shù)的序列。第一函數(shù)可表示作為整個目標數(shù)據(jù)源集合的數(shù)據(jù)分組;第二函數(shù)可表示基于鍵_選擇器i的數(shù)據(jù)分組,第三函數(shù)可表示基于鍵_選擇器2的數(shù)據(jù)分組,第四函數(shù)可表示基于鍵_選擇器3的數(shù)據(jù)分組,第五函數(shù)可表示基于鍵_選擇器i和鍵_選擇器2的數(shù)據(jù)分組,第六函數(shù)可表示基于鍵_選擇器!和鍵_選擇器3的數(shù)據(jù)分組,第七函數(shù)可表示基于鍵_選擇器2和鍵_選擇器3的數(shù)據(jù)分組,而第八函數(shù)可表示基于鍵_選擇器”鍵_選擇器2和鍵_選擇器3的數(shù)據(jù)分組。此外,各函數(shù)中的每ー個(例如,第一函數(shù)至第八函數(shù))可被類型化,以便標識各分組中的每ー個的基礎(chǔ)(例如,鍵選擇器組合的定義)。至少部分基于利用具有“GroupBy”函數(shù)的序列的LINQ對象的分組集合運算符,可對非關(guān)系數(shù)據(jù)源執(zhí)行這樣的多維查詢(例如,這里是采用鍵_選擇器ェ、鍵_選擇器2和鍵_選擇器2的“Cube”)。圖4更詳細地示出在LINQ對象內(nèi)創(chuàng)建嵌套結(jié)構(gòu)的代表性轉(zhuǎn)換組件110。轉(zhuǎn)換組件Iio被配置成擴展分組集合運算符(例如,“Rollup”、“Cube”等),以便至少部分基于多維LINQ對象330來在非關(guān)系數(shù)據(jù)上操作。LINQ對象330可以是使得任何引擎、查詢提供者、或數(shù)據(jù)源能夠執(zhí)行包括分組集合運算符的一部分代碼的統(tǒng)一表示。一般而言,可將LINQ對象330傳遞給目標源,以便以對應(yīng)于這一目標源的編程語言的特定編程語言來轉(zhuǎn)換。具體地,引擎、查詢提供者、或數(shù)據(jù)源可直接提供這樣的統(tǒng)ー表示(例如LINQ對象330)的轉(zhuǎn)換,以便該代碼被執(zhí)行。作為示例而非限制,LINQ對象可以用任何查詢提供者、OLAP引擎、MDX引擎、數(shù)據(jù)源外殼(下文中將詳細討論)等來統(tǒng)ー實現(xiàn),使得LINQ對象被轉(zhuǎn)換以供在相應(yīng)的目標數(shù)據(jù)源上執(zhí)行。轉(zhuǎn)換組件110還可包括優(yōu)化組件410,優(yōu)化組件410被配置成將嵌套結(jié)構(gòu)注入LINQ對象330以便高效地評估查詢(例如,使用鍵選擇器來調(diào)用目標數(shù)據(jù)源的分組集合運算符)。優(yōu)化組件410可以按降序?qū)?shù)據(jù)分組(基于鍵選擇器或鍵選擇器的組合、由“GroupBy”函數(shù)所表示的分組集合)進行排序,以使得更具體的分組能夠被首先計算。例如,按大小對分組進行排序(例如,更多的鍵選擇器導(dǎo)致更小的分組)允許小得多的分組被聚集成更大的分組(例如,消除了ー個鍵選擇器相當于聚集所有更小的子分組)。換言之,通過在較不具體的分組之前計算更具體的分組,可以獲取附加的計算得到的結(jié)果。這ー降序計算使得附加的計算得到的結(jié)果能夠被產(chǎn)生,這些附加的計算得到的結(jié)果稍后可被實現(xiàn)以供對將來查詢的懶散評估。作為對比,常規(guī)上,在關(guān)系世界中,一個查詢通常需要計算所有結(jié)果且不能是部分懶散的(例如,要求“Cube”將通過向下鉆入經(jīng)聚集的數(shù)據(jù)來返回所有潛在的分組(包括包含所有元素的分組)可受益于懶散評估(例如,不需要獲得大分組的細節(jié)))。換言之,降序計算產(chǎn)生特定分組的計算(基于分組集合運算符無意地計算更一般的分組),使得當查詢請求由于具體分組的計算而已被計算的分組時,該查詢請求的結(jié)果可被直接提供(例如,懶散評估將不計算除了要被計算以提供結(jié)果之外所需的任何附加計算)。作為示例而非限制,可以計算來自圖5的EMPID (雇員ID) 570的具體SALES (銷售)590分組,具體SALES 590分組將基于分組集合運算符計算更一般的來自圖5的分組EMPID 550和SALES560。對于請求來自更一般分組的數(shù)據(jù)的附加查詢,懶散評估可被實現(xiàn)以便直接提供結(jié)果,而無需基于該降序計算策略的附加計算。例如,分組集合運算符的LINQ對象可被構(gòu)建,以便包括基于鍵選擇器的各種合成分組,其中,各種合成分組的執(zhí)行可被有效地實行以便展示可嵌套在LINQ對象內(nèi)的附加結(jié)果。換言之,獲得針對特定合成分組的結(jié)果可產(chǎn)生包括在LINQ對象中的嵌套結(jié)構(gòu)內(nèi)的附加結(jié)果,以便在產(chǎn)生附加查詢的結(jié)果方面增加效率。如上文討論的,該基于降序來執(zhí)行分組以便為未來查詢搜集附加結(jié)果可被稱為“懶散評估”。轉(zhuǎn)向圖5,描繪了被優(yōu)化以包括嵌套結(jié)構(gòu)的示例性數(shù)據(jù)結(jié)構(gòu)500。數(shù)據(jù)結(jié)構(gòu)500包括列“EMPID (雇員ID)”、“YEAR (年度)”和“SALES (銷售)”。嵌套可使得這些列能夠被壓縮成更具體的包括EMPID 520和YEAR 530的結(jié)構(gòu)。數(shù)據(jù)結(jié)構(gòu)510示出基于鍵選擇器“EMPID”和“ YEAR”的分組集合運算符(這里是“Rollup”)。如圖所示,分組可被擴展以包括嵌套結(jié)構(gòu),使得 SALES 540 可被擴展成 EMPID 550 和 SALES 560,而 EMPID 550 和 SALES 560 可被進ー步擴展(例如,鉆入)成EMPID 570,YEAR 580和SALES 590。數(shù)據(jù)結(jié)構(gòu)500和510在下文更詳細地討論。關(guān)系數(shù)據(jù)庫通常包括允許依據(jù)ー個或多個列來聚集數(shù)據(jù)的分組運算符。另外,關(guān)系數(shù)據(jù)庫提供以ー個語句來創(chuàng)建多個“分組集合”的聯(lián)合的能力。這樣的運算符缺少關(guān)系數(shù)據(jù)庫的域以外的更一般查詢,且可被泛化以便適用于更多種類的數(shù)據(jù)。另外,關(guān)系數(shù)據(jù)庫中分組集合的表達性由于需要以“表格形狀”呈現(xiàn)數(shù)據(jù)而被限制。如本發(fā)明中所描述的,這可使用對象圖來避免。用于使用各種策略來分組數(shù)據(jù)的查詢運算符可被建立。這些策略中的最一般的策略允許分組集合的制定;用于選擇分組集合的更具體的策略包括“Rollup”和“Cube”。所返回的分組對象準許使用面向?qū)ο蟮募夹g(shù)來進行簡單分析,包括訪問者模型。本發(fā)明允許以下各項以查詢綜合句法(例如,其參數(shù)返回等于指定鍵的數(shù)目的元數(shù)對象)制定分組軸(例如,復(fù)制“Rollup”或“Cube”的分組集合運算符);將多維分組轉(zhuǎn)換成正則分組;將合成分組表示成對象圖;對分組的靜態(tài)類型化;生成表示合成分組的類型,以及相關(guān)聯(lián)的運算符;使用LINQ的在線分析處理(OLAP)樣式查詢;以及將多維分組運算符轉(zhuǎn)換成在線分析處理(OLAP)引擎(例如,可將OLAP引擎針對多維表達式(MDX)、電子表格應(yīng)用分析引擎等)。具體而言,以查詢綜合句法(類似SQL的句法美化)來制定分組軸可以指以綜合句法在任一任何數(shù)據(jù)源上利用分組集合運算符。此外,分組集合運算符可針對本機句法來指定(例如,用點來標記與運算符對應(yīng)的方法)。 LINQ中典型的分組構(gòu)建涉及單個鍵選擇器,并且生成分組序列,分組中的每ー個具有不同的鍵。姆ー個這樣的分組本身包括序列,該序列包含該組的元素。作為示例,可枚舉序列(例如,一系列基于拉取的數(shù)據(jù))可被討論,但是可以理解所有東西也適用于可觀察序列(例如,基于推送的數(shù)據(jù))。以下是典型的GroupBy運算符的簽名static IEnumerable<IGrouping<K, T>>GroupBy<T, K> (thisIEnumerabIe<T^source, Func<T,K>keySelector);消耗“GroupBy”操作的結(jié)果使用IGrouping對象上的鍵屬性,IGrouping對象被返回以分析包括當前組的鍵。由于姆ー IGrouping<K, T>也是IEnumerabIe〈T>,因此該組的元素可按以下來迭代
var res = from p in products group p by p. Category;
foreach (var g in res)
{
Console . WriteLine {''Products in " + g . Key. Name) ; // 這里,g. Key
將是"Category (類型)”,K名稱屬性返回該名稱foreach (var p in g)
Console . WriteLine (" + p.Name) ; // 分組包素,這里為產(chǎn)iWj。
}分組常常結(jié)合聚集來使用,以便計算關(guān)于每ー個別分組的統(tǒng)計數(shù)據(jù)。以下示出了ー個示例,其中從產(chǎn)品目錄中計算每組的平均價格var res=from p in products group p by p. Category intog selectnew {Category=g. Key, Avg=g. Average (p=>p. Price)};在相當?shù)末`些分析場景中,一個人想要向下鉆入大的數(shù)據(jù)集合,以便進一步對其分析。這是多維分組的使用開始產(chǎn)生的地方。例如,ー個人可能想要在年度基礎(chǔ)上查看平均銷售數(shù)字。從所收集的統(tǒng)計數(shù)據(jù)中發(fā)現(xiàn)薄弱年度,下ー問題可能是要向下鉆入每一年度和每ー產(chǎn)品類別的平均銷售。這ー數(shù)據(jù)分析過程可不斷進行,從而探索并挖掘數(shù)據(jù)集合。如所討論的,關(guān)系數(shù)據(jù)庫已經(jīng)提供了自動化這一重復(fù)分組處理的方式,其中計算得到的分組的鍵以若干方式變化。選擇鍵的組合以便分組在下文中可被稱為“策略”。兩種策略是常見的,如下所解釋的對鍵集合k1,,…,kn(其中"n”是正整數(shù))的ROLLUP涉及:具有空鍵(SP,數(shù)據(jù)本身)的分組依據(jù)Ic1進行分組依據(jù)合成鍵k,、進行分組 …依據(jù)合成鍵ki,k2,…,、進行分組對鍵集合Ic1, ,kn的(其中"n ”是正整數(shù))CUBE涉及具有空鍵(SP,數(shù)據(jù)本身)的分組依據(jù)Ic1進行分組依據(jù)k2進行分組…依據(jù)、進行分組依據(jù)合成鍵Ic1,k2進行分組依據(jù)合成鍵Ic1,k3進行分組…依據(jù)合成鍵Iv1,kn進行分組…依據(jù)合成鍵ki,k2,…,、進行分組換言之,“Rollup”運算符在給定鍵列表的情況下建立増量式分組。對于“n”個鍵,建立總共“n”個分組,“n”個分組以單個鍵分組開始、一直到基于所有鍵的分組?!癈ube”根據(jù)該給定列表創(chuàng)建所有可能的唯一鍵組合(例如,具有ー個鍵的分組,具有兩個鍵的分組等等)。
兩個運算符的泛化是GROUPING SETS (分組集合)的概念,其中用戶指定用于分組的鍵的集合。例如,鍵k”…,kn的“ Rollup”對應(yīng)于GROUPING SETS((),(り,Qc1,k2),…,(k” k2,...,kn))在創(chuàng)建包括多維分組策略的構(gòu)成分組之后,對結(jié)果進行聯(lián)合并且作為整體來呈現(xiàn)。這是常規(guī)技術(shù)開始發(fā)生問題的地方,因為關(guān)系模型僅允許數(shù)據(jù)的表格表示。作為結(jié)果,ー個人面臨過多的“NULL (空)”值,這些NULL值最終出現(xiàn)在由于分組和聚集的使用而不呈現(xiàn)數(shù)據(jù)的地方。這是不幸的,因為“Null”的含義不僅僅被用于表示該源中不再存在數(shù)據(jù)。以下示出一個示例SELECT Empld, Year, SUM(Sales)AS SalesFROM SalesGROUP BY ROLLUP (Empld, Year)
權(quán)利要求
1.一種便于數(shù)據(jù)聚集的方法,包括 利用被配置成執(zhí)行存儲在存儲器中的計算機可執(zhí)行指令的至少一個處理器來執(zhí)行以下動作 基于鍵選擇器在非關(guān)系數(shù)據(jù)源上執(zhí)行分組集合運算符。
2.如權(quán)利要求1所述的方法,其特征在于,還包括基于所述分組集合運算符和所述鍵選擇器來生成多維對象。
3.如權(quán)利要求2所述的方法,其特征在于,所述鍵選擇器是函數(shù)。
4.如權(quán)利要求2所述的方法,其特征在于,所述多維對象包括基于至少一個鍵選擇器或鍵選擇器的組合來對數(shù)據(jù)進行分組的函數(shù)。
5.如權(quán)利要求4所述的方法,其特征在于,所述函數(shù)是“GroupBy”函數(shù)。
6.如權(quán)利要求5所述的方法,其特征在于,還包括 為所述分組集合運算符標識一定數(shù)量的分組; 為所標識數(shù)量的分組中的每一分組標識鍵選擇器的組合;以及 基于所述分組數(shù)量以及對于與所述分組集合運算符對應(yīng)的所述數(shù)量的分組中每一分組的鍵選擇器組合,創(chuàng)建“GroupBy”函數(shù)。
7.如權(quán)利要求4所述的方法,其特征在于,還包括將類型插入所述函數(shù),所述函數(shù)引用對所述數(shù)據(jù)進行分組的鍵選擇器的組合。
8.如權(quán)利要求4所述的方法,其特征在于,還包括將嵌套結(jié)構(gòu)注入所述多維對象,所述嵌套結(jié)構(gòu)包括在所述非關(guān)系數(shù)據(jù)源上執(zhí)行所述分組集合運算符的結(jié)果。
9.如權(quán)利要求8所述的方法,其特征在于,還包括基于所述嵌套結(jié)構(gòu)使用附加鍵選擇器來產(chǎn)生所述分組集合運算符的結(jié)果。
10.一種方便查詢數(shù)據(jù)的系統(tǒng),包括 耦合到存儲器的處理器,所述處理器被配置成執(zhí)行以下存儲在所述存儲器中的計算機可執(zhí)行組件 第一組件,被配置成利用包括鍵選擇器和分組集合運算符的多維對象,來在非關(guān)系數(shù)據(jù)源上執(zhí)行所述分組集合運算符。
全文摘要
本發(fā)明公開了多維分組運算符。諸如語言集成查詢(LINQ)對象之類的多維對象可基于分組集合運算符以及零個或多個鍵選擇器而被生成??衫迷搶ο髞碓诜顷P(guān)系數(shù)據(jù)源上查詢。該對象可包括與同該分組集合運算符有關(guān)的每一分組對應(yīng)的函數(shù)序列,以便提供多維分組表示。此外,該對象包括供優(yōu)化執(zhí)行該分組集合運算符的嵌套結(jié)構(gòu)。
文檔編號G06F17/30GK103020150SQ20121048005
公開日2013年4月3日 申請日期2012年11月22日 優(yōu)先權(quán)日2011年11月22日
發(fā)明者B·德斯梅特, H·J·M·梅杰, J·W·戴爾 申請人:微軟公司