本發(fā)明涉及數(shù)據(jù)傳輸技術(shù)領(lǐng)域,特別是涉及一種將數(shù)據(jù)從hive導(dǎo)入傳統(tǒng)數(shù)據(jù)倉庫的方法及裝置。
背景技術(shù):
隨著互聯(lián)網(wǎng)技術(shù)的普及以及現(xiàn)代企業(yè)對于數(shù)據(jù)的重視,企業(yè)日常經(jīng)營過程中記錄的數(shù)據(jù)量呈指數(shù)級增長,因此,通常采用數(shù)據(jù)倉庫來存儲數(shù)據(jù)。傳統(tǒng)的數(shù)據(jù)倉庫(例如,mysql、oracle、postgres等)在數(shù)據(jù)量過大時(shí)將會導(dǎo)致提取數(shù)據(jù)緩慢。在此基礎(chǔ)上,采用hadoop(一種分布式系統(tǒng)基礎(chǔ)架構(gòu))+hive的數(shù)據(jù)倉庫模式,使得數(shù)據(jù)倉庫在數(shù)據(jù)量上不再有限制,在一定程度上解決了上述問題,但也有靈活性不足的缺點(diǎn)。
因此,現(xiàn)有技術(shù)中,將該模式的數(shù)據(jù)倉庫與傳統(tǒng)數(shù)據(jù)倉庫結(jié)合使用,只將存儲、基本分析、提取放在hadoop+hive的數(shù)據(jù)倉庫上,更為復(fù)雜的放在傳統(tǒng)數(shù)據(jù)倉庫中,二者可以互為補(bǔ)充。
為了實(shí)現(xiàn)上述兩種數(shù)據(jù)倉庫的數(shù)據(jù)傳輸,企業(yè)需要利用一種便捷的數(shù)據(jù)傳輸工具或方法將數(shù)據(jù)在企業(yè)內(nèi)不同數(shù)據(jù)倉庫之間進(jìn)行傳輸?,F(xiàn)有的傳輸工具sqoop是實(shí)現(xiàn)不同數(shù)據(jù)倉庫之間數(shù)據(jù)導(dǎo)入導(dǎo)出的一個(gè)工具。但是,這種方法在軟件編寫過程中較為繁瑣,且需要明確指明hdfs和明確標(biāo)明行、列分隔符。
由此可見,在將數(shù)據(jù)導(dǎo)入傳統(tǒng)數(shù)據(jù)倉庫的過程中,如何克服軟件編寫繁瑣,以及克服需要明確指明hdfs和明確標(biāo)明行、列分隔符的問題是本領(lǐng)域技術(shù)人員亟待解決地問題。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的是提供一種將數(shù)據(jù)從hive導(dǎo)入傳統(tǒng)數(shù)據(jù)倉庫的方法及裝置,用于在將數(shù)據(jù)導(dǎo)入傳統(tǒng)數(shù)據(jù)倉庫的過程中,克服軟件編寫繁瑣,以及克服需要明確指明hdfs和明確標(biāo)明行、列分隔符的問題。
為解決上述技術(shù)問題,本發(fā)明提供一種將數(shù)據(jù)從hive導(dǎo)入傳統(tǒng)數(shù)據(jù)倉庫的方法,包括:
繼承hive中的基礎(chǔ)類,并根據(jù)用戶輸入的參數(shù)編寫新類;
依據(jù)所述參數(shù)在所述新類中重構(gòu)evaluate函數(shù),并組裝insert語句;
當(dāng)接收到用戶的導(dǎo)入指令時(shí),調(diào)用所述insert語句以將數(shù)據(jù)從hive導(dǎo)入傳統(tǒng)數(shù)據(jù)倉庫中。
優(yōu)選地,還包括:
在所述數(shù)據(jù)從hive導(dǎo)入所述傳統(tǒng)數(shù)據(jù)倉庫的過程中,調(diào)用trycatch語句以捕捉錯(cuò)誤信息。
優(yōu)選地,還包括:
當(dāng)捕捉到所述錯(cuò)誤信息時(shí),通過日志記錄所述錯(cuò)誤信息。
優(yōu)選地,還包括:
在所述數(shù)據(jù)從hive導(dǎo)入所述傳統(tǒng)數(shù)據(jù)倉庫的過程中,依據(jù)服務(wù)器的忙閑狀態(tài)設(shè)置數(shù)據(jù)傳輸量的最大值。
優(yōu)選地,所述參數(shù)具體包括:控制連接數(shù)據(jù)庫的字符串、表名、需要入表的字段名。
為解決上述技術(shù)問題,本發(fā)明還提供一種將數(shù)據(jù)從hive導(dǎo)入傳統(tǒng)數(shù)據(jù)倉庫的裝置,包括:
編寫單元,用于繼承hive中的基礎(chǔ)類,并根據(jù)用戶輸入的參數(shù)編寫新類;
組裝單元,用于依據(jù)所述參數(shù)在所述新類中重構(gòu)evaluate函數(shù),并組裝insert語句;
調(diào)用單元,用于當(dāng)接收到用戶的導(dǎo)入指令時(shí),調(diào)用所述insert語句以將數(shù)據(jù)從hive導(dǎo)入傳統(tǒng)數(shù)據(jù)倉庫中。
優(yōu)選地,還包括:
捕捉單元,用于在所述數(shù)據(jù)從hive導(dǎo)入所述傳統(tǒng)數(shù)據(jù)倉庫的過程中,調(diào)用trycatch語句以捕捉錯(cuò)誤信息。
優(yōu)選地,還包括:
記錄單元,用于當(dāng)捕捉到所述錯(cuò)誤信息時(shí),通過日志記錄所述錯(cuò)誤信息。
優(yōu)選地,還包括:
設(shè)置單元,用于在所述數(shù)據(jù)從hive導(dǎo)入所述傳統(tǒng)數(shù)據(jù)倉庫的過程中,依據(jù)服務(wù)器的忙閑狀態(tài)設(shè)置數(shù)據(jù)傳輸量的最大值。
優(yōu)選地,所述參數(shù)具體包括:控制連接數(shù)據(jù)庫的字符串、表名、需要入表的字段名。
本發(fā)明所提供的將數(shù)據(jù)從hive導(dǎo)入傳統(tǒng)數(shù)據(jù)倉庫的方法,包括繼承hive中的基礎(chǔ)類,并根據(jù)用戶輸入的參數(shù)編寫新類;依據(jù)參數(shù)在新類中重構(gòu)evaluate函數(shù),并組裝insert語句;當(dāng)接收到用戶的導(dǎo)入指令時(shí),調(diào)用insert語句以將數(shù)據(jù)從hive導(dǎo)入傳統(tǒng)數(shù)據(jù)倉庫中。由此可見,將數(shù)據(jù)導(dǎo)入傳統(tǒng)數(shù)據(jù)倉庫傳統(tǒng)數(shù)據(jù)倉庫的過程中,本方法無需指明hdfs和行、列分隔符,且能夠克服軟件編寫繁瑣的問題。此外,本發(fā)明還提供一種將數(shù)據(jù)從hive導(dǎo)入傳統(tǒng)數(shù)據(jù)倉庫的裝置,效果如上所述。
附圖說明
為了更清楚地說明本發(fā)明實(shí)施例,下面將對實(shí)施例中所需要使用的附圖做簡單的介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為本發(fā)明實(shí)施例提供的一種將數(shù)據(jù)從hive導(dǎo)入傳統(tǒng)數(shù)據(jù)倉庫的方法的流程圖;
圖2為本發(fā)明實(shí)施例提供的一種將數(shù)據(jù)從hive導(dǎo)入傳統(tǒng)數(shù)據(jù)倉庫的裝置的結(jié)構(gòu)圖。
具體實(shí)施方式
下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下,所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)范圍。
本發(fā)明的核心是提供一種將數(shù)據(jù)從hive導(dǎo)入傳統(tǒng)數(shù)據(jù)倉庫的方法及裝置,用于在將數(shù)據(jù)導(dǎo)入傳統(tǒng)數(shù)據(jù)倉庫的過程中,克服軟件編寫繁瑣,以及克服需要明確指明hdfs和明確標(biāo)明行、列分隔符的問題。
為了使本技術(shù)領(lǐng)域的人員更好地理解本發(fā)明方案,下面結(jié)合附圖和具體實(shí)施方式對本發(fā)明作進(jìn)一步的詳細(xì)說明。
圖1為本發(fā)明實(shí)施例提供的一種將數(shù)據(jù)從hive導(dǎo)入傳統(tǒng)數(shù)據(jù)倉庫的方法的流程圖。如圖1所示,將數(shù)據(jù)從hive導(dǎo)入傳統(tǒng)數(shù)據(jù)倉庫的方法包括:
s10:繼承hive中的基礎(chǔ)類,并根據(jù)用戶輸入的參數(shù)編寫新類。
可以理解的是,hive中具有基礎(chǔ)類,用于實(shí)現(xiàn)通用的功能,例如開機(jī)、關(guān)機(jī)等。而本實(shí)施例中需要實(shí)現(xiàn)的功能是將數(shù)據(jù)從hive中導(dǎo)入至傳統(tǒng)數(shù)據(jù)倉庫,因此,需要根據(jù)用戶輸入的參數(shù)對基礎(chǔ)類進(jìn)行再次編寫,得到新類。后文中的步驟,就是在這個(gè)新類中實(shí)現(xiàn)。
由于hive中有表,是按照一列一列的方式記載的,因此,按照該表的方式就無需指明hdfs和行、列分隔符。
作為優(yōu)選地實(shí)施方式,參數(shù)具體包括:控制連接數(shù)據(jù)庫的字符串、表名、需要入表的字段名。
可以理解的是,上述幾個(gè)參數(shù)只是一種具體的應(yīng)用場景,并不代表只能是這幾個(gè)參數(shù)。其他參數(shù)對應(yīng)的實(shí)施例,本發(fā)明不再贅述。
s11:依據(jù)參數(shù)在新類中重構(gòu)evaluate函數(shù),并組裝insert語句。
在步驟s10得到的新類中,對新類中的evaluate函數(shù)進(jìn)行重構(gòu),并組裝insert語句。此步驟完成了整個(gè)數(shù)據(jù)導(dǎo)入的前期工作,相當(dāng)于對一個(gè)軟件進(jìn)行了打包操作。對于客戶端來說,只需要將這一軟件下載下來,進(jìn)行相應(yīng)的操作即可,具體使用方法如下(以傳統(tǒng)數(shù)據(jù)倉庫為mysql為例說明):
(1)在hive客戶端上配置環(huán)境,包括:
啟動hive客戶端,用addjar/data/work/task/cmn/udf.jar命令在hive客戶端中添加udf.jar;
用createtemporaryfunctionhive2mysqlpooledas'com.cmn.transdatahive2mysqlpooled'命令創(chuàng)建臨時(shí)函數(shù);
(2)使用select查詢對應(yīng)的hive中需要導(dǎo)入的數(shù)據(jù),使用臨時(shí)函數(shù)調(diào)用查出來的數(shù)據(jù)以便執(zhí)行將數(shù)據(jù)導(dǎo)入mysql的操作。
s12:當(dāng)接收到用戶的導(dǎo)入指令時(shí),調(diào)用insert語句以將數(shù)據(jù)從hive導(dǎo)入傳統(tǒng)數(shù)據(jù)倉庫中。
當(dāng)需要進(jìn)行數(shù)據(jù)導(dǎo)入時(shí),用戶會輸入導(dǎo)入指令,可以理解的是,導(dǎo)入指令包含有需要導(dǎo)入的數(shù)據(jù)。在具體實(shí)施中,當(dāng)接收到導(dǎo)入指令時(shí),就調(diào)用insert語句,從而將數(shù)據(jù)從hive導(dǎo)入傳統(tǒng)數(shù)據(jù)倉庫中。
本實(shí)施例提供的將數(shù)據(jù)從hive導(dǎo)入傳統(tǒng)數(shù)據(jù)倉庫的方法,包括繼承hive中的基礎(chǔ)類,并根據(jù)用戶輸入的參數(shù)編寫新類;依據(jù)參數(shù)在新類中重構(gòu)evaluate函數(shù),并組裝insert語句;當(dāng)接收到用戶的導(dǎo)入指令時(shí),調(diào)用insert語句以將數(shù)據(jù)從hive導(dǎo)入傳統(tǒng)數(shù)據(jù)倉庫中。由此可見,將數(shù)據(jù)導(dǎo)入傳統(tǒng)數(shù)據(jù)倉庫傳統(tǒng)數(shù)據(jù)倉庫的過程中,本方法無需指明hdfs和行、列分隔符,且能夠克服軟件編寫繁瑣的問題。
作為優(yōu)選地實(shí)施方式,在上述實(shí)施例的基礎(chǔ)上,還包括:
在數(shù)據(jù)從hive導(dǎo)入傳統(tǒng)數(shù)據(jù)倉庫的過程中,調(diào)用trycatch語句以捕捉錯(cuò)誤信息。
數(shù)據(jù)在批量傳輸過程中,有可能會出現(xiàn)錯(cuò)誤,對于傳輸過程存在的問題,通過調(diào)用trycatch語句,能夠方便對傳輸過程中的錯(cuò)誤進(jìn)行精確定位,從而能夠及時(shí)修正??梢岳斫獾氖?,錯(cuò)誤信息可以為主鍵重復(fù)、主鍵為空或sql語法錯(cuò)誤等,本實(shí)施例不再贅述。
作為優(yōu)選地實(shí)施方式,在上述實(shí)施例的基礎(chǔ)上,還包括:
當(dāng)捕捉到錯(cuò)誤信息時(shí),通過日志記錄錯(cuò)誤信息。
本實(shí)施例中,當(dāng)捕捉到錯(cuò)誤信息時(shí),會通過日志記錄的方式記錄錯(cuò)誤信息。用戶可以通過查看日志就能夠確定當(dāng)前數(shù)據(jù)導(dǎo)入過程是否發(fā)生異常。
作為優(yōu)選地實(shí)施方式,在上述實(shí)施例的基礎(chǔ)上,還包括:
在數(shù)據(jù)從hive導(dǎo)入傳統(tǒng)數(shù)據(jù)倉庫的過程中,依據(jù)服務(wù)器的忙閑狀態(tài)設(shè)置數(shù)據(jù)傳輸量的最大值。
本實(shí)施例中,對數(shù)據(jù)傳輸量設(shè)置一個(gè)最大值,使得傳輸量不至于過大,防止由于傳輸量過大導(dǎo)致服務(wù)器的負(fù)載較高而中斷或堵塞。當(dāng)服務(wù)器空閑時(shí),可以加大數(shù)據(jù)傳輸量的最大值,當(dāng)服務(wù)器繁忙時(shí),可以降低數(shù)據(jù)傳輸量的最大值。
在上文中對于將數(shù)據(jù)從hive導(dǎo)入傳統(tǒng)數(shù)據(jù)倉庫的方法的實(shí)施例進(jìn)行了詳細(xì)的描述,本發(fā)明還提供一種將數(shù)據(jù)從hive導(dǎo)入傳統(tǒng)數(shù)據(jù)倉庫的裝置。裝置部分的實(shí)施例與方法部分的實(shí)施例相互對應(yīng),因此裝置部分的實(shí)施例請參見方法部分的實(shí)施例的描述,這里暫不贅述。
圖2為本發(fā)明實(shí)施例提供的一種將數(shù)據(jù)從hive導(dǎo)入傳統(tǒng)數(shù)據(jù)倉庫的裝置的結(jié)構(gòu)圖。如圖2所示,將數(shù)據(jù)從hive導(dǎo)入傳統(tǒng)數(shù)據(jù)倉庫的裝置包括:
編寫單元10,用于繼承hive中的基礎(chǔ)類,并根據(jù)用戶輸入的參數(shù)編寫新類;
組裝單元11,用于依據(jù)參數(shù)在新類中重構(gòu)evaluate函數(shù),并組裝insert語句;
調(diào)用單元12,用于當(dāng)接收到用戶的導(dǎo)入指令時(shí),調(diào)用insert語句以將數(shù)據(jù)從hive導(dǎo)入傳統(tǒng)數(shù)據(jù)倉庫中。
本實(shí)施例提供的將數(shù)據(jù)從hive導(dǎo)入傳統(tǒng)數(shù)據(jù)倉庫的裝置,包括繼承hive中的基礎(chǔ)類,并根據(jù)用戶輸入的參數(shù)編寫新類;依據(jù)參數(shù)在新類中重構(gòu)evaluate函數(shù),并組裝insert語句;當(dāng)接收到用戶的導(dǎo)入指令時(shí),調(diào)用insert語句以將數(shù)據(jù)從hive導(dǎo)入傳統(tǒng)數(shù)據(jù)倉庫中。由此可見,將數(shù)據(jù)導(dǎo)入傳統(tǒng)數(shù)據(jù)倉庫傳統(tǒng)數(shù)據(jù)倉庫的過程中,本裝置無需指明hdfs和行、列分隔符,且能夠克服軟件編寫繁瑣的問題。
作為一種優(yōu)選地實(shí)施方式,還包括:
捕捉單元,用于在數(shù)據(jù)從hive導(dǎo)入傳統(tǒng)數(shù)據(jù)倉庫的過程中,調(diào)用trycatch語句以捕捉錯(cuò)誤信息。
作為一種優(yōu)選地實(shí)施方式,還包括:
記錄單元,用于當(dāng)捕捉到錯(cuò)誤信息時(shí),通過日志記錄錯(cuò)誤信息。
作為一種優(yōu)選地實(shí)施方式,還包括:
設(shè)置單元,用于在數(shù)據(jù)從hive導(dǎo)入傳統(tǒng)數(shù)據(jù)倉庫的過程中,依據(jù)服務(wù)器的忙閑狀態(tài)設(shè)置數(shù)據(jù)傳輸量的最大值。
作為一種優(yōu)選地實(shí)施方式,參數(shù)具體包括:控制連接數(shù)據(jù)庫的字符串、表名、需要入表的字段名。
以上對本發(fā)明所提供的將數(shù)據(jù)從hive導(dǎo)入傳統(tǒng)數(shù)據(jù)倉庫的方法及裝置進(jìn)行了詳細(xì)介紹。說明書中各個(gè)實(shí)施例采用遞進(jìn)的方式描述,每個(gè)實(shí)施例重點(diǎn)說明的都是與其他實(shí)施例的不同之處,各個(gè)實(shí)施例之間相同相似部分互相參見即可。對于實(shí)施例公開的裝置而言,由于其與實(shí)施例公開的方法相對應(yīng),所以描述的比較簡單,相關(guān)之處參見方法部分說明即可。應(yīng)當(dāng)指出,對于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明原理的前提下,還可以對本發(fā)明進(jìn)行若干改進(jìn)和修飾,這些改進(jìn)和修飾也落入本發(fā)明權(quán)利要求的保護(hù)范圍內(nèi)。
還需要說明的是,在本說明書中,諸如第一和第二等之類的關(guān)系術(shù)語僅僅用來將一個(gè)實(shí)體或者操作與另一個(gè)實(shí)體或操作區(qū)分開來,而不一定要求或者暗示這些實(shí)體或操作之間存在任何這種實(shí)際的關(guān)系或者順序。而且,術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者設(shè)備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者設(shè)備所固有的要素。在沒有更多限制的情況下,由語句“包括一個(gè)……”限定的要素,并不排除在包括所述要素的過程、方法、物品或者設(shè)備中還存在另外的相同要素。