修改分析流的制作方法
【專利說(shuō)明】
【背景技術(shù)】
[0001]存在很多用于處理分析流的執(zhí)行引擎。這些引擎可能只接受用高級(jí)編程語(yǔ)言,如特定的腳本語(yǔ)言(例如,PigLatin、結(jié)構(gòu)化查詢語(yǔ)言(SQL))或者某個(gè)流設(shè)計(jì)工具(例如,Pentaho數(shù)據(jù)集成(TOI)平臺(tái))的語(yǔ)言所表示的輸入流。而且,即使是支持相同的編程語(yǔ)言或者流設(shè)計(jì)工具的執(zhí)行引擎也可能會(huì)提供分析操作的不同實(shí)現(xiàn)等等。因此,一個(gè)引擎的輸入流可能與另一個(gè)引擎的輸入流不同,即使這兩個(gè)流是要達(dá)到相同的結(jié)果。出于這些考慮,修改分析流可能是具有挑戰(zhàn)性的并且耗時(shí)。而且,若要用一種通用的解決方案在各種各樣的經(jīng)常包括各種執(zhí)行引擎的分析環(huán)境中修改分析流同樣是困難的。
【附圖說(shuō)明】
[0002]下面的詳細(xì)描述參考附圖,其中:
[0003]圖1圖示出根據(jù)示例的修改分析流的方法。
[0004]圖2圖示出根據(jù)示例的修改流圖的方法。
[0005]圖3圖示出根據(jù)示例的示例流。
[0006]圖4圖示出根據(jù)示例的與示例流對(duì)應(yīng)的、具有解析記號(hào)的示例執(zhí)行計(jì)劃。
[0007]圖5圖示出根據(jù)示例的用于修改分析流的計(jì)算系統(tǒng)。
[0008]圖6圖示出根據(jù)示例的用于修改分析流的計(jì)算機(jī)可讀介質(zhì)。
[0009]圖7圖示出根據(jù)示例的使用所公開(kāi)的技術(shù)獲得的實(shí)驗(yàn)結(jié)果。
【具體實(shí)施方式】
[0010]如本文所描述的,本申請(qǐng)涉及對(duì)一個(gè)或多個(gè)數(shù)據(jù)集應(yīng)用一系列操作的分析數(shù)據(jù)處理引擎。此一系列操作在本文中被稱為“流”,因?yàn)榭梢詫⒎治鲇?jì)算建模成有向圖,在有向圖中,節(jié)點(diǎn)表示對(duì)數(shù)據(jù)集的操作,并且弧線表示操作之間的數(shù)據(jù)流。流通常用人們?nèi)菀拙帉?xiě)、閱讀和理解的高級(jí)語(yǔ)言來(lái)說(shuō)明。給定流的高級(jí)語(yǔ)言表示在本文中被稱為“程序”。例如,高級(jí)語(yǔ)言可以是特定的腳本語(yǔ)言(例如,PigLatin、結(jié)構(gòu)化查詢語(yǔ)言(SQL))或者某個(gè)流設(shè)計(jì)工具(例如,Pentaho數(shù)據(jù)集成(TOI)平臺(tái))的語(yǔ)言。在一些情況下,分析引擎是個(gè)黑盒子,即,其內(nèi)部的處理是隱藏的。為了修改要輸入到黑盒子執(zhí)行引擎中的程序,通常要編寫(xiě)一個(gè)附屬處理引擎,該附屬處理引擎是在執(zhí)行引擎和應(yīng)用程序中間用于創(chuàng)建程序的一個(gè)獨(dú)立的軟件模塊中間體。然后,這個(gè)附屬引擎可以用于從源程序創(chuàng)建一個(gè)新的、修改后的程序,其中新程序具有附加的特征。為此,附屬引擎通常需要理解程序的語(yǔ)義。編寫(xiě)這樣的附屬引擎可能會(huì)是困難的,因?yàn)樵诟鞣N各樣的分析環(huán)境中,有大量不同的執(zhí)行引擎,這些執(zhí)行引擎支持各種語(yǔ)言,并且其中許多執(zhí)行引擎具有特定于唯一引擎的操作實(shí)現(xiàn)。而且,經(jīng)??梢杂酶鞣N方式表達(dá)一個(gè)程序,以達(dá)到相同的結(jié)果。此外,翻譯程序會(huì)需要元數(shù)據(jù),而從黑盒子執(zhí)行引擎的外部看不見(jiàn)元數(shù)據(jù),因此需要進(jìn)行推斷,這通常容易出錯(cuò)。
[0011 ] 許多分析引擎支持“解釋計(jì)劃”命令,在給定源程序的情況下,“解釋計(jì)劃”命令會(huì)返回該程序的流圖。這個(gè)流圖可以被稱作“執(zhí)行計(jì)劃”或“解釋計(jì)劃”(在下文中,稱作“執(zhí)行計(jì)劃”)。所公開(kāi)的系統(tǒng)和方法通過(guò)解析執(zhí)行計(jì)劃而非解析特定于用戶的高級(jí)語(yǔ)言程序來(lái)均衡執(zhí)行計(jì)劃。這樣,可能任務(wù)更簡(jiǎn)單,并且信息更豐富,因?yàn)榉治鲆鎯?yōu)化器所做的一些實(shí)體性的選擇可能在執(zhí)行計(jì)劃中是有用的,而在原始的源程序(例如,實(shí)現(xiàn)算法、成本估計(jì)、資源利用)中會(huì)是不可用的。接著,附屬引擎可以修改流圖,以增加功能。然后,附屬引擎可以從修改后的流圖生成高級(jí)語(yǔ)言的新程序,以在黑盒子執(zhí)行引擎(或者某些其它引擎)中執(zhí)行。并且,可以利用優(yōu)化和分解,以便用更為有效的方式執(zhí)行流。
[0012]根據(jù)示例,實(shí)現(xiàn)本文所描述的原理的技術(shù)可以包括:接收與第一執(zhí)行引擎關(guān)聯(lián)的流??梢垣@得表示該流的流圖。例如,可以從第一執(zhí)行引擎請(qǐng)求執(zhí)行計(jì)劃。流圖可以用邏輯語(yǔ)言修改。例如,可以生成用邏輯語(yǔ)言表達(dá)的邏輯流圖??梢詮男薷暮蟮牧鲌D生成程序,以在執(zhí)行引擎上執(zhí)行。執(zhí)行引擎可以是第一執(zhí)行引擎,或者可以是不同的執(zhí)行引擎。而且,執(zhí)行引擎可以是一個(gè)以上執(zhí)行引擎,使得多個(gè)程序被生成。以下參考附圖描述附加示例、優(yōu)點(diǎn)、特征、修改等等。
[0013]圖1圖示出根據(jù)示例的修改分析流的方法。方法100可以通過(guò)計(jì)算設(shè)備、系統(tǒng)或者計(jì)算機(jī),例如計(jì)算系統(tǒng)500或者計(jì)算機(jī)600來(lái)執(zhí)行。用于實(shí)現(xiàn)方法100的計(jì)算機(jī)可讀指令可以存儲(chǔ)在計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)上。在本文中,這些存儲(chǔ)在介質(zhì)上的指令被稱作“模塊”,并且可以由計(jì)算機(jī)執(zhí)行。
[0014]方法100可以從110開(kāi)始,在110處,可以接收與第一執(zhí)行引擎關(guān)聯(lián)的流。該流可以包括例如實(shí)現(xiàn)類型、資源、存儲(chǔ)路徑等等的實(shí)現(xiàn)細(xì)節(jié),并且這些實(shí)現(xiàn)細(xì)節(jié)是特定于第一執(zhí)行引擎的。例如,取決于第一執(zhí)行引擎的類型,該流可以用高級(jí)編程語(yǔ)言來(lái)表達(dá),比如用特定的編程語(yǔ)言(例如,SQL、PigLatin)或者用如提取-變換-加載(ELT)流設(shè)計(jì)工具TOI這樣的特定流設(shè)計(jì)工具的語(yǔ)言來(lái)表達(dá)。
[0015]可以有一個(gè)以上的流。例如,可以接收混合流,該混合流可以包括針對(duì)不同執(zhí)行引擎的多個(gè)部分(即,子流)。例如,第一流可以用SQL編寫(xiě),而第二部分可以用PigLatin編寫(xiě)。另外,在支持相同編程語(yǔ)言的執(zhí)行引擎之間也可能有差異。例如,第一 SQL執(zhí)行引擎(例如,HP Vertica SQL引擎)的腳本可能與第二 SQL執(zhí)行引擎(例如,Oracle SQL引擎)不兼容(例如,可能不正確地運(yùn)行)。
[0016]在120處,可以獲得表示該流的流圖。該流圖可以是從第一執(zhí)行引擎獲得的執(zhí)行計(jì)劃。例如,可以用解釋計(jì)劃命令請(qǐng)求執(zhí)行計(jì)劃。如果有多個(gè)流,可以從每個(gè)流的相應(yīng)執(zhí)行引擎獲得該流的單獨(dú)執(zhí)行計(jì)劃。如果流用流設(shè)計(jì)工具的語(yǔ)言表達(dá),則可以從關(guān)聯(lián)的執(zhí)行引擎請(qǐng)求流說(shuō)明(例如,用XML表達(dá)的)。可以基于從引擎接收的流說(shuō)明而生成流圖。
[0017]在130處,可以使用邏輯語(yǔ)言修改流圖。圖2圖示出根據(jù)示例的修改流圖的方法200。
[0018]在210處,可以將流圖解析為多個(gè)要素。例如,解析器可以分析流圖,并針對(duì)流圖中每個(gè)操作符或者數(shù)據(jù)存儲(chǔ)獲取特定于引擎的信息。解析器可以輸出構(gòu)成流圖的節(jié)點(diǎn)(此處稱為“要素”)。因?yàn)榻馕銎魇翘囟ㄓ谝娴?,所以每個(gè)被支持的引擎可以有一個(gè)單獨(dú)的解析器。這樣的解析器可以作為插件被添加到系統(tǒng)中。
[0019]在220處,可以將解析后的流圖轉(zhuǎn)換為采用邏輯語(yǔ)言的第二流圖。該第二流圖在本文中被稱作“邏輯流圖”。該邏輯流圖可以通過(guò)將多個(gè)要素轉(zhuǎn)換為用邏輯語(yǔ)言表示的邏輯要素而生成。這里,示例的邏輯語(yǔ)言是xLM,該語(yǔ)言是由惠普公司的惠普實(shí)驗(yàn)室為分析流而研發(fā)的。但是,也可以用其他的邏輯語(yǔ)言。另外,可以使用字典來(lái)進(jìn)行這個(gè)轉(zhuǎn)換。字典可以包括邏輯語(yǔ)言和與第一實(shí)體流的至少一個(gè)執(zhí)行引擎相關(guān)的編程語(yǔ)言之間的映射。因此,字典224使得將特定于引擎的多個(gè)要素翻譯成引擎不可知的邏輯要素,邏輯要素構(gòu)成邏輯流。在2013年6月24日提交的PCT/US2013/047252中,進(jìn)一步詳細(xì)描述了字典和相關(guān)轉(zhuǎn)換,其內(nèi)容通過(guò)引用包含于此。
[0020]在230處,可以修改邏輯流圖。例如,可以以自動(dòng)的方式或者通過(guò)在GUI中的手動(dòng)操作的方式對(duì)邏輯流圖進(jìn)行各種優(yōu)化。因?yàn)楦鞣N原因,比如因?yàn)榱魇腔旌狭?、因?yàn)榱靼ú荒鼙涣鞯膱?zhí)行引擎所優(yōu)化的用戶定義的功能等等原因,在只處理流時(shí),可能不能進(jìn)行這樣的優(yōu)化。與此相關(guān),可以收集邏輯流圖的統(tǒng)計(jì)數(shù)據(jù)。另外,可以在圖形用戶界面(GUI)上以圖形的方式顯示邏輯流圖。這樣可以讓用戶更好地理解流(與其源對(duì)應(yīng)物相比),特別是在流是混合流的情況下。
[0021]而且,可以將邏輯流圖分解為子流,以利用特定的執(zhí)行環(huán)境。例如,執(zhí)行環(huán)境可以有各種各樣的執(zhí)行引擎,可以均衡這些執(zhí)行引擎來(lái)協(xié)作,以更有效的方式執(zhí)行整個(gè)流。在這方面,可以采用流執(zhí)行調(diào)度器。類似地,該邏輯流圖可以和與另一個(gè)流關(guān)聯(lián)的另一個(gè)邏輯流圖組合。該另一個(gè)流可以針對(duì)不同的執(zhí)行引擎,并且可能與第一執(zhí)行引擎不兼容。但是,表示在邏輯流圖中的是,這兩個(gè)流現(xiàn)在可以用連接器組合。
[0022]返回到圖1,在140處,可以從修改后的流圖(即,邏輯流圖)生成程序。該程序可以被生成以在執(zhí)行引擎上執(zhí)行。執(zhí)行引擎可以是第一執(zhí)行引擎,或者可以是不同的執(zhí)行引擎。另外,在將邏輯流圖分解為子流的情況下,可以有多個(gè)執(zhí)行引擎。這樣,可以將程序用適于每個(gè)它所用的執(zhí)行引擎的高級(jí)語(yǔ)言來(lái)表達(dá)。
[0023]這個(gè)轉(zhuǎn)換可以包括生成特定于引擎的邏輯流圖的中間版