本技術(shù)涉及計算機,尤其涉及一種數(shù)據(jù)處理方法及其裝置。
背景技術(shù):
1、隨著金融機構(gòu)信息化水平的提升,數(shù)據(jù)庫信創(chuàng)改造成為業(yè)界關(guān)注的焦點。在此過程中,將傳統(tǒng)的oracle數(shù)據(jù)庫遷移至mysql數(shù)據(jù)庫,以適應(yīng)業(yè)務(wù)發(fā)展和成本控制的需要,成為了一項重要任務(wù)。然而,由于oracle和mysql在結(jié)構(gòu)化查詢語言(structured?querylanguage,sql)語法和功能上存在差異,導(dǎo)致java應(yīng)用程序中的sql語句需要進行相應(yīng)的改造,以確保程序的正常運行和性能優(yōu)化。
2、java應(yīng)用程序中的映射文件通常包含大量的sql語句與可擴展標記語言(extensible?markup?language,xml)語句,手動識別和修改其中的oracle語法與mysql語法差異繁瑣耗時,需要大量的人力資源和時間成本,而且容易出現(xiàn)人為錯誤,影響遷移效率和質(zhì)量。
技術(shù)實現(xiàn)思路
1、本公開提供一種數(shù)據(jù)處理方法及其裝置,以至少解決相關(guān)技術(shù)中手動識別和修改oracle語法與mysql語法差異效率低的問題。
2、本技術(shù)第一方面實施例提出了一種數(shù)據(jù)處理方法,包括:將源數(shù)據(jù)庫對應(yīng)的第一映射文件拆解為第一數(shù)據(jù)操縱語言dml片段,其中,第一dml片段由可擴展標記語言xml語言和源數(shù)據(jù)庫對應(yīng)的第一結(jié)構(gòu)化查詢語言sql語言組成;對第一dml片段進行預(yù)處理以獲取預(yù)處理之后生成的第一sql語句,其中,預(yù)處理包括將第一dml片段中的目標內(nèi)容轉(zhuǎn)化為sql注釋并生成鍵值對記錄;基于sql解釋器對第一sql語句進行解析以獲得抽象語法樹,并基于源數(shù)據(jù)庫到目標數(shù)據(jù)庫的轉(zhuǎn)換規(guī)則對抽象語法樹對應(yīng)的表達式進行轉(zhuǎn)換,以獲取目標數(shù)據(jù)庫對應(yīng)的第二sql語句;對第二sql語句進行后處理以生成目標數(shù)據(jù)庫對應(yīng)的第二dml片段,其中,后處理包括根據(jù)鍵值對記錄對第二sql語句進行還原,其中,第二dml片段由xml語言和目標數(shù)據(jù)庫對應(yīng)的第二sql語言組成;基于第二dml片段組成目標數(shù)據(jù)庫對應(yīng)的第二映射文件。
3、根據(jù)本技術(shù)的一個實施例,源數(shù)據(jù)庫為oracle數(shù)據(jù)庫,目標數(shù)據(jù)庫為mysql數(shù)據(jù)庫,對第一dml片段進行預(yù)處理以獲取預(yù)處理之后生成的第一sql語句,包括:對第一dml片段進行格式化以獲得格式化dml片段;對格式化dml片段的每一行代碼進行標記,標記內(nèi)容為首行、注釋行、數(shù)據(jù)行或尾行;將注釋行轉(zhuǎn)換為sql注釋,并根據(jù)sql注釋與注釋行生成鍵值對記錄;將數(shù)據(jù)行中的轉(zhuǎn)義字符按照轉(zhuǎn)換規(guī)則進行轉(zhuǎn)換;將數(shù)據(jù)行中的動態(tài)sql語句的開標簽和閉標簽依次轉(zhuǎn)換為sql注釋,并生成sql注釋與開標簽的鍵值對記錄以及sql注釋與閉標簽的鍵值對記錄;對注釋行和數(shù)據(jù)行進行拼接以生成第一sql語句。
4、根據(jù)本技術(shù)的一個實施例,生成sql注釋與開標簽的鍵值對記錄以及sql注釋與閉標簽的鍵值對記錄之后,還包括:判斷數(shù)據(jù)行中的mybatis變量中是否包含逗號符號;若mybatis變量中包含逗號符號,將mybatis變量轉(zhuǎn)換為sql注釋,并根據(jù)sql注釋與mybatis變量生成鍵值對記錄。
5、根據(jù)本技術(shù)的一個實施例,sql注釋攜帶數(shù)字標識,數(shù)字標識根據(jù)生成sql注釋的時間先后順序遞增。
6、根據(jù)本技術(shù)的一個實施例,基于sql解釋器對第一sql語句進行解析以獲得抽象語法樹,包括:基于sql解釋器對第一sql語句進行語法分析和語義分析以獲得抽象語法樹,其中,注釋行作為屬性掛靠到抽象語法樹對應(yīng)的表達式中。
7、根據(jù)本技術(shù)的一個實施例,對第二sql語句進行后處理以生成目標數(shù)據(jù)庫對應(yīng)的第二dml片段,包括:對第二sql語句中的轉(zhuǎn)義字符按照轉(zhuǎn)換規(guī)則進行還原;根據(jù)鍵值對記錄對第二sql語句中的sql注釋進行還原以獲得還原結(jié)果;在還原結(jié)果上添加首行和尾行以生成第二dml片段。
8、根據(jù)本技術(shù)的一個實施例,將源數(shù)據(jù)庫對應(yīng)的第一映射文件拆解為第一數(shù)據(jù)操縱語言dml片段,包括:識別第一映射文件中每段代碼的頭部的特定關(guān)鍵字;基于特定關(guān)鍵字,將第一映射文件拆解為第一dml片段,第一dml片段為select片段、insert片段、update片段和delete片段中的其中之一。
9、本技術(shù)第二方面實施例提出了一種數(shù)據(jù)處理裝置,包括:拆解模塊,用于將源數(shù)據(jù)庫對應(yīng)的第一映射文件拆解為第一數(shù)據(jù)操縱語言dml片段,其中,第一dml片段由可擴展標記語言xml語言和源數(shù)據(jù)庫對應(yīng)的第一結(jié)構(gòu)化查詢語言sql語言組成;預(yù)處理模塊,用于對第一dml片段進行預(yù)處理以獲取預(yù)處理之后生成的第一sql語句,其中,預(yù)處理包括將第一dml片段中的目標內(nèi)容轉(zhuǎn)化為sql注釋并生成鍵值對記錄;轉(zhuǎn)換模塊,用于基于sql解釋器對第一sql語句進行解析以獲得抽象語法樹,并基于源數(shù)據(jù)庫到目標數(shù)據(jù)庫的轉(zhuǎn)換規(guī)則對抽象語法樹對應(yīng)的表達式進行轉(zhuǎn)換,以獲取目標數(shù)據(jù)庫對應(yīng)的第二sql語句;后處理模塊,用于對第二sql語句進行后處理以生成目標數(shù)據(jù)庫對應(yīng)的第二dml片段,其中,后處理包括根據(jù)鍵值對記錄對第二sql語句進行還原,其中,第二dml片段由xml語言和目標數(shù)據(jù)庫對應(yīng)的第二sql語言組成;組裝模塊,用于基于第二dml片段組成目標數(shù)據(jù)庫對應(yīng)的第二映射文件。根據(jù)本技術(shù)的一個實施例,源數(shù)據(jù)庫為oracle數(shù)據(jù)庫,目標數(shù)據(jù)庫為mysql數(shù)據(jù)庫,預(yù)處理模塊,還用于:對第一dml片段進行格式化以獲得格式化dml片段;對格式化dml片段的每一行代碼進行標記,標記內(nèi)容為首行、注釋行、數(shù)據(jù)行或尾行;將注釋行轉(zhuǎn)換為sql注釋,并根據(jù)sql注釋與注釋行生成鍵值對記錄;將數(shù)據(jù)行中的轉(zhuǎn)義字符按照轉(zhuǎn)換規(guī)則進行轉(zhuǎn)換;將數(shù)據(jù)行中的動態(tài)sql語句的開標簽和閉標簽依次轉(zhuǎn)換為sql注釋,并生成sql注釋與開標簽的鍵值對記錄以及sql注釋與閉標簽的鍵值對記錄;對注釋行和數(shù)據(jù)行進行拼接以生成第一sql語句。
10、根據(jù)本技術(shù)的一個實施例,預(yù)處理模塊,還用于:判斷數(shù)據(jù)行中的mybatis變量中是否包含逗號符號;若mybatis變量中包含逗號符號,將mybatis變量轉(zhuǎn)換為sql注釋,并根據(jù)sql注釋與mybatis變量生成鍵值對記錄。
11、根據(jù)本技術(shù)的一個實施例,預(yù)處理模塊中所涉及到的sql注釋攜帶數(shù)字標識,數(shù)字標識根據(jù)生成sql注釋的時間先后順序遞增。
12、根據(jù)本技術(shù)的一個實施例,轉(zhuǎn)換模塊,還用于:基于sql解釋器對第一sql語句進行語法分析和語義分析以獲得抽象語法樹,其中,注釋行作為屬性掛靠到抽象語法樹對應(yīng)的表達式中。
13、根據(jù)本技術(shù)的一個實施例,后處理模塊,還用于:對第二sql語句中的轉(zhuǎn)義字符按照轉(zhuǎn)換規(guī)則進行還原;根據(jù)鍵值對記錄對第二sql語句中的sql注釋進行還原以獲得還原結(jié)果;在還原結(jié)果上添加首行和尾行以生成第二dml片段。
14、根據(jù)本技術(shù)的一個實施例,拆解模塊,還用于:識別第一映射文件中每段代碼的頭部的特定關(guān)鍵字;基于特定關(guān)鍵字,將第一映射文件拆解為第一dml片段,第一dml片段為select片段、insert片段、update片段和delete片段中的其中之一。
15、本技術(shù)第三方面實施例提出了一種電子設(shè)備,包括:至少一個處理器;以及與所述至少一個處理器通信連接的存儲器;其中,所述存儲器存儲有可被所述至少一個處理器執(zhí)行的指令,所述指令被所述至少一個處理器執(zhí)行,以實現(xiàn)如本技術(shù)第一方面實施例所述的數(shù)據(jù)處理方法。
16、本技術(shù)第四方面實施例提出了一種存儲有計算機指令的非瞬時計算機可讀存儲介質(zhì),其中,所述計算機指令用于實現(xiàn)如本技術(shù)第一方面實施例所述的數(shù)據(jù)處理方法。
17、本技術(shù)第五方面實施例提出了一種計算機程序產(chǎn)品,包括計算機程序,所述計算機程序在被處理器執(zhí)行時實現(xiàn)如本技術(shù)第一方面實施例所述的數(shù)據(jù)處理方法。
18、本公開的實施例提供的技術(shù)方案至少帶來以下有益效果:本技術(shù)在生成抽象語法樹之前首先對源數(shù)據(jù)庫對應(yīng)的第一映射文件進行拆解以生成第一dml片段,并對第一dml片段進行預(yù)處理以將第一dml片段從2種語言轉(zhuǎn)換為只存在一種sql語言的第一sql語句,在基于第一sql語句對應(yīng)的抽象語法樹進行sql解析和轉(zhuǎn)換為第二sql語句之后,再通過后處理實現(xiàn)第二sql語句其他相關(guān)部分的還原,從而生成包含兩種語言的第二dml片段,本技術(shù)實現(xiàn)了源數(shù)據(jù)庫對應(yīng)的映射文件從2種語言到一種語言的轉(zhuǎn)換,然后再轉(zhuǎn)換為目標數(shù)據(jù)庫對應(yīng)的包含2種語言的映射文件,可以提高數(shù)據(jù)轉(zhuǎn)換的準確性和效率,減少人工操作可能帶來的錯誤。
19、應(yīng)當(dāng)理解的是,以上的一般描述和后文的細節(jié)描述僅是示例性和解釋性的,并不能限制本公開。