实例学习SSIS(一)--制作一个简单的ETL包
http://www.cnblogs.com/tenghoo/archive/2009/10/archive/2009/10/archive/2009/10/16/ssis_lookup.html
導(dǎo)讀:
實(shí)例學(xué)習(xí)SSIS(一)--制作一個(gè)簡(jiǎn)單的ETL包
實(shí)例學(xué)習(xí)SSIS(二)--使用迭代
實(shí)例學(xué)習(xí)SSIS(三)--使用包配置
實(shí)例學(xué)習(xí)SSIS(四)--使用日志記錄和錯(cuò)誤流重定向
實(shí)例學(xué)習(xí)SSIS(五)--理論介紹SSIS
參考內(nèi)容:SQLServer2005的幫助文檔。
ms-help://MS.SQLCC.v9/MS.SQLSVR.v9.zh-CHS/sqltut9/html/d6d5bb1f-4cb1-4605-9cd6-f60b858382c4.htm
ETL包:數(shù)據(jù)的提取、轉(zhuǎn)換和加載;
通過制作第一個(gè)包,可以了解以下內(nèi)容:
1、配置連接管理器(平面文件和OLE DB);
2、添加數(shù)據(jù)流任務(wù);
3、配置平面文件源和OLE DB目標(biāo);
4、使用查找轉(zhuǎn)換。
詳細(xì)制包過程:
準(zhǔn)備工作:
(1)文件源:創(chuàng)建一個(gè)txt文件:userinfo.txt。
???????? ?內(nèi)容如下:1|張三|我是張三|男,2|李四|我是李四|女
(2)創(chuàng)建目標(biāo)數(shù)據(jù)表:
???????? ?下面是我創(chuàng)建的數(shù)據(jù)庫(SSIS)和表(userinfo、usersex):
??? ? ?? userinfo.sql
USE?[SSIS]GO
/******?對(duì)象:??Table?[dbo].[userinfo]????腳本日期:?10/16/2009?10:31:54?******/
SET?ANSI_NULLS?ON
GO
SET?QUOTED_IDENTIFIER?ON
GO
SET?ANSI_PADDING?ON
GO
CREATE?TABLE?[dbo].[userinfo](
????[uid]?[int]?NOT?NULL,
????[uname]?[varchar](50)?COLLATE?Chinese_PRC_CI_AS?NULL,
????[udesc]?[varchar](500)?COLLATE?Chinese_PRC_CI_AS?NULL,
????[sid]?[int]?NULL
)?ON?[PRIMARY]
GO
SET?ANSI_PADDING?OFF
usersex.sql
USE?[SSIS]GO
/******?對(duì)象:??Table?[dbo].[usersex]????腳本日期:?10/16/2009?10:32:21?******/
SET?ANSI_NULLS?ON
GO
SET?QUOTED_IDENTIFIER?ON
GO
SET?ANSI_PADDING?ON
GO
CREATE?TABLE?[dbo].[usersex](
????[sid]?[int]?NOT?NULL,
????[sex]?[varchar](50)?COLLATE?Chinese_PRC_CI_AS?NULL
)?ON?[PRIMARY]
GO
SET?ANSI_PADDING?OFF
?創(chuàng)建SSIS項(xiàng)目:
???????? 在“開始”、“Microsoft SQL Server 2005”,找到 SQL Server Business Intelligence Development Studio,創(chuàng)建Integration Services 項(xiàng)目;
?制包過程:
???????? (1)配置連接管理器(平面文件和OLE DB)
?????????????????? ?平面文件:
?? ??????在“連接管理器”區(qū)域“新建平面文件連接”,起個(gè)名子,選好userinfo.txt。
???????? 選擇行、列分割符,如下圖所示:
???? ?????? ?
???????? 在“高級(jí)”中重命名各個(gè)列名,并選擇相應(yīng)數(shù)據(jù)類型,分別是:DT_I4和三個(gè)DT_STR。
?????????????????? ?OLE DB:
??????????????????
(2)在數(shù)據(jù)流選項(xiàng)卡中創(chuàng)建平面文件源。
????????? ???? 從左側(cè)“數(shù)據(jù)流源”中拖拽即可,確認(rèn)一下列:
?
(3)使用查找轉(zhuǎn)換
?????????????????? 從左側(cè)“數(shù)據(jù)流轉(zhuǎn)換”中拖拽“查找”。
?????????????????? 因?yàn)閡serinfo.txt中性別是男/女,所以需要轉(zhuǎn)換成對(duì)應(yīng)的性別id才能插入到數(shù)據(jù)表中。
?? 如下圖配置,指定連接列和選擇查找列:
??????????????????
????????? (4)配置OLE DB目標(biāo)
?????????????????? 從左側(cè)“數(shù)據(jù)流目標(biāo)”中拖拽OLE DB目標(biāo)。
??? 在映射中確認(rèn)一下輸入和目標(biāo)列是否對(duì)應(yīng)好,同時(shí)要確認(rèn)一下數(shù)據(jù)類型是否一樣。
???????
調(diào)試包:???????? 點(diǎn)擊調(diào)試,如果全變綠就哦了,某一個(gè)環(huán)境出現(xiàn)錯(cuò)誤會(huì)變成紅色,可在執(zhí)行結(jié)果中查看錯(cuò)誤原因。
執(zhí)行結(jié)果:
select * from userinfo
????????
?
?
實(shí)例學(xué)習(xí)SSIS(二)--使用迭代
導(dǎo)讀:
實(shí)例學(xué)習(xí)SSIS(一)--制作一個(gè)簡(jiǎn)單的ETL包
實(shí)例學(xué)習(xí)SSIS(二)--使用迭代
實(shí)例學(xué)習(xí)SSIS(三)--使用包配置
實(shí)例學(xué)習(xí)SSIS(四)--使用日志記錄和錯(cuò)誤流重定向
實(shí)例學(xué)習(xí)SSIS(五)--理論介紹SSIS
?
?
?
目標(biāo):循環(huán)地連接某文件夾下的每個(gè)文件,不需要為每個(gè)文件都建立連接管理器。
在這個(gè)實(shí)例中,我們將某文件夾下的userinfo1.txt和userinfo2.txt的內(nèi)容都寫入數(shù)據(jù)表userinfo中。
步驟:
???????? 準(zhǔn)備工作:
???????? ???????? 把第一個(gè)例子中的userinfo.txt復(fù)制兩份,放到同一個(gè)文件夾下。把內(nèi)容改一下:
?????????????????? userinfo1.txt:3|name3|我是name3|男,4|name4|我是name4|女
?????????????????? userinfo2.txt:5|name5|我是name5|男,6|name6|我是name6|女
???????? 設(shè)置Foreach:
???????? (1)在控制選項(xiàng)卡下從左側(cè)拖拽Foreach 循環(huán)容器。
???????? (2)在Foreach容器的“集合”下設(shè)置Enumerator和配置枚舉器:
??????????????????
???????? (3)設(shè)置枚舉器映射為用戶定義的變量。
???????? (4)將數(shù)據(jù)流任務(wù)拖拽到Foreach中。
???????? ?設(shè)置平面文件連接管理器:??????
???????? (1)在“連接管理器”窗格中,單擊 userinfo。
???????? (2)在“屬性”窗口中,單擊 “Expressions (…)”。
???????? (3)在 “屬性”列中,選擇 ConnectionString。
???????? (4)在“表達(dá)式”列中,單擊省略號(hào)按鈕“(…)”。
???????? (5)在“表達(dá)式生成器”對(duì)話框中,展開“變量”節(jié)點(diǎn),將變量 User::varFileName 拖到“表達(dá)式”框中。
???????? ?到這就哦了。
???????? ?調(diào)試包:
???????? ?全都綠了吧!
???????? ?執(zhí)行結(jié)果:
???????? 兩個(gè)文件中的數(shù)據(jù)都被插入到表userinfo中了!
select * from userinfo
?
實(shí)例學(xué)習(xí)SSIS(三)--使用包配置
導(dǎo)讀:
實(shí)例學(xué)習(xí)SSIS(一)--制作一個(gè)簡(jiǎn)單的ETL包
實(shí)例學(xué)習(xí)SSIS(二)--使用迭代
實(shí)例學(xué)習(xí)SSIS(三)--使用包配置
實(shí)例學(xué)習(xí)SSIS(四)--使用日志記錄和錯(cuò)誤流重定向
實(shí)例學(xué)習(xí)SSIS(五)--理論介紹SSIS
包配置是干嘛滴!
???????? 使用包配置可以從開發(fā)環(huán)境的外部設(shè)置運(yùn)行時(shí)屬性和變量。
目標(biāo):
???????? 從開發(fā)環(huán)境外部指定Foreach要遍歷的文件夾,然后把該文件夾下相應(yīng)的txt文件內(nèi)容寫入庫中。
步驟:
???????? 準(zhǔn)備工作
???????? 把第一個(gè)例子中的userinfo.txt復(fù)制兩份,放到同一個(gè)文件夾下。把內(nèi)容改一下:
?????????????????? Userinfo3.txt:7|name7|我是name7|男,8|name8|我是name8|女
?????????????????? Userinfo4.txt:9|name9|我是name9|男,10|name10|我是name10|女
???????? 創(chuàng)建用戶變量
???????? 添加用戶變量以便對(duì)應(yīng)到文件夾名稱。
???????? 切換到“控制流”選項(xiàng)卡:
???????? 將 varFolderName 變量的數(shù)據(jù)類型設(shè)置為“字符串”。
??設(shè)置Foreach容器
???????? 將Foreach容器的Directory對(duì)應(yīng)到剛才創(chuàng)建的變量varFolderName。
?上圖中的用戶變量varFolderName直接拖拽到表達(dá)式中即可!
? 啟用包配置
???????? (1)在SSIS菜單,點(diǎn)擊“包配置”;
???????? (2)生成配置文件,按下圖設(shè)置:
?
??配置文件設(shè)置
???????? 修改配置文件myconfig.dtsConfig\ConfiguredValue的值,如下:
?//? myconfig.dtsConfig
?調(diào)試包:
???????? ?全都綠了就表示數(shù)據(jù)添加成功了!
?執(zhí)行結(jié)果:
???????? 文件夾D:\lyp\SQL\SSIS\package3下的userinfo3.txt和userinfo4.txt數(shù)據(jù)都被插入到表userinfo中了!
??? select * from userinfo
前面的內(nèi)容:
實(shí)例學(xué)習(xí)SSIS(一) 制作一個(gè)簡(jiǎn)單的ETL包
實(shí)例學(xué)習(xí)SSIS(二) 使用迭代
?
包配置是干嘛滴!
???????? 使用包配置可以從開發(fā)環(huán)境的外部設(shè)置運(yùn)行時(shí)屬性和變量。
目標(biāo):
???????? 從開發(fā)環(huán)境外部指定Foreach要遍歷的文件夾,然后把該文件夾下相應(yīng)的txt文件內(nèi)容寫入庫中。
步驟:
???????? 準(zhǔn)備工作
???????? 把第一個(gè)例子中的userinfo.txt復(fù)制兩份,放到同一個(gè)文件夾下。把內(nèi)容改一下:
?????????????????? Userinfo3.txt:7|name7|我是name7|男,8|name8|我是name8|女
?????????????????? Userinfo4.txt:9|name9|我是name9|男,10|name10|我是name10|女
???????? 創(chuàng)建用戶變量
???????? 添加用戶變量以便對(duì)應(yīng)到文件夾名稱。
???????? 切換到“控制流”選項(xiàng)卡:
???????? 將 varFolderName 變量的數(shù)據(jù)類型設(shè)置為“字符串”。
??設(shè)置Foreach容器
???????? 將Foreach容器的Directory對(duì)應(yīng)到剛才創(chuàng)建的變量varFolderName。
????????
?上圖中的用戶變量varFolderName直接拖拽到表達(dá)式中即可!
? 啟用包配置
???????? (1)在SSIS菜單,點(diǎn)擊“包配置”;
???????? (2)生成配置文件,按下圖設(shè)置:
?
??配置文件設(shè)置
???????? 修改配置文件myconfig.dtsConfig\ConfiguredValue的值,如下:
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
><?xml?version="1.0"?><DTSConfiguration><DTSConfigurationHeading><DTSConfigurationFileInfo?GeneratedBy="LIYANPING\Administrator"?GeneratedFromPackageName="Package3"?GeneratedFromPackageID="{DEED0EEF-48A2-4371-A1FB-C9344691989B}"?GeneratedDate="2009-10-16?14:31:04"/></DTSConfigurationHeading><Configuration?ConfiguredType="Property"?Path="\Package.Variables[用戶::varFolderName].Properties[Value]"?ValueType="String">
??<ConfiguredValue>D:\lyp\SQL\SSIS\package3</ConfiguredValue></Configuration></DTSConfiguration>
?
?
?調(diào)試包:
???????? ?全都綠了就表示數(shù)據(jù)添加成功了!
?執(zhí)行結(jié)果:
???????? 文件夾D:\lyp\SQL\SSIS\package3下的userinfo3.txt和userinfo4.txt數(shù)據(jù)都被插入到表userinfo中了!
??? select * from userinfo
?<-->
?
實(shí)例學(xué)習(xí)SSIS(四)--使用日志記錄和錯(cuò)誤流重定向
導(dǎo)讀:
實(shí)例學(xué)習(xí)SSIS(一)--制作一個(gè)簡(jiǎn)單的ETL包
實(shí)例學(xué)習(xí)SSIS(二)--使用迭代
實(shí)例學(xué)習(xí)SSIS(三)--使用包配置
實(shí)例學(xué)習(xí)SSIS(四)--使用日志記錄和錯(cuò)誤流重定向
實(shí)例學(xué)習(xí)SSIS(五)--理論介紹SSIS
?
?
一、使用日志記錄
SSIS提供的日志記錄方式:
???????? 文本文件
???????? SQL Server Profiler
???????? Windows 事件日志
???????? SQL Server
???????? XML 文件
準(zhǔn)備工作
使用上節(jié)的包,修改myconfig.dtsConfig,將文件夾對(duì)應(yīng)到D:\lyp\SQL\SSIS\package4。
在文件夾下新建userinfo5.txt和userinfo6.txt。
???????? Userinfo5.txt:11|name11|我是name11|男,12|name12|我是name12|女
???????? Userinfo6.txt:13|name13|我是name13|男,14|name14|我是name14|女
步驟:
???????? 1、添加一條文本日志,如下圖:
????????
???????? 2、指定寫入日志信息的txt文件,如下圖:
???????? 3、選擇要記錄的事件:
????????
調(diào)試:
???????? 在D:\lyp\SQL\SSIS\package4下創(chuàng)建了一個(gè)log.txt文件,可以看到里面有相應(yīng)的事件執(zhí)行記錄。
二、使用錯(cuò)誤流重定向
SSIS錯(cuò)誤處理方式
在數(shù)據(jù)轉(zhuǎn)換時(shí)很有可能會(huì)發(fā)生錯(cuò)誤,SSIS對(duì)錯(cuò)誤的處理方式:
1、選擇忽略某些列中的失敗;
2、重定向整個(gè)失敗的行;
3、使組件失敗。
默認(rèn)情況下,所有組件發(fā)生錯(cuò)誤時(shí)失敗,從而導(dǎo)致包失敗并停止后續(xù)處理。
為了不讓包停止,發(fā)生錯(cuò)誤時(shí),通過配置來處理錯(cuò)誤,通常是將失敗的行重定向到別處進(jìn)行處理。
準(zhǔn)備工作
?????????????????? 1、使用上面日志記錄用到的包;
?????????????????? 2、創(chuàng)建有錯(cuò)誤的數(shù)據(jù)源文件userinfo7.txt(D:\lyp\SQL\SSIS\package5\)。
??????????????????????????? userinfo7.txt:15|name15|我是name15|男,abc|name17|我是name17|女,18|name18|我是name18|女
??????????????????????????? 在轉(zhuǎn)換id為int時(shí)會(huì)出現(xiàn)錯(cuò)誤。
使用組件失敗的情況
?????????????????? 在“數(shù)據(jù)流”中編輯“用戶來源”平面文件源,在“錯(cuò)誤輸出”中將各列的“錯(cuò)誤”選成“組件失敗”:
??? 調(diào)試程序,可以看到“用戶來源”變成了紅色,整個(gè)包停止了,文件中的數(shù)據(jù)沒有被成功導(dǎo)入到數(shù)據(jù)庫中。
使用錯(cuò)誤流重定向
???????? 目標(biāo)
?????????????????? 把出錯(cuò)的行重定向的別的文件(errorLog.txt)而不會(huì)使包停止。
???????? 步驟:
?????????????????? 1、拖拽一個(gè)“平面文件目標(biāo)”到數(shù)據(jù)流選項(xiàng)卡。
?????????????????? 2、把“用戶來源”的紅箭頭拖到該目標(biāo)上,在彈出的“配置錯(cuò)誤輸出”中將UiD的“錯(cuò)誤”選擇為“重定向行”。
?????????????????? 3、編輯“平面文件目標(biāo)”:
??????????????????????????? 新建“平面文件鏈接管理器”,選擇錯(cuò)誤記錄文件(errorLog.txt),如下:
?
???????? 調(diào)試:
?????????????????? 調(diào)試程序,可以看到向數(shù)據(jù)庫中插入了兩條記錄,并在errorLog.txt中寫入了出錯(cuò)的行。
?
實(shí)例學(xué)習(xí)SSIS(五)--理論介紹SSIS
導(dǎo)讀:
實(shí)例學(xué)習(xí)SSIS(一)--制作一個(gè)簡(jiǎn)單的ETL包
實(shí)例學(xué)習(xí)SSIS(二)--使用迭代
實(shí)例學(xué)習(xí)SSIS(三)--使用包配置
實(shí)例學(xué)習(xí)SSIS(四)--使用日志記錄和錯(cuò)誤流重定向
實(shí)例學(xué)習(xí)SSIS(五)--理論介紹SSIS
? ?一、概述
?????????????????? Integration Services 是用于生成高性能數(shù)據(jù)集成和工作流解決方案(包括針對(duì)數(shù)據(jù)倉庫的提取、轉(zhuǎn)換和加載 (ETL) 操作)的平臺(tái)。
???????? ??? Integration Services 包括:
?????????????????? a)生成并調(diào)試包的圖形工具和向?qū)?#xff1b;
?????????????????? b)執(zhí)行如 FTP 操作、SQL 語句執(zhí)行和電子郵件消息傳遞等工作流功能的任務(wù);
?????????????????? c)用于提取和加載數(shù)據(jù)的數(shù)據(jù)源和目標(biāo);
?????????????????? d)用于清理、聚合、合并和復(fù)制數(shù)據(jù)的轉(zhuǎn)換;
?????????????????? e)管理服務(wù),即用于管理 Integration Services 包的 Integration Services 服務(wù);
?????????????????? f)用于對(duì) Integration Services 對(duì)象模型編程的應(yīng)用程序接口 (API)。
?? 二、SSIS體系結(jié)構(gòu)
???????? SSIS由四大部分組成:服務(wù)、對(duì)象模型、運(yùn)行時(shí)和數(shù)據(jù)流。
?????????????????? 下面這張大圖顯示了各部分之間的關(guān)系:
???????? 服務(wù)
??????? 在Configuration Manager中可以看到SSIS的服務(wù):SQL Server Integration Services。
???????? ?? 提示:
???? 1、設(shè)計(jì)和執(zhí)行IS包不需要啟動(dòng)該服務(wù),可以使用 SQL Server 導(dǎo)入和導(dǎo)出向?qū)?、SSIS 設(shè)計(jì)器、執(zhí)行包實(shí)用工具以及 dtexec 命令提示實(shí)用工具運(yùn)行包。
???????? 2、如果要通過SQL Server Management Studio監(jiān)視包,則需要啟動(dòng)該服務(wù)。
? 使用SSMS監(jiān)視時(shí),可以看到兩個(gè)頂級(jí)文件夾:“正在運(yùn)行的包”和“已存儲(chǔ)的包”。
? 在“正在運(yùn)行的包”文件夾下可以停止某個(gè)運(yùn)行的包。
???????? 對(duì)象模型
???????? 對(duì)象模型包括用于訪問 Integration Services 工具、命令行實(shí)用工具以及自定義應(yīng)用程序的本機(jī)和托管應(yīng)用程序編程接口 (API)。
???????? 工具介紹:
???????? Business Intelligence Development Studio(BIDS)
???????? 創(chuàng)建和調(diào)試包。
???????? BIDS中的設(shè)計(jì)器
???????? 如下圖:
???????? 命令
?????????????????? dtexec:運(yùn)行現(xiàn)有的包;
?????????????????? 如執(zhí)行包:dtexec /f "c:\pkgOne.dtsx"
?????????????????? dtutil:可以對(duì)包進(jìn)行訪問,復(fù)制、刪除、移動(dòng)和 簽名等;
?????????????????? 如復(fù)制包:dtutil /FILE c:\myTestedPackage\package.dtsx /DestServer myserver /COPY SQL;newpackage
???????? 運(yùn)行時(shí)
?????????????????? 包的運(yùn)行時(shí),為日志記錄、斷點(diǎn)、配置、連接和事務(wù)提供支持。
???????? 數(shù)據(jù)流
???????? 數(shù)據(jù)流任務(wù)封裝數(shù)據(jù)流引擎。數(shù)據(jù)流引擎提供將數(shù)據(jù)從源移動(dòng)到目標(biāo)的內(nèi)存中的緩沖區(qū),并且調(diào)用從文件和關(guān)系數(shù)據(jù)庫中提取數(shù)據(jù)的源。
三、典型用途
???????? 合并來自異類數(shù)據(jù)存儲(chǔ)區(qū)的數(shù)據(jù)
?????????????????? 合并存儲(chǔ)在不同數(shù)據(jù)存儲(chǔ)系統(tǒng)中的數(shù)據(jù),提取這些數(shù)據(jù)合并到單個(gè)一致的數(shù)據(jù)存儲(chǔ)系統(tǒng)中。????????
?
???????? 填充數(shù)據(jù)倉庫和數(shù)據(jù)集市
???????? 數(shù)據(jù)倉庫和數(shù)據(jù)集市中的數(shù)據(jù)具有更新頻繁和加載量大的特點(diǎn),SSIS專門提供了一個(gè)從平面文件大容量加載到 SQL Server的任務(wù)。
???????? 清除數(shù)據(jù)和數(shù)據(jù)標(biāo)準(zhǔn)化
???????? Integration Services 包含一些內(nèi)置轉(zhuǎn)換,可將其添加到包中以清理數(shù)據(jù)和將數(shù)據(jù)標(biāo)準(zhǔn)化、更改數(shù)據(jù)的大小寫、將數(shù)據(jù)轉(zhuǎn)換為不同類型或格式或者根據(jù)表達(dá)式創(chuàng)建新列值。
???????? 將商業(yè)智能置入數(shù)據(jù)轉(zhuǎn)換過程
???????? Integration Services 提供了用于將商業(yè)智能置入 SSIS 包的容器、任務(wù)和轉(zhuǎn)換。
可能需要根據(jù)數(shù)據(jù)值對(duì)數(shù)據(jù)進(jìn)行匯總、轉(zhuǎn)換和分發(fā),SSIS 包中的邏輯可能需要執(zhí)行以下類型的任務(wù):
a)合并來自多個(gè)數(shù)據(jù)源的數(shù)據(jù)。
b)計(jì)算數(shù)據(jù)并應(yīng)用數(shù)據(jù)轉(zhuǎn)換。
c)根據(jù)數(shù)據(jù)值將一個(gè)數(shù)據(jù)集拆分為多個(gè)數(shù)據(jù)集。
d)將不同的聚合應(yīng)用到一個(gè)數(shù)據(jù)集的不同子集。
e)將數(shù)據(jù)的子集加載到不同目標(biāo)或多個(gè)目標(biāo)。
???????? 使管理功能和數(shù)據(jù)加載自動(dòng)化
管理功能自動(dòng)化,例如備份和還原數(shù)據(jù)庫等,可以使用 SQL Server 代理作業(yè)安排SSIS 包。
?
參考:ms-help://MS.SQLCC.v9/MS.SQLSVR.v9.zh-CHS/extran9/html/c4398655-5657-4ae4-a690-a380790fe84f.htm
?
作者:青羽tenghoo.cnblogs.com
?
總結(jié)
以上是生活随笔為你收集整理的实例学习SSIS(一)--制作一个简单的ETL包的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SSRS 使用(1)建立简单的Repor
- 下一篇: show in Breadcrumb