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