本發(fā)明涉及計(jì)算機(jī)領(lǐng)域,具體而言,涉及一種生成描述信息的方法及裝置。
背景技術(shù):
目前,隨著大數(shù)據(jù)技術(shù)的迅猛發(fā)展,如何便于業(yè)務(wù)人員快速分析數(shù)據(jù),是大數(shù)據(jù)應(yīng)用需要解決的關(guān)鍵問(wèn)題。
業(yè)務(wù)人員經(jīng)常需要基于基礎(chǔ)數(shù)據(jù)進(jìn)行各種統(tǒng)計(jì)分析,該過(guò)程通常需要編寫(xiě)sql語(yǔ)句在數(shù)據(jù)庫(kù)中運(yùn)行。例如:對(duì)于基于多張數(shù)據(jù)表的統(tǒng)計(jì)分析,需要采用人工方式通過(guò)數(shù)據(jù)表的元信息來(lái)獲取數(shù)據(jù)表之間的連接關(guān)系。假設(shè)第一張數(shù)據(jù)表包含有3個(gè)字段,其分別為:設(shè)備標(biāo)識(shí)(id)、日期以及設(shè)備狀態(tài);第二張數(shù)據(jù)表包含有2個(gè)字段,其分別為:設(shè)備id和公司id;第三張數(shù)據(jù)表包含有2個(gè)字段,其分別為:公司id和公司名稱,那么通過(guò)數(shù)據(jù)表的元信息可以獲知,第一張數(shù)據(jù)表和第二張數(shù)據(jù)表可以通過(guò)“設(shè)備id”加以連接,第二張數(shù)據(jù)表和第三張數(shù)據(jù)表可以通過(guò)“公司id”加以連接,通過(guò)連接這三張數(shù)據(jù)表,可以分析出每個(gè)公司在預(yù)設(shè)時(shí)間段內(nèi)(例如:最近1個(gè)月)發(fā)生的特定事件(例如:設(shè)備故障率)。
對(duì)于casebycase的統(tǒng)計(jì)分析,表連接語(yǔ)句可以根據(jù)特定案例來(lái)編寫(xiě),即業(yè)務(wù)人員需要為每個(gè)案例分別定制不同的sql語(yǔ)句。然而,正是由于casebycase的統(tǒng)計(jì)分析方式需要針對(duì)每個(gè)案例分別編寫(xiě)sql語(yǔ)句,由此易造成此種操作方式不僅工作效率較低,而且發(fā)生錯(cuò)誤的概率較高。
因此,相關(guān)技術(shù)中并沒(méi)有提供在給定若干張數(shù)據(jù)表且可獲知數(shù)據(jù)表之間的關(guān)系的情況下,如何通過(guò)采用自動(dòng)生成合法的表連接sql語(yǔ)句的實(shí)現(xiàn)方式來(lái)完成數(shù)據(jù)分析。
針對(duì)上述的問(wèn)題,目前尚未提出有效的解決方案。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明實(shí)施例提供了一種生成描述信息的方法及裝置,以至少解決相關(guān)技術(shù)中無(wú)法在給定若干張數(shù)據(jù)表且可獲知數(shù)據(jù)表之間的關(guān)系的情況下,通過(guò)采用自動(dòng)生成合法的表連接sql語(yǔ)句的實(shí)現(xiàn)方式來(lái)完成數(shù)據(jù)分析的技術(shù)問(wèn)題。
根據(jù)本發(fā)明實(shí)施例的一個(gè)方面,提供了一種生成描述信息的方法,包括:獲取多張數(shù)據(jù)表中每張數(shù)據(jù)表所包含的字段信息;根據(jù)字段信息確定多張數(shù)據(jù)表相互間的關(guān)聯(lián)關(guān)系;利用多張數(shù)據(jù)表相互間的關(guān)聯(lián)關(guān)系生成描述信息,其中,描述信息用于記錄多張數(shù)據(jù)表相互間的連接次序以及相鄰數(shù)據(jù)表之間所使用的連接條件。
可選地,根據(jù)字段信息確定多張數(shù)據(jù)表相互間的關(guān)聯(lián)關(guān)系包括:選取步驟:從多張數(shù)據(jù)表中選取任意一張待遍歷的數(shù)據(jù)表;查找步驟:查找與選取的數(shù)據(jù)表所包含的字段信息中具有一個(gè)或多個(gè)相同字段的數(shù)據(jù)表,并將查找到的數(shù)據(jù)表設(shè)置為選取的數(shù)據(jù)表的待連接數(shù)據(jù)表;在選取的數(shù)據(jù)表與待連接數(shù)據(jù)表之間建立關(guān)聯(lián)關(guān)系;返回選取步驟,直至多張數(shù)據(jù)表被全部遍歷。
可選地,利用多張數(shù)據(jù)表相互間的關(guān)聯(lián)關(guān)系生成描述信息包括:按照多張數(shù)據(jù)表相互間的關(guān)聯(lián)關(guān)系從初始遍歷的數(shù)據(jù)表開(kāi)始依次獲取下一個(gè)遍歷的數(shù)據(jù)表的標(biāo)識(shí)信息,與下一個(gè)遍歷的數(shù)據(jù)表相鄰接的數(shù)據(jù)表的標(biāo)識(shí)信息以及下一個(gè)遍歷的數(shù)據(jù)表與鄰接的數(shù)據(jù)表之間的連接條件,其中,鄰接的數(shù)據(jù)表為已經(jīng)遍歷過(guò)的數(shù)據(jù)表;采用獲取到的下一個(gè)遍歷的數(shù)據(jù)表的標(biāo)識(shí)信息,鄰接的數(shù)據(jù)表的標(biāo)識(shí)信息以及下一個(gè)遍歷的數(shù)據(jù)表與鄰接的數(shù)據(jù)表之間的連接條件生成描述信息。
可選地,采用獲取到的下一個(gè)遍歷的數(shù)據(jù)表的標(biāo)識(shí)信息,鄰接的數(shù)據(jù)表的標(biāo)識(shí)信息以及下一個(gè)遍歷的數(shù)據(jù)表與鄰接的數(shù)據(jù)表之間的連接條件生成描述信息包括:先根據(jù)下一個(gè)遍歷的數(shù)據(jù)表的標(biāo)識(shí)信息和鄰接的數(shù)據(jù)表的標(biāo)識(shí)信息建立下一個(gè)遍歷的數(shù)據(jù)表與鄰接的數(shù)據(jù)表之間的關(guān)聯(lián)關(guān)系后,再記錄下一個(gè)遍歷的數(shù)據(jù)表與鄰接的數(shù)據(jù)表之間的連接條件,分別生成與已經(jīng)遍歷的數(shù)據(jù)表對(duì)應(yīng)的分段連接信息;聯(lián)合全部分段連接信息,生成描述信息。
可選地,如果下一個(gè)遍歷的數(shù)據(jù)表同時(shí)與多個(gè)數(shù)據(jù)表相鄰接和/或下一個(gè)遍歷的數(shù)據(jù)表與部分相鄰接的數(shù)據(jù)表存在多個(gè)相同的字段時(shí),則記錄的下一個(gè)遍歷的數(shù)據(jù)表與鄰接的數(shù)據(jù)表之間的連接條件是由下一個(gè)遍歷的數(shù)據(jù)表與多個(gè)數(shù)據(jù)表相鄰接所產(chǎn)生的連接條件和/或由下一個(gè)遍歷的數(shù)據(jù)表與部分相鄰接的數(shù)據(jù)表存在多個(gè)相同的字段所產(chǎn)生的連接條件的并集。
根據(jù)本發(fā)明實(shí)施例的另一方面,還提供了一種生成描述信息的裝置,包括:獲取模塊,用于獲取多張數(shù)據(jù)表中每張數(shù)據(jù)表所包含的字段信息;確定模塊,用于根據(jù)字段信息確定多張數(shù)據(jù)表相互間的關(guān)聯(lián)關(guān)系;生成模塊,用于利用多張數(shù)據(jù)表相互間的關(guān)聯(lián)關(guān)系生成描述信息,其中,描述信息用于記錄多張數(shù)據(jù)表相互間的連接次序以及相鄰數(shù)據(jù)表之間所使用的連接條件。
可選地,確定模塊包括:選取單元,用于從多張數(shù)據(jù)表中選取任意一張待遍歷的數(shù)據(jù)表;查找單元,用于查找與選取的數(shù)據(jù)表所包含的字段信息中具有一個(gè)或多個(gè)相同字段的數(shù)據(jù)表,并將查找到的數(shù)據(jù)表設(shè)置為選取的數(shù)據(jù)表的待連接數(shù)據(jù)表;建立單元,用于在選取的數(shù)據(jù)表與待連接數(shù)據(jù)表之間建立關(guān)聯(lián)關(guān)系;返回選取單元,直至多張數(shù)據(jù)表被全部遍歷。
可選地,生成模塊包括:獲取單元,用于按照多張數(shù)據(jù)表相互間的關(guān)聯(lián)關(guān)系從初始遍歷的數(shù)據(jù)表開(kāi)始依次獲取下一個(gè)遍歷的數(shù)據(jù)表的標(biāo)識(shí)信息,與下一個(gè)遍歷的數(shù)據(jù)表相鄰接的數(shù)據(jù)表的標(biāo)識(shí)信息以及下一個(gè)遍歷的數(shù)據(jù)表與鄰接的數(shù)據(jù)表之間的連接條件,其中,鄰接的數(shù)據(jù)表為已經(jīng)遍歷過(guò)的數(shù)據(jù)表;生成單元,用于采用獲取到的下一個(gè)遍歷的數(shù)據(jù)表的標(biāo)識(shí)信息,鄰接的數(shù)據(jù)表的標(biāo)識(shí)信息以及下一個(gè)遍歷的數(shù)據(jù)表與鄰接的數(shù)據(jù)表之間的連接條件生成描述信息。
可選地,生成單元包括:第一生成子單元,用于先根據(jù)下一個(gè)遍歷的數(shù)據(jù)表的標(biāo)識(shí)信息和鄰接的數(shù)據(jù)表的標(biāo)識(shí)信息建立下一個(gè)遍歷的數(shù)據(jù)表與鄰接的數(shù)據(jù)表之間的關(guān)聯(lián)關(guān)系后,再記錄下一個(gè)遍歷的數(shù)據(jù)表與鄰接的數(shù)據(jù)表之間的連接條件,分別生成與已經(jīng)遍歷的數(shù)據(jù)表對(duì)應(yīng)的分段連接信息;第二生成子單元,用于聯(lián)合全部分段連接信息,生成描述信息。
可選地,第一生成子單元,用于在下一個(gè)遍歷的數(shù)據(jù)表同時(shí)與多個(gè)數(shù)據(jù)表相鄰接和/或下一個(gè)遍歷的數(shù)據(jù)表與部分相鄰接的數(shù)據(jù)表存在多個(gè)相同的字段時(shí),則記錄的下一個(gè)遍歷的數(shù)據(jù)表與鄰接的數(shù)據(jù)表之間的連接條件是由下一個(gè)遍歷的數(shù)據(jù)表與多個(gè)數(shù)據(jù)表相鄰接所產(chǎn)生的連接條件和/或由下一個(gè)遍歷的數(shù)據(jù)表與部分相鄰接的數(shù)據(jù)表存在多個(gè)相同的字段所產(chǎn)生的連接條件的并集。
在本發(fā)明實(shí)施例中,采用通過(guò)獲取多張數(shù)據(jù)表中每張數(shù)據(jù)表所包含的字段信息并根據(jù)字段信息確定多張數(shù)據(jù)表相互間的關(guān)聯(lián)關(guān)系的方式,利用多張數(shù)據(jù)表相互間的關(guān)聯(lián)關(guān)系生成用于記錄多張數(shù)據(jù)表相互間的連接次序以及相鄰數(shù)據(jù)表之間所使用的連接條件的描述信息,達(dá)到了不需要人工參與便可以自動(dòng)生成上述描述信息(例如:合法的表連接sql語(yǔ)句)來(lái)完成數(shù)據(jù)分析的目的,從而實(shí)現(xiàn)了通過(guò)自動(dòng)生成數(shù)據(jù)表之間相互關(guān)系的描述信息不僅提高了數(shù)據(jù)分析效率而且還提升了數(shù)據(jù)分析結(jié)果準(zhǔn)確性的技術(shù)效果,進(jìn)而解決了相關(guān)技術(shù)中無(wú)法在給定若干張數(shù)據(jù)表且可獲知數(shù)據(jù)表之間的關(guān)系的情況下,通過(guò)采用自動(dòng)生成合法的表連接sql語(yǔ)句的實(shí)現(xiàn)方式來(lái)完成數(shù)據(jù)分析的技術(shù)問(wèn)題。
附圖說(shuō)明
此處所說(shuō)明的附圖用來(lái)提供對(duì)本發(fā)明的進(jìn)一步理解,構(gòu)成本申請(qǐng)的一部分,本發(fā)明的示意性實(shí)施例及其說(shuō)明用于解釋本發(fā)明,并不構(gòu)成對(duì)本發(fā)明的不當(dāng)限定。在附圖中:
圖1是本發(fā)明實(shí)施例的一種生成描述信息的方法的計(jì)算機(jī)終端的硬件結(jié)構(gòu)框圖;
圖2是根據(jù)本發(fā)明實(shí)施例的生成描述信息的方法的流程圖;
圖3是根據(jù)本發(fā)明優(yōu)選實(shí)施例的在多張數(shù)據(jù)表的相互間建立完整的拓?fù)浣Y(jié)構(gòu)的示意圖;
圖4是根據(jù)本發(fā)明優(yōu)選實(shí)施例的生成描述信息的方法的示意圖;
圖5是根據(jù)本發(fā)明實(shí)施例的生成描述信息的裝置的結(jié)構(gòu)框圖;
圖6是根據(jù)本發(fā)明優(yōu)選實(shí)施例的生成描述信息的裝置的結(jié)構(gòu)框圖;
圖7是根據(jù)本發(fā)明實(shí)施例的一種計(jì)算機(jī)終端的結(jié)構(gòu)框圖。
具體實(shí)施方式
為了使本技術(shù)領(lǐng)域的人員更好地理解本發(fā)明方案,下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分的實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都應(yīng)當(dāng)屬于本發(fā)明保護(hù)的范圍。
需要說(shuō)明的是,本發(fā)明的說(shuō)明書(shū)和權(quán)利要求書(shū)及上述附圖中的術(shù)語(yǔ)“第一”、“第二”等是用于區(qū)別類似的對(duì)象,而不必用于描述特定的順序或先后次序。應(yīng)該理解這樣使用的數(shù)據(jù)在適當(dāng)情況下可以互換,以便這里描述的本發(fā)明的實(shí)施例能夠以除了在這里圖示或描述的那些以外的順序?qū)嵤?。此外,術(shù)語(yǔ)“包括”和“具有”以及他們的任何變形,意圖在于覆蓋不排他的包含,例如,包含了一系列步驟或單元的過(guò)程、方法、系統(tǒng)、產(chǎn)品或設(shè)備不必限于清楚地列出的那些步驟或單元,而是可包括沒(méi)有清楚地列出的或?qū)τ谶@些過(guò)程、方法、產(chǎn)品或設(shè)備固有的其它步驟或單元。
實(shí)施例1
根據(jù)本發(fā)明實(shí)施例,還提供了一種生成描述信息的方法實(shí)施例,需要說(shuō)明的是,在附圖的流程圖示出的步驟可以在諸如一組計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)系統(tǒng)中執(zhí)行, 并且,雖然在流程圖中示出了邏輯順序,但是在某些情況下,可以以不同于此處的順序執(zhí)行所示出或描述的步驟。
本申請(qǐng)實(shí)施例一所提供的方法實(shí)施例可以在移動(dòng)終端、計(jì)算機(jī)終端或者類似的運(yùn)算裝置中執(zhí)行。以運(yùn)行在計(jì)算機(jī)終端上為例,圖1是本發(fā)明實(shí)施例的一種生成描述信息的方法的計(jì)算機(jī)終端的硬件結(jié)構(gòu)框圖。如圖1所示,計(jì)算機(jī)終端10可以包括一個(gè)或多個(gè)(圖中僅示出一個(gè))處理器102(處理器102可以包括但不限于微處理器mcu或可編程邏輯器件fpga等的處理裝置)、用于存儲(chǔ)數(shù)據(jù)的存儲(chǔ)器104、以及用于通信功能的傳輸裝置106。本領(lǐng)域普通技術(shù)人員可以理解,圖1所示的結(jié)構(gòu)僅為示意,其并不對(duì)上述電子裝置的結(jié)構(gòu)造成限定。例如,計(jì)算機(jī)終端10還可包括比圖1中所示更多或者更少的組件,或者具有與圖1所示不同的配置。
存儲(chǔ)器104可用于存儲(chǔ)應(yīng)用軟件的軟件程序以及模塊,如本發(fā)明實(shí)施例中的生成描述信息的方法對(duì)應(yīng)的程序指令/模塊,處理器102通過(guò)運(yùn)行存儲(chǔ)在存儲(chǔ)器104內(nèi)的軟件程序以及模塊,從而執(zhí)行各種功能應(yīng)用以及數(shù)據(jù)處理,即實(shí)現(xiàn)上述的生成描述信息的方法。存儲(chǔ)器104可包括高速隨機(jī)存儲(chǔ)器,還可包括非易失性存儲(chǔ)器,如一個(gè)或者多個(gè)磁性存儲(chǔ)裝置、閃存、或者其他非易失性固態(tài)存儲(chǔ)器。在一些實(shí)例中,存儲(chǔ)器104可進(jìn)一步包括相對(duì)于處理器102遠(yuǎn)程設(shè)置的存儲(chǔ)器,這些遠(yuǎn)程存儲(chǔ)器可以通過(guò)網(wǎng)絡(luò)連接至計(jì)算機(jī)終端10。上述網(wǎng)絡(luò)的實(shí)例包括但不限于互聯(lián)網(wǎng)、企業(yè)內(nèi)部網(wǎng)、局域網(wǎng)、移動(dòng)通信網(wǎng)及其組合。
傳輸裝置106用于經(jīng)由一個(gè)網(wǎng)絡(luò)接收或者發(fā)送數(shù)據(jù)。上述的網(wǎng)絡(luò)具體實(shí)例可包括計(jì)算機(jī)終端10的通信供應(yīng)商提供的無(wú)線網(wǎng)絡(luò)。在一個(gè)實(shí)例中,傳輸裝置106包括一個(gè)網(wǎng)絡(luò)適配器(networkinterfacecontroller,nic),其可通過(guò)基站與其他網(wǎng)絡(luò)設(shè)備相連從而可與互聯(lián)網(wǎng)進(jìn)行通訊。在一個(gè)實(shí)例中,傳輸裝置106可以為射頻(radiofrequency,rf)模塊,其用于通過(guò)無(wú)線方式與互聯(lián)網(wǎng)進(jìn)行通訊。
在上述運(yùn)行環(huán)境下,本申請(qǐng)?zhí)峁┝巳鐖D2所示的生成描述信息的方法。圖2是根據(jù)本發(fā)明實(shí)施例的生成描述信息的方法的流程圖。如圖2所示,該方法可以包括以下處理步驟:
步驟s20:獲取多張數(shù)據(jù)表中每張數(shù)據(jù)表所包含的字段信息;
步驟s22:根據(jù)字段信息確定多張數(shù)據(jù)表相互間的關(guān)聯(lián)關(guān)系;
步驟s24:利用多張數(shù)據(jù)表相互間的關(guān)聯(lián)關(guān)系生成描述信息,其中,描述信息用于記錄多張數(shù)據(jù)表相互間的連接次序以及相鄰數(shù)據(jù)表之間所使用的連接條件。
相關(guān)技術(shù)中,以表連接語(yǔ)句為主的記錄多張數(shù)據(jù)表之間相互關(guān)系的描述信息需要 業(yè)務(wù)人員根據(jù)特定案例來(lái)進(jìn)行手工編寫(xiě),即業(yè)務(wù)人員需要為每個(gè)案例分別定制不同的sql語(yǔ)句,由此不僅造成工作效率較低,而且發(fā)生錯(cuò)誤的概率也較高。然而,通過(guò)本發(fā)明實(shí)施例所提供的技術(shù)方案,采用通過(guò)獲取多張數(shù)據(jù)表中每張數(shù)據(jù)表所包含的字段信息并根據(jù)字段信息確定多張數(shù)據(jù)表相互間的關(guān)聯(lián)關(guān)系的方式,利用多張數(shù)據(jù)表相互間的關(guān)聯(lián)關(guān)系生成用于記錄多張數(shù)據(jù)表相互間的連接次序以及相鄰數(shù)據(jù)表之間所使用的連接條件的描述信息,達(dá)到了不需要人工參與便可以自動(dòng)生成上述描述信息(例如:合法的表連接sql語(yǔ)句)來(lái)完成數(shù)據(jù)分析的目的,從而實(shí)現(xiàn)了通過(guò)自動(dòng)生成數(shù)據(jù)表之間相互關(guān)系的描述信息不僅提高了數(shù)據(jù)分析效率而且還提升了數(shù)據(jù)分析結(jié)果準(zhǔn)確性的技術(shù)效果,尤其是對(duì)于批量的數(shù)據(jù)分析工作而言,其效率提升更為顯著,進(jìn)而解決了相關(guān)技術(shù)中無(wú)法在給定若干張數(shù)據(jù)表且可獲知數(shù)據(jù)表之間的關(guān)系的情況下,通過(guò)采用自動(dòng)生成合法的表連接sql語(yǔ)句的實(shí)現(xiàn)方式來(lái)完成數(shù)據(jù)分析的技術(shù)問(wèn)題。
可選地,在步驟s22中,根據(jù)字段信息確定多張數(shù)據(jù)表相互間的關(guān)聯(lián)關(guān)系可以包括以下執(zhí)行步驟:
選取步驟s220:從多張數(shù)據(jù)表中選取任意一張待遍歷的數(shù)據(jù)表;
查找步驟s222:查找與選取的數(shù)據(jù)表所包含的字段信息中具有一個(gè)或多個(gè)相同字段的數(shù)據(jù)表,并將查找到的數(shù)據(jù)表設(shè)置為選取的數(shù)據(jù)表的待連接數(shù)據(jù)表;
建立步驟s224:在選取的數(shù)據(jù)表與待連接數(shù)據(jù)表之間建立關(guān)聯(lián)關(guān)系;返回選取步驟,直至多張數(shù)據(jù)表被全部遍歷。
在需要建立相互之間的關(guān)聯(lián)關(guān)系的多張數(shù)據(jù)表中,可以先隨機(jī)選取其中一張數(shù)據(jù)表作為起始遍歷的數(shù)據(jù)表或者作為參照數(shù)據(jù)表,然后依次訪問(wèn)其余數(shù)據(jù)表。由于每張數(shù)據(jù)表都包含有多個(gè)字段(例如:字段1為產(chǎn)品名稱,字段2為產(chǎn)品型號(hào),字段3為生產(chǎn)廠商,字段4為使用壽命),因此,在選定其中一張數(shù)據(jù)表之后,便需要查找與該數(shù)據(jù)表具有相同字段的其他數(shù)據(jù)表。此處,具有相同字段的其他數(shù)據(jù)表可以為一張,當(dāng)然也可以為多張。在查找到具有相同字段的其他數(shù)據(jù)表之后,便可以將此類數(shù)據(jù)表設(shè)置為先前選取的數(shù)據(jù)表的待連接數(shù)據(jù)表,并建立彼此之間的連接關(guān)系。在對(duì)當(dāng)前遍歷的數(shù)據(jù)表的待連接數(shù)據(jù)表查找完畢后,再繼續(xù)遍歷下一張數(shù)據(jù)表,以此類推,直至全部數(shù)據(jù)表均經(jīng)歷過(guò)一次遍歷,從而在上述多張數(shù)據(jù)表的相互間建立完整的拓?fù)浣Y(jié)構(gòu)。
例如:圖3是根據(jù)本發(fā)明優(yōu)選實(shí)施例的在多張數(shù)據(jù)表的相互間建立完整的拓?fù)浣Y(jié)構(gòu)的示意圖。如圖3所示(圖3中僅示出多張數(shù)據(jù)表相互間的相同字段),在該示例中,數(shù)據(jù)表1包含的字段為:字段1、字段2、字段3和字段4,數(shù)據(jù)表2包含的字段為:字段1、字段3和字段5,數(shù)據(jù)表3包含的字段為:字段2、字段5和字段7以及數(shù)據(jù) 表4包含的字段為:字段7、字段8、字段9和字段10。根據(jù)上述分析,首先隨機(jī)選取數(shù)據(jù)表1作為起始遍歷的數(shù)據(jù)表或者作為參照數(shù)據(jù)表,然后依次訪問(wèn)其余數(shù)據(jù)表。通過(guò)比較可以發(fā)現(xiàn),數(shù)據(jù)表1與數(shù)據(jù)表2具有相同字段(字段1和字段3)以及數(shù)據(jù)表1與數(shù)據(jù)表3具有相同字段(字段2),由此,可以確定數(shù)據(jù)表2和數(shù)據(jù)表3均為數(shù)據(jù)表1的待連接數(shù)據(jù)表,并可以據(jù)此在數(shù)據(jù)表1與數(shù)據(jù)表2之間以及數(shù)據(jù)表1與數(shù)據(jù)表3之間建立關(guān)聯(lián)關(guān)系。其次,再遍歷數(shù)據(jù)表2,通過(guò)比較可以發(fā)現(xiàn),數(shù)據(jù)表2僅與數(shù)據(jù)表3具有相同字段(字段5),由此,可以確定數(shù)據(jù)表3為數(shù)據(jù)表2的待連接數(shù)據(jù)表,并可以據(jù)此在數(shù)據(jù)表2與數(shù)據(jù)表3之間建立關(guān)聯(lián)關(guān)系。然后,再遍歷數(shù)據(jù)表3,通過(guò)比較可以發(fā)現(xiàn),數(shù)據(jù)表3僅與數(shù)據(jù)表4具有相同字段(字段7),由此,可以確定數(shù)據(jù)表4為數(shù)據(jù)表3的待連接數(shù)據(jù)表,并可以據(jù)此在數(shù)據(jù)表3與數(shù)據(jù)表4之間建立關(guān)聯(lián)關(guān)系。最后,再遍歷數(shù)據(jù)表4,通過(guò)比較可以發(fā)現(xiàn),除了上述已經(jīng)建立關(guān)聯(lián)關(guān)系的數(shù)據(jù)表3之外,并沒(méi)有其他待連接數(shù)據(jù)表。至此,關(guān)于數(shù)據(jù)表1、數(shù)據(jù)表2、數(shù)據(jù)表3以及數(shù)據(jù)表4之間相互關(guān)聯(lián)關(guān)系的拓?fù)浣Y(jié)構(gòu)已經(jīng)形成。
可選地,在步驟s24中,利用多張數(shù)據(jù)表相互間的關(guān)聯(lián)關(guān)系生成描述信息可以包括以下執(zhí)行步驟:
步驟s240:按照多張數(shù)據(jù)表相互間的關(guān)聯(lián)關(guān)系從初始遍歷的數(shù)據(jù)表開(kāi)始依次獲取下一個(gè)遍歷的數(shù)據(jù)表的標(biāo)識(shí)信息,與下一個(gè)遍歷的數(shù)據(jù)表相鄰接的數(shù)據(jù)表的標(biāo)識(shí)信息以及下一個(gè)遍歷的數(shù)據(jù)表與鄰接的數(shù)據(jù)表之間的連接條件,其中,鄰接的數(shù)據(jù)表為已經(jīng)遍歷過(guò)的數(shù)據(jù)表;
步驟s242:采用獲取到的下一個(gè)遍歷的數(shù)據(jù)表的標(biāo)識(shí)信息,鄰接的數(shù)據(jù)表的標(biāo)識(shí)信息以及下一個(gè)遍歷的數(shù)據(jù)表與鄰接的數(shù)據(jù)表之間的連接條件生成描述信息。
在確定多張數(shù)據(jù)表相互間的關(guān)聯(lián)關(guān)系后,可以從起始遍歷的數(shù)據(jù)表或者作為參照數(shù)據(jù)表開(kāi)始依次獲取下一個(gè)遍歷的數(shù)據(jù)表的標(biāo)識(shí)信息,并進(jìn)一步獲取與下一個(gè)遍歷的數(shù)據(jù)表相鄰接的數(shù)據(jù)表的標(biāo)識(shí)信息。需要說(shuō)明的是,此處提到的與下一個(gè)遍歷的數(shù)據(jù)表相鄰接的數(shù)據(jù)表是指從起始遍歷的數(shù)據(jù)表開(kāi)始到下一個(gè)遍歷的數(shù)據(jù)表為止已經(jīng)被遍歷的全部數(shù)據(jù)表中與下一個(gè)遍歷的數(shù)據(jù)表鄰接的數(shù)據(jù)表。通過(guò)獲取上述標(biāo)識(shí)信息可以確定下一個(gè)遍歷的數(shù)據(jù)表與哪個(gè)或哪些已經(jīng)被遍歷的數(shù)據(jù)表之間存在關(guān)聯(lián)關(guān)系,基于此,可以再獲取下一個(gè)遍歷的數(shù)據(jù)表與鄰接的數(shù)據(jù)表之間的連接條件(即存在哪些相同的字段)。
例如:基于上述已經(jīng)形成的關(guān)于數(shù)據(jù)表1、數(shù)據(jù)表2、數(shù)據(jù)表3以及數(shù)據(jù)表4之間相互關(guān)聯(lián)關(guān)系的拓?fù)浣Y(jié)構(gòu),生成描述信息的具體方式如下:
以數(shù)據(jù)表1為起始遍歷的數(shù)據(jù)表或者作為參照數(shù)據(jù)表,然后依次訪問(wèn)其余數(shù)據(jù)表??紤]到數(shù)據(jù)表2和數(shù)據(jù)表3均為數(shù)據(jù)表1的待連接數(shù)據(jù)表,并已經(jīng)據(jù)此在數(shù)據(jù)表1與數(shù)據(jù)表2之間以及數(shù)據(jù)表1與數(shù)據(jù)表3之間建立過(guò)關(guān)聯(lián)關(guān)系,那么可以在數(shù)據(jù)表2和數(shù)據(jù)表3之間先隨機(jī)選擇一個(gè)數(shù)據(jù)表。假設(shè)此次選取的是數(shù)據(jù)表2,那么下一個(gè)遍歷的數(shù)據(jù)表即為數(shù)據(jù)表2,而已經(jīng)遍歷的且與數(shù)據(jù)表2相鄰接的僅有數(shù)據(jù)表1,則此時(shí)的連接條件為數(shù)據(jù)表1與數(shù)據(jù)表2具有相同字段(字段1和字段3)。接下來(lái),在對(duì)數(shù)據(jù)表2完成遍歷后,由于數(shù)據(jù)表2僅與數(shù)據(jù)表3之間存在連接關(guān)系,因此,下一個(gè)遍歷的數(shù)據(jù)表即為數(shù)據(jù)表3。在已經(jīng)遍歷的數(shù)據(jù)表1和數(shù)據(jù)表2中,數(shù)據(jù)表1與數(shù)據(jù)表3具有相同字段(字段2),數(shù)據(jù)表2與數(shù)據(jù)表3具有相同字段(字段5),則此時(shí)的連接條件為數(shù)據(jù)表1與數(shù)據(jù)表3具有相同字段(字段2),數(shù)據(jù)表2與數(shù)據(jù)表3具有相同字段(字段5)。然后,在對(duì)數(shù)據(jù)表3完成遍歷后,由于數(shù)據(jù)表3僅與數(shù)據(jù)表4之間存在連接關(guān)系,因此,下一個(gè)遍歷的數(shù)據(jù)表即為數(shù)據(jù)表4。在已經(jīng)遍歷的數(shù)據(jù)表1、數(shù)據(jù)表2以及數(shù)據(jù)表3中,數(shù)據(jù)表3僅與數(shù)據(jù)表4具有相同字段(字段7),則此時(shí)的連接條件為數(shù)據(jù)表3與數(shù)據(jù)表4具有相同字段(字段7)。至此,關(guān)于數(shù)據(jù)表1、數(shù)據(jù)表2、數(shù)據(jù)表3以及數(shù)據(jù)表4之間相互關(guān)聯(lián)關(guān)系的描述信息已經(jīng)形成。
可選地,在步驟s242中,采用獲取到的下一個(gè)遍歷的數(shù)據(jù)表的標(biāo)識(shí)信息,鄰接的數(shù)據(jù)表的標(biāo)識(shí)信息以及下一個(gè)遍歷的數(shù)據(jù)表與鄰接的數(shù)據(jù)表之間的連接條件生成描述信息可以包括以下執(zhí)行步驟:
步驟s2420:先根據(jù)下一個(gè)遍歷的數(shù)據(jù)表的標(biāo)識(shí)信息和鄰接的數(shù)據(jù)表的標(biāo)識(shí)信息建立下一個(gè)遍歷的數(shù)據(jù)表與鄰接的數(shù)據(jù)表之間的關(guān)聯(lián)關(guān)系后,再記錄下一個(gè)遍歷的數(shù)據(jù)表與鄰接的數(shù)據(jù)表之間的連接條件,分別生成與已經(jīng)遍歷的數(shù)據(jù)表對(duì)應(yīng)的分段連接信息;
步驟s2422:聯(lián)合全部分段連接信息,生成描述信息。
在生成描述信息的過(guò)程中,數(shù)據(jù)表之間合法的表連接描述信息需要同時(shí)滿足如下三個(gè)條件:
條件一、所有數(shù)據(jù)表均被且僅被連接一次;
條件二、所有連接條件均被且僅被使用一次;
條件三、每個(gè)連接條件中出現(xiàn)的數(shù)據(jù)表需要先被連接。
具體到上述示例中,在已經(jīng)形成的關(guān)于數(shù)據(jù)表1、數(shù)據(jù)表2、數(shù)據(jù)表3以及數(shù)據(jù)表4之間相互關(guān)聯(lián)關(guān)系的拓?fù)浣Y(jié)構(gòu)中,數(shù)據(jù)表1、數(shù)據(jù)表2、數(shù)據(jù)表3以及數(shù)據(jù)表4已均被連接一次。所有的連接條件,包括:數(shù)據(jù)表1與數(shù)據(jù)表2具有相同字段(字段1和 字段3),數(shù)據(jù)表1與數(shù)據(jù)表3具有相同字段(字段2),數(shù)據(jù)表2與數(shù)據(jù)表3具有相同字段(字段5)以及數(shù)據(jù)表3與數(shù)據(jù)表4具有相同字段(字段7),已均被使用一次。在每遍歷一張數(shù)據(jù)表時(shí),在連接條件中出現(xiàn)的數(shù)據(jù)表必須為已經(jīng)被遍歷過(guò)的數(shù)據(jù)表,即在遍歷數(shù)據(jù)表2時(shí),已經(jīng)遍歷的且與數(shù)據(jù)表2相鄰接的僅有數(shù)據(jù)表1,則此時(shí)的連接條件包含數(shù)據(jù)表1與數(shù)據(jù)表2具有相同字段1和相同字段3;在遍歷數(shù)據(jù)表3時(shí),已經(jīng)遍歷的且與數(shù)據(jù)表3相鄰接的有數(shù)據(jù)表1和數(shù)據(jù)表2,則此時(shí)的連接條件可以包含數(shù)據(jù)表1與數(shù)據(jù)表3具有相同字段2以及數(shù)據(jù)表2與數(shù)據(jù)表3具有相同字段5;在遍歷數(shù)據(jù)表4時(shí),已經(jīng)遍歷的且與數(shù)據(jù)表4相鄰接的僅有數(shù)據(jù)表3,則此時(shí)的連接條件僅包含數(shù)據(jù)表3與數(shù)據(jù)表4具有相同字段7。
將得到上述分段連接信息聯(lián)合起來(lái)便可以生成最終所要獲得的描述信息,即數(shù)據(jù)表1,連接數(shù)據(jù)表2,其連接條件為:數(shù)據(jù)表1與數(shù)據(jù)表2具有相同字段1和相同字段3;連接數(shù)據(jù)表3,其連接條件為:數(shù)據(jù)表1與數(shù)據(jù)表3具有相同字段2以及數(shù)據(jù)表2與數(shù)據(jù)表3具有相同字段5;連接數(shù)據(jù)表4,其連接條件為:數(shù)據(jù)表3與數(shù)據(jù)表4具有相同字段7。
在優(yōu)選實(shí)施過(guò)程中,在步驟s2420中,如果下一個(gè)遍歷的數(shù)據(jù)表同時(shí)與多個(gè)數(shù)據(jù)表相鄰接和/或下一個(gè)遍歷的數(shù)據(jù)表與部分相鄰接的數(shù)據(jù)表存在多個(gè)相同的字段時(shí),則記錄的下一個(gè)遍歷的數(shù)據(jù)表與鄰接的數(shù)據(jù)表之間的連接條件是由下一個(gè)遍歷的數(shù)據(jù)表與多個(gè)數(shù)據(jù)表相鄰接所產(chǎn)生的連接條件和/或由下一個(gè)遍歷的數(shù)據(jù)表與部分相鄰接的數(shù)據(jù)表存在多個(gè)相同的字段所產(chǎn)生的連接條件的并集。
在已經(jīng)形成的關(guān)于數(shù)據(jù)表1、數(shù)據(jù)表2、數(shù)據(jù)表3以及數(shù)據(jù)表4之間相互關(guān)聯(lián)關(guān)系的拓?fù)浣Y(jié)構(gòu)中,不僅包含因連接條件為數(shù)據(jù)表3與數(shù)據(jù)表4具有相同字段7而在數(shù)據(jù)表3與數(shù)據(jù)表4形成的單一連接關(guān)系,而且還包含數(shù)據(jù)表1與數(shù)據(jù)表2之間以及數(shù)據(jù)表1、數(shù)據(jù)表2以及數(shù)據(jù)表3相互間形成的復(fù)雜連接關(guān)系,即對(duì)于數(shù)據(jù)表1與數(shù)據(jù)表2兩者之間的連接關(guān)系而言,在遍歷數(shù)據(jù)表2時(shí),已經(jīng)遍歷的且與數(shù)據(jù)表2相鄰接的僅有數(shù)據(jù)表1,則此時(shí)的連接條件包含數(shù)據(jù)表1與數(shù)據(jù)表2具有相同字段1和相同字段3,而正是由于數(shù)據(jù)表1與數(shù)據(jù)表2之間具有2個(gè)相同字段,因此,數(shù)據(jù)表1與數(shù)據(jù)表2之間存在兩種連接關(guān)系,其為數(shù)據(jù)表1與數(shù)據(jù)表2具有相同字段1和相同字段3的并集;對(duì)于數(shù)據(jù)表1、數(shù)據(jù)表2以及數(shù)據(jù)表3三者之間的連接關(guān)系而言,在遍歷數(shù)據(jù)表3時(shí),已經(jīng)遍歷的且與數(shù)據(jù)表3相鄰接的有數(shù)據(jù)表1和數(shù)據(jù)表2,而且數(shù)據(jù)表1與數(shù)據(jù)表3具有相同字段2以及數(shù)據(jù)表2與數(shù)據(jù)表3具有相同字段5,因此,數(shù)據(jù)表3與已經(jīng)遍歷的數(shù)據(jù)表1和數(shù)據(jù)表2之間分別存在連接關(guān)系,其為數(shù)據(jù)表1與數(shù)據(jù)表3具有相同字段2以及數(shù)據(jù)表2與數(shù)據(jù)表3具有相同字段5的并集。
下面將結(jié)合以下優(yōu)選實(shí)施方式對(duì)上述優(yōu)選實(shí)施過(guò)程作進(jìn)一步地描述。
圖4是根據(jù)本發(fā)明優(yōu)選實(shí)施例的生成描述信息的方法的示意圖。如圖4所示,假設(shè)當(dāng)前總共有4張數(shù)據(jù)表,其分別為數(shù)據(jù)表a、數(shù)據(jù)表b、數(shù)據(jù)表c以及數(shù)據(jù)表d,在數(shù)據(jù)表的元信息中定義了f1、f2、f3為連接字段,即包含這些字段的數(shù)據(jù)表可以連接在一起。
具體地,上述4張數(shù)據(jù)表所包含的連接字段分別為:
數(shù)據(jù)表a包含:連接字段f3;
數(shù)據(jù)表b包含:連接字段f1,連接字段f2以及連接字段f3;
數(shù)據(jù)表c包含:連接字段f1;
數(shù)據(jù)表d包含:連接字段f1和連接字段f2。
由此,可以得到這4張數(shù)據(jù)表之間存在如下連接條件:
(數(shù)據(jù)表a,數(shù)據(jù)表b)之間存在的連接條件:數(shù)據(jù)表a.連接字段f3=數(shù)據(jù)表b.連接字段f3;
(數(shù)據(jù)表b,數(shù)據(jù)表c)之間存在的連接條件:數(shù)據(jù)表b.連接字段f1=數(shù)據(jù)表c.連接字段f1;
(數(shù)據(jù)表b,數(shù)據(jù)表d)之間存在的連接條件:數(shù)據(jù)表b.連接字段f1=數(shù)據(jù)表d.連接字段f1,數(shù)據(jù)表b.連接字段f2=數(shù)據(jù)表d.連接字段f2;
(數(shù)據(jù)表c,數(shù)據(jù)表d)之間存在的連接條件:數(shù)據(jù)表c.連接字段f1=數(shù)據(jù)表d.連接字段f1;
即數(shù)據(jù)表a和數(shù)據(jù)表b通過(guò)f3字段連接,數(shù)據(jù)表b和數(shù)據(jù)表c通過(guò)f1字段連接,數(shù)據(jù)表b和數(shù)據(jù)表d通過(guò)f1和f2兩個(gè)字段連接以及數(shù)據(jù)表c和數(shù)據(jù)表d通過(guò)f1字段連接。
在該優(yōu)選實(shí)施例中,如何根據(jù)數(shù)據(jù)表間的連接關(guān)系生成合法的描述信息(例如:表連接語(yǔ)句),該優(yōu)選實(shí)施例將其抽象為圖的遍歷問(wèn)題,即,采用圖頂點(diǎn)來(lái)表示數(shù)據(jù)表,采用圖的邊來(lái)表示數(shù)據(jù)表之間的連接關(guān)系,上述舉例中的數(shù)據(jù)表以及相互間的連接關(guān)系可以表示為:
首先從數(shù)據(jù)表a開(kāi)始,依次連接其它3張數(shù)據(jù)表,為生成合法的表連接語(yǔ)句,其具體方式如下:從圖頂點(diǎn)a出發(fā),按一定順序到達(dá)其它頂點(diǎn),并將當(dāng)前到達(dá)頂點(diǎn)與它 前邊已經(jīng)到達(dá)過(guò)的頂點(diǎn)之間的邊加到連接條件中,即可生成以圖頂點(diǎn)為連接表,圖的邊為連接條件的合法表連接語(yǔ)句,每個(gè)表和連接條件在該語(yǔ)句中出現(xiàn)且僅出現(xiàn)一次,且連接條件中出現(xiàn)的表已經(jīng)先進(jìn)行“join”(對(duì)應(yīng)圖頂點(diǎn)已經(jīng)到達(dá)過(guò))。
該優(yōu)選實(shí)施例通過(guò)采用圖的遍歷方法(包括:深度優(yōu)先遍歷和廣度優(yōu)先遍歷)來(lái)確定頂點(diǎn)的到達(dá)次序。以廣度優(yōu)先遍歷為例,從頂點(diǎn)a出發(fā),將該頂點(diǎn)計(jì)為第1層,先到達(dá)與它有邊連接的第2層頂點(diǎn),即與a距離為1的頂點(diǎn),再依次到達(dá)與a距離遞增的各層頂點(diǎn),同一層內(nèi)到達(dá)順序隨機(jī)。在上述示例中,頂點(diǎn)a為第1層,頂點(diǎn)b為第2層,頂點(diǎn)c、d均與b相連,同屬第3層,所以這4個(gè)頂點(diǎn)的到達(dá)次序?yàn)閍、b、c、d或者a、b、d、c。
假設(shè)以到達(dá)次序a、b、c、d為例,來(lái)展開(kāi)表連接語(yǔ)句的生成過(guò)程:
第一步、從頂點(diǎn)a出發(fā),到達(dá)頂點(diǎn)b后,join頂點(diǎn)b,并將頂點(diǎn)b與它前邊已經(jīng)到達(dá)過(guò)的頂點(diǎn)之間的邊加到連接條件中,由于在到達(dá)頂點(diǎn)b之前只到達(dá)過(guò)頂點(diǎn)a,因此,可以將頂點(diǎn)b與頂點(diǎn)a之間的邊添加到連接條件中,生成ajoinbona.f3=b.f3;
第二步、從頂點(diǎn)b出發(fā),到達(dá)頂點(diǎn)c后,join頂點(diǎn)c,并將頂點(diǎn)c與它前邊已經(jīng)到達(dá)過(guò)的頂點(diǎn)之間的邊添加到連接條件中,由于在到達(dá)頂點(diǎn)c之前已經(jīng)到達(dá)過(guò)頂點(diǎn)a和頂點(diǎn)b,但頂點(diǎn)c只與頂點(diǎn)b之間有邊,所以將頂點(diǎn)c與頂點(diǎn)b之間的邊添加到連接條件中,生成joinconb.f1=c.f1;
第三步、從頂點(diǎn)c觸發(fā),到達(dá)頂點(diǎn)d后,join頂點(diǎn)d,并將頂點(diǎn)d與它前邊已經(jīng)到達(dá)過(guò)的頂點(diǎn)之間的邊添加到連接條件中,由于在到達(dá)頂點(diǎn)d之前已經(jīng)到達(dá)過(guò)頂點(diǎn)a、頂點(diǎn)b以及頂點(diǎn)c,而頂點(diǎn)d與頂點(diǎn)b、頂點(diǎn)c之間有邊,所以將頂點(diǎn)d與頂點(diǎn)b、頂點(diǎn)c之間的邊添加到連接條件中,生成joindonb.f1=d.f1andb.f2=d.f2andc.f1=d.f1;
在所有頂點(diǎn)全部到達(dá)后,便可生成最終的表連接語(yǔ)句ajoinbona.f3=b.f3joinconb.f1=c.f1joindonb.f1=d.f1andb.f2=d.f2andc.f1=d.f1。
因此,數(shù)據(jù)表a、數(shù)據(jù)表b、數(shù)據(jù)表c以及數(shù)據(jù)表d之間合法的表連接語(yǔ)句如下:
ajoinbona.f3=b.f3joinconb.f1=c.f1joindonb.f1=d.f1andb.f2=d.f2andc.f1=d.f1。
假設(shè)以到達(dá)次序a、b、d、c為例,來(lái)展開(kāi)表連接語(yǔ)句的生成過(guò)程:
第一步、從頂點(diǎn)a出發(fā),到達(dá)頂點(diǎn)b后,join頂點(diǎn)b,并將頂點(diǎn)b與它前邊已經(jīng)到達(dá)過(guò)的頂點(diǎn)之間的邊加到連接條件中,由于在到達(dá)頂點(diǎn)b之前只到達(dá)過(guò)頂點(diǎn)a,因此,可以將頂點(diǎn)b與頂點(diǎn)a之間的邊添加到連接條件中,生成ajoinbona.f3=b.f3;
第二步、從頂點(diǎn)b出發(fā),到達(dá)頂點(diǎn)d后,join頂點(diǎn)d,并將頂點(diǎn)d與它前邊已經(jīng)到達(dá)過(guò)的頂點(diǎn)之間的邊添加到連接條件中,由于在到達(dá)頂點(diǎn)d之前已經(jīng)到達(dá)過(guò)頂點(diǎn)a和頂點(diǎn)b,但頂點(diǎn)d只與頂點(diǎn)b之間有邊,所以將頂點(diǎn)d與頂點(diǎn)b之間的邊添加到連接條件中,生成joindonb.f1=d.f1andb.f2=d.f2;
第三步、從頂點(diǎn)d出發(fā),到達(dá)頂點(diǎn)c后,join頂點(diǎn)c,并將頂點(diǎn)c與它前邊已經(jīng)到達(dá)過(guò)的頂點(diǎn)之間的邊添加到連接條件中,由于在到達(dá)頂點(diǎn)c之前已經(jīng)到達(dá)過(guò)頂點(diǎn)a、頂點(diǎn)b以及頂點(diǎn)d,而頂點(diǎn)c與頂點(diǎn)b、頂點(diǎn)d之間有邊,所以將頂點(diǎn)c與頂點(diǎn)b、頂點(diǎn)d之間的邊添加到連接條件中,生成joinconb.f1=c.f1andc.f1=d.f1;
在所有頂點(diǎn)全部到達(dá)后,便可生成最終的表連接語(yǔ)句ajoinbona.f3=b.f3joindonb.f1=d.f1andb.f2=d.f2joinconb.f1=c.f1andc.f1=d.f1。
因此,數(shù)據(jù)表a、數(shù)據(jù)表b、數(shù)據(jù)表c以及數(shù)據(jù)表d之間合法的表連接語(yǔ)句如下:
ajoinbona.f3=b.f3joindonb.f1=d.f1andb.f2=d.f2joinconb.f1=c.f1andc.f1=d.f1。
另外,與合法的表連接語(yǔ)句相對(duì),不合法的表連接語(yǔ)句的示例如下:
ajoinbona.f3=b.f3joinconb.f1=c.f1andc.f1=d.f1joindonb.f1=d.f1andb.f2=d.f2;
在該表連接語(yǔ)句中的連接條件“c.f1=d.f1”在“joind”之前出現(xiàn)是不合法的,其原因在于,連接條件中的數(shù)據(jù)表d需要先“join”,即當(dāng)前遍歷的數(shù)據(jù)表為數(shù)據(jù)表c,已經(jīng)遍歷的數(shù)據(jù)表僅為數(shù)據(jù)表a和數(shù)據(jù)表b,其并不包括數(shù)據(jù)表d,因此,數(shù)據(jù)表d不能出現(xiàn)在關(guān)于連接數(shù)據(jù)表c的連接條件中,而只能在繼續(xù)遍歷數(shù)據(jù)表d后,出現(xiàn)在關(guān)于連接數(shù)據(jù)表d的連接條件中。
需要說(shuō)明的是,對(duì)于前述的各方法實(shí)施例,為了簡(jiǎn)單描述,故將其都表述為一系列的動(dòng)作組合,但是本領(lǐng)域技術(shù)人員應(yīng)該知悉,本發(fā)明并不受所描述的動(dòng)作順序的限制,因?yàn)橐罁?jù)本發(fā)明,某些步驟可以采用其他順序或者同時(shí)進(jìn)行。其次,本領(lǐng)域技術(shù) 人員也應(yīng)該知悉,說(shuō)明書(shū)中所描述的實(shí)施例均屬于優(yōu)選實(shí)施例,所涉及的動(dòng)作和模塊并不一定是本發(fā)明所必須的。
通過(guò)以上的實(shí)施方式的描述,本領(lǐng)域的技術(shù)人員可以清楚地了解到根據(jù)上述實(shí)施例的生成描述信息的方法可借助軟件加必需的通用硬件平臺(tái)的方式來(lái)實(shí)現(xiàn),當(dāng)然也可以通過(guò)硬件,但很多情況下前者是更佳的實(shí)施方式?;谶@樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說(shuō)對(duì)現(xiàn)有技術(shù)做出貢獻(xiàn)的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來(lái),該計(jì)算機(jī)軟件產(chǎn)品存儲(chǔ)在一個(gè)存儲(chǔ)介質(zhì)(如rom/ram、磁碟、光盤(pán))中,包括若干指令用以使得一臺(tái)終端設(shè)備(可以是手機(jī),計(jì)算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個(gè)實(shí)施例所述的方法。
實(shí)施例2
根據(jù)本發(fā)明實(shí)施例,還提供了一種用于實(shí)施上述生成描述信息的裝置的結(jié)構(gòu)框圖,如圖5所示,該裝置包括:獲取模塊10,用于獲取多張數(shù)據(jù)表中每張數(shù)據(jù)表所包含的字段信息;確定模塊20,用于根據(jù)字段信息確定多張數(shù)據(jù)表相互間的關(guān)聯(lián)關(guān)系;生成模塊30,用于利用多張數(shù)據(jù)表相互間的關(guān)聯(lián)關(guān)系生成描述信息,其中,描述信息用于記錄多張數(shù)據(jù)表相互間的連接次序以及相鄰數(shù)據(jù)表之間所使用的連接條件。
可選地,圖6是根據(jù)本發(fā)明優(yōu)選實(shí)施例的生成描述信息的裝置的結(jié)構(gòu)框圖,如圖6所示,確定模塊20包括:選取單元200,用于從多張數(shù)據(jù)表中選取任意一張待遍歷的數(shù)據(jù)表;查找單元202,用于查找與選取的數(shù)據(jù)表所包含的字段信息中具有一個(gè)或多個(gè)相同字段的數(shù)據(jù)表,并將查找到的數(shù)據(jù)表設(shè)置為選取的數(shù)據(jù)表的待連接數(shù)據(jù)表;建立單元204,用于在選取的數(shù)據(jù)表與待連接數(shù)據(jù)表之間建立關(guān)聯(lián)關(guān)系;返回選取單元,直至多張數(shù)據(jù)表被全部遍歷。
可選地,如圖6所示,生成模塊30包括:獲取單元300,用于按照多張數(shù)據(jù)表相互間的關(guān)聯(lián)關(guān)系從初始遍歷的數(shù)據(jù)表開(kāi)始依次獲取下一個(gè)遍歷的數(shù)據(jù)表的標(biāo)識(shí)信息,與下一個(gè)遍歷的數(shù)據(jù)表相鄰接的數(shù)據(jù)表的標(biāo)識(shí)信息以及下一個(gè)遍歷的數(shù)據(jù)表與鄰接的數(shù)據(jù)表之間的連接條件,其中,鄰接的數(shù)據(jù)表為已經(jīng)遍歷過(guò)的數(shù)據(jù)表;生成單元302,用于采用獲取到的下一個(gè)遍歷的數(shù)據(jù)表的標(biāo)識(shí)信息,鄰接的數(shù)據(jù)表的標(biāo)識(shí)信息以及下一個(gè)遍歷的數(shù)據(jù)表與鄰接的數(shù)據(jù)表之間的連接條件生成描述信息。
可選地,生成單元302包括:第一生成子單元(圖中未示出),用于先根據(jù)下一個(gè)遍歷的數(shù)據(jù)表的標(biāo)識(shí)信息和鄰接的數(shù)據(jù)表的標(biāo)識(shí)信息建立下一個(gè)遍歷的數(shù)據(jù)表與鄰接的數(shù)據(jù)表之間的關(guān)聯(lián)關(guān)系后,再記錄下一個(gè)遍歷的數(shù)據(jù)表與鄰接的數(shù)據(jù)表之間的連接 條件,分別生成與已經(jīng)遍歷的數(shù)據(jù)表對(duì)應(yīng)的分段連接信息;第二生成子單元(圖中未示出),用于聯(lián)合全部分段連接信息,生成描述信息。
可選地,第一生成子單元(圖中未示出),用于在下一個(gè)遍歷的數(shù)據(jù)表同時(shí)與多個(gè)數(shù)據(jù)表相鄰接和/或下一個(gè)遍歷的數(shù)據(jù)表與部分相鄰接的數(shù)據(jù)表存在多個(gè)相同的字段時(shí),則記錄的下一個(gè)遍歷的數(shù)據(jù)表與鄰接的數(shù)據(jù)表之間的連接條件是由下一個(gè)遍歷的數(shù)據(jù)表與多個(gè)數(shù)據(jù)表相鄰接所產(chǎn)生的連接條件和/或由下一個(gè)遍歷的數(shù)據(jù)表與部分相鄰接的數(shù)據(jù)表存在多個(gè)相同的字段所產(chǎn)生的連接條件的并集。
實(shí)施例3
本發(fā)明的實(shí)施例可以提供一種計(jì)算機(jī)終端,該計(jì)算機(jī)終端可以是計(jì)算機(jī)終端群中的任意一個(gè)計(jì)算機(jī)終端設(shè)備??蛇x地,在本實(shí)施例中,上述計(jì)算機(jī)終端也可以替換為移動(dòng)終端等終端設(shè)備。
可選地,在本實(shí)施例中,上述計(jì)算機(jī)終端可以位于計(jì)算機(jī)網(wǎng)絡(luò)的多個(gè)網(wǎng)絡(luò)設(shè)備中的至少一個(gè)網(wǎng)絡(luò)設(shè)備。
可選地,圖7是根據(jù)本發(fā)明實(shí)施例的一種計(jì)算機(jī)終端的結(jié)構(gòu)框圖。如圖7所示,該計(jì)算機(jī)終端可以包括:一個(gè)或多個(gè)(圖中僅示出一個(gè))處理器以及存儲(chǔ)器。
其中,存儲(chǔ)器可用于存儲(chǔ)軟件程序以及模塊,如本發(fā)明實(shí)施例中的生成描述信息的方法和裝置對(duì)應(yīng)的程序指令/模塊,處理器通過(guò)運(yùn)行存儲(chǔ)在存儲(chǔ)器內(nèi)的軟件程序以及模塊,從而執(zhí)行各種功能應(yīng)用以及數(shù)據(jù)處理,即實(shí)現(xiàn)上述的生成描述信息的方法。存儲(chǔ)器可包括高速隨機(jī)存儲(chǔ)器,還可以包括非易失性存儲(chǔ)器,如一個(gè)或者多個(gè)磁性存儲(chǔ)裝置、閃存、或者其他非易失性固態(tài)存儲(chǔ)器。在一些實(shí)例中,存儲(chǔ)器可進(jìn)一步包括相對(duì)于處理器遠(yuǎn)程設(shè)置的存儲(chǔ)器,這些遠(yuǎn)程存儲(chǔ)器可以通過(guò)網(wǎng)絡(luò)連接至終端。上述網(wǎng)絡(luò)的實(shí)例包括但不限于互聯(lián)網(wǎng)、企業(yè)內(nèi)部網(wǎng)、局域網(wǎng)、移動(dòng)通信網(wǎng)及其組合。
處理器可以通過(guò)傳輸裝置調(diào)用存儲(chǔ)器存儲(chǔ)的信息及應(yīng)用程序,以執(zhí)行下述步驟:
s1,獲取多張數(shù)據(jù)表中每張數(shù)據(jù)表所包含的字段信息;
s2,根據(jù)字段信息確定多張數(shù)據(jù)表相互間的關(guān)聯(lián)關(guān)系;
s3,利用多張數(shù)據(jù)表相互間的關(guān)聯(lián)關(guān)系生成描述信息,其中,描述信息用于記錄多張數(shù)據(jù)表相互間的連接次序以及相鄰數(shù)據(jù)表之間所使用的連接條件。
可選的,上述處理器還可以執(zhí)行如下步驟的程序代碼:選取步驟:從多張數(shù)據(jù)表 中選取任意一張待遍歷的數(shù)據(jù)表;查找步驟:查找與選取的數(shù)據(jù)表所包含的字段信息中具有一個(gè)或多個(gè)相同字段的數(shù)據(jù)表,并將查找到的數(shù)據(jù)表設(shè)置為選取的數(shù)據(jù)表的待連接數(shù)據(jù)表;在選取的數(shù)據(jù)表與待連接數(shù)據(jù)表之間建立關(guān)聯(lián)關(guān)系;返回選取步驟,直至多張數(shù)據(jù)表被全部遍歷。
可選的,上述處理器還可以執(zhí)行如下步驟的程序代碼:按照多張數(shù)據(jù)表相互間的關(guān)聯(lián)關(guān)系從初始遍歷的數(shù)據(jù)表開(kāi)始依次獲取下一個(gè)遍歷的數(shù)據(jù)表的標(biāo)識(shí)信息,與下一個(gè)遍歷的數(shù)據(jù)表相鄰接的數(shù)據(jù)表的標(biāo)識(shí)信息以及下一個(gè)遍歷的數(shù)據(jù)表與鄰接的數(shù)據(jù)表之間的連接條件,其中,鄰接的數(shù)據(jù)表為已經(jīng)遍歷過(guò)的數(shù)據(jù)表;采用獲取到的下一個(gè)遍歷的數(shù)據(jù)表的標(biāo)識(shí)信息,鄰接的數(shù)據(jù)表的標(biāo)識(shí)信息以及下一個(gè)遍歷的數(shù)據(jù)表與鄰接的數(shù)據(jù)表之間的連接條件生成描述信息。
可選的,上述處理器還可以執(zhí)行如下步驟的程序代碼:先根據(jù)下一個(gè)遍歷的數(shù)據(jù)表的標(biāo)識(shí)信息和鄰接的數(shù)據(jù)表的標(biāo)識(shí)信息建立下一個(gè)遍歷的數(shù)據(jù)表與鄰接的數(shù)據(jù)表之間的關(guān)聯(lián)關(guān)系后,再記錄下一個(gè)遍歷的數(shù)據(jù)表與鄰接的數(shù)據(jù)表之間的連接條件,分別生成與已經(jīng)遍歷的數(shù)據(jù)表對(duì)應(yīng)的分段連接信息;聯(lián)合全部分段連接信息,生成描述信息。
可選的,上述處理器還可以執(zhí)行如下步驟的程序代碼:如果下一個(gè)遍歷的數(shù)據(jù)表同時(shí)與多個(gè)數(shù)據(jù)表相鄰接和/或下一個(gè)遍歷的數(shù)據(jù)表與部分相鄰接的數(shù)據(jù)表存在多個(gè)相同的字段時(shí),則記錄的下一個(gè)遍歷的數(shù)據(jù)表與鄰接的數(shù)據(jù)表之間的連接條件是由下一個(gè)遍歷的數(shù)據(jù)表與多個(gè)數(shù)據(jù)表相鄰接所產(chǎn)生的連接條件和/或由下一個(gè)遍歷的數(shù)據(jù)表與部分相鄰接的數(shù)據(jù)表存在多個(gè)相同的字段所產(chǎn)生的連接條件的并集。
采用本發(fā)明實(shí)施例,采用通過(guò)獲取多張數(shù)據(jù)表中每張數(shù)據(jù)表所包含的字段信息并根據(jù)字段信息確定多張數(shù)據(jù)表相互間的關(guān)聯(lián)關(guān)系的方式,利用多張數(shù)據(jù)表相互間的關(guān)聯(lián)關(guān)系生成用于記錄多張數(shù)據(jù)表相互間的連接次序以及相鄰數(shù)據(jù)表之間所使用的連接條件的描述信息,達(dá)到了不需要人工參與便可以自動(dòng)生成上述描述信息(例如:合法的表連接sql語(yǔ)句)來(lái)完成數(shù)據(jù)分析的目的,從而實(shí)現(xiàn)了通過(guò)自動(dòng)生成數(shù)據(jù)表之間相互關(guān)系的描述信息不僅提高了數(shù)據(jù)分析效率而且還提升了數(shù)據(jù)分析結(jié)果準(zhǔn)確性的技術(shù)效果,進(jìn)而解決了相關(guān)技術(shù)中無(wú)法在給定若干張數(shù)據(jù)表且可獲知數(shù)據(jù)表之間的關(guān)系的情況下,通過(guò)采用自動(dòng)生成合法的表連接sql語(yǔ)句的實(shí)現(xiàn)方式來(lái)完成數(shù)據(jù)分析的技術(shù)問(wèn)題。
本領(lǐng)域普通技術(shù)人員可以理解,圖7所示的結(jié)構(gòu)僅為示意,計(jì)算機(jī)終端也可以是智能手機(jī)(如android手機(jī)、ios手機(jī)等)、平板電腦、掌聲電腦以及移動(dòng)互聯(lián)網(wǎng)設(shè)備(mobileinternetdevices,mid)、pad等終端設(shè)備。圖7其并不對(duì)上述電子裝置的 結(jié)構(gòu)造成限定。例如,計(jì)算機(jī)終端還可包括比圖7中所示更多或者更少的組件(如網(wǎng)絡(luò)接口、顯示裝置等),或者具有與圖7所示不同的配置。
本領(lǐng)域普通技術(shù)人員可以理解上述實(shí)施例的各種方法中的全部或部分步驟是可以通過(guò)程序來(lái)指令終端設(shè)備相關(guān)的硬件來(lái)完成,該程序可以存儲(chǔ)于一計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中,存儲(chǔ)介質(zhì)可以包括:閃存盤(pán)、只讀存儲(chǔ)器(read-onlymemory,rom)、隨機(jī)存取器(randomaccessmemory,ram)、磁盤(pán)或光盤(pán)等。
實(shí)施例4
本發(fā)明的實(shí)施例還提供了一種存儲(chǔ)介質(zhì)??蛇x地,在本實(shí)施例中,上述存儲(chǔ)介質(zhì)可以用于保存上述實(shí)施例一所提供的生成描述信息的方法所執(zhí)行的程序代碼。
可選地,在本實(shí)施例中,上述存儲(chǔ)介質(zhì)可以位于計(jì)算機(jī)網(wǎng)絡(luò)中計(jì)算機(jī)終端群中的任意一個(gè)計(jì)算機(jī)終端中,或者位于移動(dòng)終端群中的任意一個(gè)移動(dòng)終端中。
可選地,在本實(shí)施例中,存儲(chǔ)介質(zhì)被設(shè)置為存儲(chǔ)用于執(zhí)行以下步驟的程序代碼:
s1,獲取多張數(shù)據(jù)表中每張數(shù)據(jù)表所包含的字段信息;
s2,根據(jù)字段信息確定多張數(shù)據(jù)表相互間的關(guān)聯(lián)關(guān)系;
s3,利用多張數(shù)據(jù)表相互間的關(guān)聯(lián)關(guān)系生成描述信息,其中,描述信息用于記錄多張數(shù)據(jù)表相互間的連接次序以及相鄰數(shù)據(jù)表之間所使用的連接條件。
可選地,存儲(chǔ)介質(zhì)還被設(shè)置為存儲(chǔ)用于執(zhí)行以下步驟的程序代碼:選取步驟:從多張數(shù)據(jù)表中選取任意一張待遍歷的數(shù)據(jù)表;查找步驟:查找與選取的數(shù)據(jù)表所包含的字段信息中具有一個(gè)或多個(gè)相同字段的數(shù)據(jù)表,并將查找到的數(shù)據(jù)表設(shè)置為選取的數(shù)據(jù)表的待連接數(shù)據(jù)表;在選取的數(shù)據(jù)表與待連接數(shù)據(jù)表之間建立關(guān)聯(lián)關(guān)系;返回選取步驟,直至多張數(shù)據(jù)表被全部遍歷。
可選地,存儲(chǔ)介質(zhì)還被設(shè)置為存儲(chǔ)用于執(zhí)行以下步驟的程序代碼:按照多張數(shù)據(jù)表相互間的關(guān)聯(lián)關(guān)系從初始遍歷的數(shù)據(jù)表開(kāi)始依次獲取下一個(gè)遍歷的數(shù)據(jù)表的標(biāo)識(shí)信息,與下一個(gè)遍歷的數(shù)據(jù)表相鄰接的數(shù)據(jù)表的標(biāo)識(shí)信息以及下一個(gè)遍歷的數(shù)據(jù)表與鄰接的數(shù)據(jù)表之間的連接條件,其中,鄰接的數(shù)據(jù)表為已經(jīng)遍歷過(guò)的數(shù)據(jù)表;采用獲取到的下一個(gè)遍歷的數(shù)據(jù)表的標(biāo)識(shí)信息,鄰接的數(shù)據(jù)表的標(biāo)識(shí)信息以及下一個(gè)遍歷的數(shù)據(jù)表與鄰接的數(shù)據(jù)表之間的連接條件生成描述信息。
可選地,存儲(chǔ)介質(zhì)還被設(shè)置為存儲(chǔ)用于執(zhí)行以下步驟的程序代碼:先根據(jù)下一個(gè) 遍歷的數(shù)據(jù)表的標(biāo)識(shí)信息和鄰接的數(shù)據(jù)表的標(biāo)識(shí)信息建立下一個(gè)遍歷的數(shù)據(jù)表與鄰接的數(shù)據(jù)表之間的關(guān)聯(lián)關(guān)系后,再記錄下一個(gè)遍歷的數(shù)據(jù)表與鄰接的數(shù)據(jù)表之間的連接條件,分別生成與已經(jīng)遍歷的數(shù)據(jù)表對(duì)應(yīng)的分段連接信息;聯(lián)合全部分段連接信息,生成描述信息。
可選地,存儲(chǔ)介質(zhì)還被設(shè)置為存儲(chǔ)用于執(zhí)行以下步驟的程序代碼:如果下一個(gè)遍歷的數(shù)據(jù)表同時(shí)與多個(gè)數(shù)據(jù)表相鄰接和/或下一個(gè)遍歷的數(shù)據(jù)表與部分相鄰接的數(shù)據(jù)表存在多個(gè)相同的字段時(shí),則記錄的下一個(gè)遍歷的數(shù)據(jù)表與鄰接的數(shù)據(jù)表之間的連接條件是由下一個(gè)遍歷的數(shù)據(jù)表與多個(gè)數(shù)據(jù)表相鄰接所產(chǎn)生的連接條件和/或由下一個(gè)遍歷的數(shù)據(jù)表與部分相鄰接的數(shù)據(jù)表存在多個(gè)相同的字段所產(chǎn)生的連接條件的并集。
上述本發(fā)明實(shí)施例序號(hào)僅僅為了描述,不代表實(shí)施例的優(yōu)劣。
在本發(fā)明的上述實(shí)施例中,對(duì)各個(gè)實(shí)施例的描述都各有側(cè)重,某個(gè)實(shí)施例中沒(méi)有詳述的部分,可以參見(jiàn)其他實(shí)施例的相關(guān)描述。
在本申請(qǐng)所提供的幾個(gè)實(shí)施例中,應(yīng)該理解到,所揭露的技術(shù)內(nèi)容,可通過(guò)其它的方式實(shí)現(xiàn)。其中,以上所描述的裝置實(shí)施例僅僅是示意性的,例如所述單元的劃分,僅僅為一種邏輯功能劃分,實(shí)際實(shí)現(xiàn)時(shí)可以有另外的劃分方式,例如多個(gè)單元或組件可以結(jié)合或者可以集成到另一個(gè)系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點(diǎn),所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過(guò)一些接口,單元或模塊的間接耦合或通信連接,可以是電性或其它的形式。
所述作為分離部件說(shuō)明的單元可以是或者也可以不是物理上分開(kāi)的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個(gè)地方,或者也可以分布到多個(gè)網(wǎng)絡(luò)單元上??梢愿鶕?jù)實(shí)際的需要選擇其中的部分或者全部單元來(lái)實(shí)現(xiàn)本實(shí)施例方案的目的。
另外,在本發(fā)明各個(gè)實(shí)施例中的各功能單元可以集成在一個(gè)處理單元中,也可以是各個(gè)單元單獨(dú)物理存在,也可以兩個(gè)或兩個(gè)以上單元集成在一個(gè)單元中。上述集成的單元既可以采用硬件的形式實(shí)現(xiàn),也可以采用軟件功能單元的形式實(shí)現(xiàn)。
所述集成的單元如果以軟件功能單元的形式實(shí)現(xiàn)并作為獨(dú)立的產(chǎn)品銷售或使用時(shí),可以存儲(chǔ)在一個(gè)計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中。基于這樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說(shuō)對(duì)現(xiàn)有技術(shù)做出貢獻(xiàn)的部分或者該技術(shù)方案的全部或部分可以以軟件產(chǎn)品的形式體現(xiàn)出來(lái),該計(jì)算機(jī)軟件產(chǎn)品存儲(chǔ)在一個(gè)存儲(chǔ)介質(zhì)中,包括若干指令用以使得一臺(tái)計(jì)算機(jī)設(shè)備(可為個(gè)人計(jì)算機(jī)、服務(wù)器或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個(gè)實(shí)施例所述方法的全部或部分步驟。而前述的存儲(chǔ)介質(zhì)包括:u盤(pán)、只讀存儲(chǔ)器(rom,read-only memory)、隨機(jī)存取存儲(chǔ)器(ram,randomaccessmemory)、移動(dòng)硬盤(pán)、磁碟或者光盤(pán)等各種可以存儲(chǔ)程序代碼的介質(zhì)。
以上所述僅是本發(fā)明的優(yōu)選實(shí)施方式,應(yīng)當(dāng)指出,對(duì)于本技術(shù)領(lǐng)域的普通技術(shù)人員來(lái)說(shuō),在不脫離本發(fā)明原理的前提下,還可以做出若干改進(jìn)和潤(rùn)飾,這些改進(jìn)和潤(rùn)飾也應(yīng)視為本發(fā)明的保護(hù)范圍。