久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

怎么用SQL吧數(shù)據(jù)表遷移到數(shù)據(jù)倉庫中

147次閱讀
沒有評論

共計 1867 個字符,預計需要花費 5 分鐘才能閱讀完成。

本篇內(nèi)容介紹了“怎么用 SQL 吧數(shù)據(jù)表遷移到數(shù)據(jù)倉庫中”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓丸趣 TV 小編帶領(lǐng)大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!

  需求背景

最近公司打算集中梳理幾大業(yè)務系統(tǒng)的數(shù)據(jù),希望將各個業(yè)務系統(tǒng)中的數(shù)據(jù)集中到數(shù)據(jù)倉庫中??偣灿?5000 多張數(shù)據(jù)表,但是好在業(yè)務數(shù)據(jù)量沒有像電商那么龐大,也就幾十個 G。

需求分析

其實這個需求很簡單,就是把這 5000 多張不同數(shù)據(jù)庫中的表放到一個地方。需要注意的有以下幾點:

1、數(shù)據(jù)來自各種不同類型的數(shù)據(jù)庫,有 SQL  Server,MySQL 和 Oracle

2、表的數(shù)據(jù)量較多,一個一個寫查詢代碼肯定不現(xiàn)實

3、后續(xù)數(shù)據(jù)倉庫的維護

方案建議

由于數(shù)據(jù)量不是很大,我打算用 DBLINK 來實現(xiàn)從不同的庫中抽取數(shù)據(jù)到數(shù)據(jù)倉庫中。

方案思路

1、創(chuàng)建不同的 DBLINK

數(shù)據(jù)倉庫我們目前使用的是 SQL  Server 的服務器,整體性能還可以。但是業(yè)務系統(tǒng)的數(shù)據(jù)庫類型不一,在新建 DBLINK 時有不同的要求:

a、針對 SQL  Server 的業(yè)務數(shù)據(jù)庫可以直接在服務器上新建

b、針對 MySQL 和 Oracle 的業(yè)務數(shù)據(jù)庫需要先使用 ODBC 作用中間組件來配置。

2、查詢數(shù)據(jù)庫中的所有表表名

每個業(yè)務數(shù)據(jù)庫都是全庫抽取,那么首先需要找到這些數(shù)據(jù)庫中的所有表。這里我們以 SQL  Server 為例來查找數(shù)據(jù)庫中的所有表。

SELECT NAME FROM SYSOBJECTS WHERE TYPE= U

上面的代碼就可以把當前庫中的所有表的表名都給查詢出來,我這里在家里電腦測試了一下,給大家看下截圖:

大家也可以在自己的電腦上試一試就知道了。

Oracle 獲取用戶表表名的代碼如下:

SELECT * FROM USER_TABLES;

MySQL 獲取用戶表表名的代碼如下:

select table_name from information_schema.tables where table_schema= db_name

3、循環(huán)抽取數(shù)據(jù)

我們在完成上面兩步后,就可以開始循環(huán)抽取各業(yè)務系統(tǒng)的數(shù)據(jù)了。這里我們需要寫一個游標來循環(huán)執(zhí)行。具體代碼如下:

DECLARE @TableName varchar(50),@Sql varchar(500) -- 定義兩個變量,一個用來存儲表名,一個用來存儲插入語句  DECLARE cursor_variable CURSOR FOR -- 定義一個游標,并且將目標表的所有表名插入游標中  select name from [192.168.0.39].[test].[dbo].sysobjects where xtype= u  order by name; OPEN cursor_variable -- 打開游標  FETCH NEXT FROM cursor_variable INTO @TableName -- 獲取游標中的數(shù)據(jù)插入到變量中  WHILE @@FETCH_STATUS=0 -- 循環(huán)執(zhí)行,當游標中的數(shù)據(jù)被讀完為止  BEGIN SET @Sql= select * into dbo. +@TableName +  from [192.168.0.39].[test].[dbo]. +@TableName Exec @Sql FETCH NEXT FROM cursor_variable INTO @TableName END CLOSE cursor_variable -- 關(guān)閉游標  DEALLOCATE cursor_variable; -- 釋放游標 

目前只是測試代碼,后續(xù)在性能上還可以繼續(xù)優(yōu)化。

4、設(shè)置定時任務

代碼寫好了,肯定不可能每天手動去執(zhí)行,這時候我們可以使用數(shù)據(jù)庫的定時任務,這個我在以前的文章中有提到過。《數(shù)據(jù)庫任務自動化其實很簡單,JOB 的簡單介紹》

我們把代碼放到定時任務里面,讓它每天凌晨 1 點執(zhí)行即可。

總結(jié)

這個辦法在處理數(shù)據(jù)量不多的情況下是可行的,如果數(shù)據(jù)量較大,性能上會存在較大風險。下面我們回顧一下做了哪些內(nèi)容:

1、創(chuàng)建不同數(shù)據(jù)庫的 DBLINK

2、查詢到每個數(shù)據(jù)庫的所有表名

3、使用游標循環(huán)插入到數(shù)據(jù)倉庫

4、設(shè)置定時任務執(zhí)行上面的游標

每個步驟都可能會存在問題,但是只要把這些問題都解決了,這件事就解決了。

覺得不錯,記得轉(zhuǎn)發(fā)分享給更多人~

“怎么用 SQL 吧數(shù)據(jù)表遷移到數(shù)據(jù)倉庫中”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注丸趣 TV 網(wǎng)站,丸趣 TV 小編將為大家輸出更多高質(zhì)量的實用文章!

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2023-07-27發(fā)表,共計1867字。
轉(zhuǎn)載說明:除特殊說明外本站除技術(shù)相關(guān)以外文章皆由網(wǎng)絡(luò)搜集發(fā)布,轉(zhuǎn)載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 涟水县| 常熟市| 大城县| 息烽县| 蕉岭县| 中卫市| 叙永县| 盐亭县| 班戈县| 澄城县| 谷城县| 宝清县| 青海省| 武功县| 芜湖县| 玛沁县| 蒲江县| 全椒县| 阿坝| 潮安县| 宜阳县| 阜城县| 临沭县| 绥阳县| 安塞县| 金坛市| 龙州县| 台中市| 佳木斯市| 高陵县| 泗洪县| 黔西| 黄骅市| 涟水县| 微山县| 乌拉特前旗| 驻马店市| 霍邱县| 晋城| 崇信县| 甘谷县|