本發(fā)明涉及一種基于元數(shù)據(jù)文件的異構(gòu)數(shù)據(jù)庫(kù)間表結(jié)構(gòu)自適應(yīng)方法及裝置,屬于數(shù)據(jù)庫(kù)管理。
背景技術(shù):
1、在金融行業(yè)中,由于業(yè)務(wù)系統(tǒng)的多樣性和復(fù)雜性,表結(jié)構(gòu)頻繁變更成為常態(tài)。然而,現(xiàn)有的數(shù)據(jù)庫(kù)表結(jié)構(gòu)變更方式嚴(yán)重依賴源系統(tǒng)的通知,需要人工進(jìn)行影響分析和腳本開發(fā)。
2、這種人工方式存在諸多不足:首先,運(yùn)維成本高且易出錯(cuò),因?yàn)樾枰幚頂?shù)百個(gè)系統(tǒng)和上萬(wàn)張表的頻繁變更,人工工作量大,且在復(fù)雜環(huán)境下容易引發(fā)數(shù)據(jù)質(zhì)量問題;其次,系統(tǒng)耦合度高,源系統(tǒng)與數(shù)據(jù)系統(tǒng)之間的變更強(qiáng)耦合,一旦變更不同步,就容易引發(fā)批量報(bào)錯(cuò);最后,異構(gòu)數(shù)據(jù)庫(kù)轉(zhuǎn)換困難,由于不同數(shù)據(jù)庫(kù)系統(tǒng)(如tdh、gauss?db?(dws)等)在語(yǔ)法、字段類型及長(zhǎng)度定義等方面存在顯著差異,手工轉(zhuǎn)換極易引發(fā)異常。
3、因此,亟需一種自動(dòng)化、低耦合的異構(gòu)數(shù)據(jù)庫(kù)表結(jié)構(gòu)自適應(yīng)方法來(lái)解決上述問題。
技術(shù)實(shí)現(xiàn)思路
1、為了解決現(xiàn)有技術(shù)中數(shù)據(jù)庫(kù)表結(jié)構(gòu)變更帶來(lái)的運(yùn)維工作量大、變更靈活性差以及與源業(yè)務(wù)系統(tǒng)耦合度高的問題,本發(fā)明提出了一種基于元數(shù)據(jù)文件的異構(gòu)數(shù)據(jù)庫(kù)間表結(jié)構(gòu)自適應(yīng)方法及裝置。
2、本發(fā)明為解決其技術(shù)問題所采取的技術(shù)方案是:
3、第一方面,本發(fā)明實(shí)施例提供的一種基于元數(shù)據(jù)文件的異構(gòu)數(shù)據(jù)庫(kù)間表結(jié)構(gòu)自適應(yīng)方法,包括如下步驟:
4、步驟s1,從源業(yè)務(wù)系統(tǒng)獲取數(shù)據(jù),并生成元數(shù)據(jù)信息文件,所述元數(shù)據(jù)信息文件為ddl表結(jié)構(gòu)信息文件;
5、步驟s2,解析所述ddl表結(jié)構(gòu)信息文件,校驗(yàn)核對(duì)并提取表結(jié)構(gòu)信息,所述表結(jié)構(gòu)信息包括表名、字段名、字段順序、字段類型、字段長(zhǎng)度及字段注釋;
6、步驟s3,基于解析的元數(shù)據(jù)信息,通過異構(gòu)數(shù)據(jù)庫(kù)字段類型和長(zhǎng)度轉(zhuǎn)換映射關(guān)系,進(jìn)行ddl源數(shù)據(jù)庫(kù)類型、長(zhǎng)度和目標(biāo)數(shù)據(jù)庫(kù)字段類型、長(zhǎng)度的映射轉(zhuǎn)換,形成轉(zhuǎn)換后的ddl信息;
7、步驟s4,基于轉(zhuǎn)換后的ddl信息,判斷數(shù)據(jù)源連接,獲取數(shù)據(jù)庫(kù)類型,創(chuàng)建數(shù)據(jù)庫(kù)外表或臨時(shí)表,所述數(shù)據(jù)庫(kù)外表或臨時(shí)表支持多法人行同時(shí)并行執(zhí)行;
8、步驟s5,通過比較數(shù)據(jù)庫(kù)外表或臨時(shí)表和正式表的元數(shù)據(jù)信息,識(shí)別表結(jié)構(gòu)差異,自動(dòng)適配數(shù)據(jù)庫(kù)正式表的結(jié)構(gòu)信息,實(shí)現(xiàn)表結(jié)構(gòu)自適應(yīng)。
9、作為本實(shí)施例一種可能的實(shí)現(xiàn)方式,所述步驟s1,包括:
10、步驟s11,基于標(biāo)準(zhǔn)下檔規(guī)范,從源業(yè)務(wù)系統(tǒng)中獲取表的元數(shù)據(jù)ddl信息;
11、步驟s12,?根據(jù)所述元數(shù)據(jù)ddl信息生成xml格式的元數(shù)據(jù)文件,所述元數(shù)據(jù)文件的命名格式為<行號(hào)>_<日期>_<表名>_<頻度標(biāo)志>_<抽取策略>.ddl;所述元數(shù)據(jù)文件包括文件頭和內(nèi)容主體兩部分;
12、步驟s13,按照預(yù)設(shè)的下檔頻率,將生成的元數(shù)據(jù)文件與對(duì)應(yīng)的數(shù)據(jù)文件同步下檔。
13、作為本實(shí)施例一種可能的實(shí)現(xiàn)方式,所述標(biāo)準(zhǔn)下檔規(guī)范定義了所述數(shù)據(jù)文件、元數(shù)據(jù)文件和校驗(yàn)文件的格式要求、內(nèi)容組織方式以及相互之間的關(guān)聯(lián)關(guān)系。
14、作為本實(shí)施例一種可能的實(shí)現(xiàn)方式,所述文件頭包含元數(shù)據(jù)的版本信息和生成時(shí)間,所述內(nèi)容主體包含表的字段定義、數(shù)據(jù)類型和字段描述信息。
15、作為本實(shí)施例一種可能的實(shí)現(xiàn)方式,所述步驟s2,包括:
16、步驟s21,按照標(biāo)準(zhǔn)下檔規(guī)范解析ddl表結(jié)構(gòu)信息文件;
17、步驟s22,基于解析得到的下檔元數(shù)據(jù)ddl文件,按照xml下檔規(guī)范,進(jìn)行解析元數(shù)據(jù)xml文件;
18、步驟s23,從解析后的元數(shù)據(jù)xml文件中,對(duì)表名、數(shù)據(jù)庫(kù)類型、字段個(gè)數(shù)和字段類型長(zhǎng)度進(jìn)行格式校驗(yàn);再進(jìn)行獲取表名、字段名、字段順序、字段類型、字段長(zhǎng)度以及中文注釋的結(jié)構(gòu)信息。
19、作為本實(shí)施例一種可能的實(shí)現(xiàn)方式,所述步驟s21包括:
20、讀取ddl表結(jié)構(gòu)信息文件;
21、根據(jù)標(biāo)準(zhǔn)下檔規(guī)范解析ddl表結(jié)構(gòu)信息文件中的表結(jié)構(gòu)定義。
22、作為本實(shí)施例一種可能的實(shí)現(xiàn)方式,所述步驟s22包括:
23、讀取元數(shù)據(jù)xml文件;
24、根據(jù)xml下檔規(guī)范,解析元數(shù)據(jù)xml文件中的元數(shù)據(jù)標(biāo)簽,以獲取表結(jié)構(gòu)信息。
25、作為本實(shí)施例一種可能的實(shí)現(xiàn)方式,所述步驟s23包括:
26、遍歷解析后的元數(shù)據(jù)xml文件;
27、根據(jù)元數(shù)據(jù)xml文件中的標(biāo)簽,分別提取表名、字段名、字段順序、字段類型、字段長(zhǎng)度以及中文注釋。
28、作為本實(shí)施例一種可能的實(shí)現(xiàn)方式,所述步驟s3,包括:
29、步驟s31,讀取數(shù)據(jù)源連接配置,獲取目標(biāo)數(shù)據(jù)庫(kù)類型;
30、步驟s32,讀取所述目標(biāo)數(shù)據(jù)庫(kù)的字段類型映射表,獲取字段類型和長(zhǎng)度的映射關(guān)系;所述字段類型映射表或自行設(shè)置規(guī)范,或采用固定配置,支持字段類型映射、長(zhǎng)度倍數(shù)擴(kuò)位、最大長(zhǎng)度限制和默認(rèn)值,且不同數(shù)據(jù)庫(kù)間互不影響;
31、步驟s33,基于解析的元數(shù)據(jù)信息,通過所述目標(biāo)數(shù)據(jù)庫(kù)的字段類型和長(zhǎng)度轉(zhuǎn)換映射關(guān)系,將ddl源數(shù)據(jù)庫(kù)字段類型、長(zhǎng)度映射轉(zhuǎn)換為所述目標(biāo)數(shù)據(jù)庫(kù)字段類型、長(zhǎng)度,形成最新的轉(zhuǎn)換后的ddl信息。
32、作為本實(shí)施例一種可能的實(shí)現(xiàn)方式,所述字段類型映射表需提前配置,且目標(biāo)數(shù)據(jù)庫(kù)不同時(shí),映射關(guān)系存在差異,需基于各自的開發(fā)規(guī)范按需自行配置。
33、作為本實(shí)施例一種可能的實(shí)現(xiàn)方式,在步驟s33中,處理源數(shù)據(jù)庫(kù)字段類型和目標(biāo)數(shù)據(jù)庫(kù)字段的類型、長(zhǎng)度差異,確保準(zhǔn)確轉(zhuǎn)換為目標(biāo)數(shù)據(jù)庫(kù)的字段類型和長(zhǎng)度。
34、作為本實(shí)施例一種可能的實(shí)現(xiàn)方式,所述步驟s4,包括:
35、步驟s41,基于最新映射轉(zhuǎn)換后的ddl信息,判斷數(shù)據(jù)源連接,獲取數(shù)據(jù)庫(kù)類型;
36、步驟s42,讀取數(shù)據(jù)源連接配置,根據(jù)所述數(shù)據(jù)庫(kù)類型,獲取最新的映射后的ddl字段信息;
37、步驟s43,遵循命名規(guī)范要求,按照一家法人行、一個(gè)表建創(chuàng)建一個(gè)外表的規(guī)則,創(chuàng)建數(shù)據(jù)庫(kù)外表或臨時(shí)表;
38、其中,所述創(chuàng)建數(shù)據(jù)庫(kù)外表或臨時(shí)表的具體過程為:
39、判斷是否每次都創(chuàng)建外表的方式,若是,則每次進(jìn)行外表刪除后按照ddl字段信息進(jìn)行創(chuàng)建數(shù)據(jù)庫(kù)外表或臨時(shí)表,所述外表包括數(shù)據(jù)庫(kù)外表或臨時(shí)表;
40、若否,則判斷ddl和當(dāng)前數(shù)據(jù)庫(kù)外表或臨時(shí)表是否存在結(jié)構(gòu)差異,進(jìn)行結(jié)構(gòu)對(duì)比,存在差異則重建外表,不存在則默認(rèn)表結(jié)構(gòu)無(wú)變化,無(wú)需每次創(chuàng)建表;或采用volatile創(chuàng)建臨時(shí)表,元數(shù)據(jù)不記錄的方式。
41、作為本實(shí)施例一種可能的實(shí)現(xiàn)方式,所述創(chuàng)建數(shù)據(jù)庫(kù)外表或臨時(shí)表的步驟,包括:
42、對(duì)于統(tǒng)建系統(tǒng),按照全行統(tǒng)一建設(shè)的系統(tǒng)結(jié)構(gòu)創(chuàng)建外表;
43、對(duì)于自建系統(tǒng),按照成員行自己建設(shè)的系統(tǒng)結(jié)構(gòu),各自行創(chuàng)建外表。
44、作為本實(shí)施例一種可能的實(shí)現(xiàn)方式,所述判斷是否需要按需創(chuàng)建外表的步驟為:
45、根據(jù)預(yù)設(shè)條件或用戶輸入,確定是否進(jìn)行按需創(chuàng)建外表的操作,以避免頻繁操作目標(biāo)數(shù)據(jù)庫(kù)元數(shù)據(jù)導(dǎo)致的元數(shù)據(jù)壓力過大。
46、作為本實(shí)施例一種可能的實(shí)現(xiàn)方式,所述判斷ddl和當(dāng)前外表是否存在結(jié)構(gòu)差異的步驟為:
47、比較ddl字段信息與當(dāng)前外表的字段信息,若存在差異,則確定需要重建外表。
48、作為本實(shí)施例一種可能的實(shí)現(xiàn)方式,所述步驟s5,包括:
49、步驟s51,?進(jìn)行表結(jié)構(gòu)對(duì)比,基于數(shù)據(jù)庫(kù)外表或臨時(shí)表和正式表進(jìn)行元數(shù)據(jù)信息比對(duì),獲取結(jié)構(gòu)變更清單,生成結(jié)構(gòu)變更清單sql,所述結(jié)構(gòu)對(duì)比包括字段順序、名稱、類型、長(zhǎng)度和備注的比對(duì);
50、步驟s52,?獲取表結(jié)構(gòu)變更鎖,多法人行并行處理時(shí),僅允許獲取到鎖的法人行執(zhí)行表結(jié)構(gòu)變更;
51、步驟s53,根據(jù)所述結(jié)構(gòu)變更清單sql執(zhí)行數(shù)據(jù)庫(kù)表結(jié)構(gòu)變更;
52、步驟s54,執(zhí)行結(jié)構(gòu)信息檢核校驗(yàn),核對(duì)結(jié)構(gòu)變更是否一致,并生成變更清單日志。
53、作為本實(shí)施例一種可能的實(shí)現(xiàn)方式,所述進(jìn)行表結(jié)構(gòu)對(duì)比,包括:
54、新增表判斷,若目標(biāo)數(shù)據(jù)庫(kù)主表不存在則新建表;
55、新增字段判斷,基于字段順序和名稱不一致時(shí)記錄新增字段變更信息;
56、刪除字段處理,不允許數(shù)據(jù)庫(kù)正式表進(jìn)行字段刪除,按照字段映射關(guān)系將刪除字段賦空值處理;
57、字段類型修改判斷,基于字段類型不一致時(shí)記錄字段類型變更信息;
58、字段長(zhǎng)度修改判斷,基于字段長(zhǎng)度或精度不一致時(shí)記錄字段長(zhǎng)度變更信息;
59、字段中文注釋變更判斷,基于中文注釋不一致時(shí)記錄字段中文注釋變更信息;
60、變更鎖判斷,基于變更表結(jié)構(gòu)和法人行,獲取表結(jié)構(gòu)變更鎖,僅允許獲取到鎖的法人行執(zhí)行表結(jié)構(gòu)變更,其他行則進(jìn)行sleep等待鎖釋放,避免多行同時(shí)執(zhí)行,重復(fù)操作目標(biāo)表表結(jié)構(gòu),影響數(shù)據(jù)準(zhǔn)確性和執(zhí)行效率;鎖分為兩級(jí),元數(shù)據(jù)鎖和歸檔執(zhí)行鎖,元數(shù)據(jù)變更時(shí)添加元數(shù)據(jù)鎖,變更完成后鎖釋放,繼續(xù)執(zhí)行歸檔入庫(kù)操作時(shí),添加歸檔執(zhí)行鎖,解決單行同時(shí)多次重復(fù)執(zhí)行的問題,避免數(shù)據(jù)錯(cuò)亂、重復(fù),但不影響多行同時(shí)執(zhí)行。
61、作為本實(shí)施例一種可能的實(shí)現(xiàn)方式,所述獲取表結(jié)構(gòu)變更鎖,包括:
62、每家法人行執(zhí)行表結(jié)構(gòu)變更前嘗試獲取結(jié)構(gòu)變更鎖,獲取不到鎖的法人行則等待指定時(shí)間后重新嘗試獲取鎖,直至獲取鎖或表結(jié)構(gòu)核對(duì)一致。
63、作為本實(shí)施例一種可能的實(shí)現(xiàn)方式,所述執(zhí)行數(shù)據(jù)庫(kù)表結(jié)構(gòu)變更包括:
64、基于核對(duì)的結(jié)構(gòu)差異性變更清單sql,執(zhí)行sql變更操作,完成表結(jié)構(gòu)更新,并記錄變更日志。
65、作為本實(shí)施例一種可能的實(shí)現(xiàn)方式,所述執(zhí)行結(jié)構(gòu)信息檢核校驗(yàn)包括:
66、根據(jù)下檔的ddl文件,核對(duì)結(jié)構(gòu)變更是否一致,檢查是否存在遺漏或變更錯(cuò)誤的情況,形成變更清單日志。
67、第二方面,本發(fā)明實(shí)施例提供的一種基于元數(shù)據(jù)文件的異構(gòu)數(shù)據(jù)庫(kù)間表結(jié)構(gòu)自適應(yīng)裝置,包括:
68、數(shù)據(jù)采集模塊,用于從源業(yè)務(wù)系統(tǒng)獲取數(shù)據(jù),并生成元數(shù)據(jù)信息文件,所述元數(shù)據(jù)信息文件為ddl表結(jié)構(gòu)信息文件;
69、文件解析模塊,用于解析所述ddl表結(jié)構(gòu)信息文件,校驗(yàn)核對(duì)并提取表結(jié)構(gòu)信息,所述表結(jié)構(gòu)信息包括表名、字段名、字段順序、字段類型、字段長(zhǎng)度及字段注釋;
70、映射轉(zhuǎn)換模塊,用于基于解析的元數(shù)據(jù)信息,通過異構(gòu)數(shù)據(jù)庫(kù)字段類型和長(zhǎng)度轉(zhuǎn)換映射關(guān)系,進(jìn)行ddl源數(shù)據(jù)庫(kù)類型、長(zhǎng)度和目標(biāo)數(shù)據(jù)庫(kù)字段類型、長(zhǎng)度的映射轉(zhuǎn)換,形成轉(zhuǎn)換后的ddl信息;
71、外表創(chuàng)建模塊,用于基于轉(zhuǎn)換后的ddl信息,判斷數(shù)據(jù)源連接,獲取數(shù)據(jù)庫(kù)類型,創(chuàng)建數(shù)據(jù)庫(kù)外表或臨時(shí)表,所述數(shù)據(jù)庫(kù)外表或臨時(shí)表支持多法人行同時(shí)并行執(zhí)行;
72、自適應(yīng)適配模塊,用于通過比較數(shù)據(jù)庫(kù)外表或臨時(shí)表和正式表的元數(shù)據(jù)信息,識(shí)別表結(jié)構(gòu)差異,自動(dòng)適配數(shù)據(jù)庫(kù)正式表的結(jié)構(gòu)信息,實(shí)現(xiàn)表結(jié)構(gòu)自適應(yīng)。
73、本發(fā)明實(shí)施例的技術(shù)方案所產(chǎn)生的有益效果如下:
74、本發(fā)明實(shí)現(xiàn)了基于元數(shù)據(jù)信息實(shí)現(xiàn)異構(gòu)數(shù)據(jù)庫(kù)之間的表結(jié)構(gòu)自適應(yīng),提高了表結(jié)構(gòu)變更的效率和準(zhǔn)確性;兼容多數(shù)據(jù)庫(kù)類型,支持多發(fā)人批量模式和不同行一套表結(jié)構(gòu)或多套表結(jié)構(gòu)場(chǎng)景,滿足了不同企業(yè)類型的需求;通過元數(shù)據(jù)信息的自動(dòng)表結(jié)構(gòu)的變更,提升了工作效率和數(shù)據(jù)質(zhì)量,有效降低日常運(yùn)營(yíng)成本。
75、基于本發(fā)明技術(shù)方案構(gòu)建的運(yùn)行系統(tǒng),在源業(yè)務(wù)系統(tǒng)下檔數(shù)據(jù)的同時(shí)同步下檔元數(shù)據(jù)信息,數(shù)據(jù)系統(tǒng)基于元數(shù)據(jù)信息,跑批期間自動(dòng)進(jìn)行表結(jié)構(gòu)變更,大幅降低了人工變更的投入成本,解決了源業(yè)務(wù)系統(tǒng)和數(shù)據(jù)系統(tǒng)的強(qiáng)耦合問題,還可基于元數(shù)據(jù)信息對(duì)下檔的業(yè)務(wù)數(shù)據(jù)進(jìn)行質(zhì)量檢核,有效提升了數(shù)據(jù)質(zhì)量。