微軟 BI 系列隨筆 - SSIS 基礎 - 參數與環境
簡介
在上一篇博客中,主要講述了如何實現SSIS的項目部署,參見 微軟 BI 系列隨筆 - SSIS 2012 基礎 - SSIS 項目部署模型
本文主要介紹SSIS 2012中的參數與環境,以及如何利用這些信息來實現SSIS項目的開發和部署之后的運行。
關於參數
SSIS 2012中參數主要分為項目參數和包參數。參數在包的運行過程中是只讀的。正確的使用參數能大大提高我們開發和部署時的效率。
-
項目參數
項目參數是SSIS 2012中新加入的功能。項目參數可以在項目內所有的包中共享,一次配置,多處使用。因此在項目參數中,通常是設置一些比較通用的信息,比如數據庫連接,服務器連接,或者其他的業務范疇的信息。
下圖列出了在項目中常用的一些參數設置。
通過設定項目使用的數據庫連接信息,就可以在項目的Connection manager中使用這些參數實現動態的連接。
-
包參數
包參數通常定義包執行時需要的一些數據,比如篩選文件的條件,文件采集的位置,功能的開關等等。這些參數定義在包級別,相當於一個程序的入口參數。
環境
在項目的開發到交付的過程中,通常會有各種環境(DEV,STG,UAT,PRD),SSIS2012中引入了環境(Environment)來適配。
這個環境是存在於SSIS目錄(Intergration Services Catalogs)中,在部署完一個SSIS項目后,在項目同級別目錄會自動創建一個環境(Environments)目錄。在這個目錄下面可以添加我們的運行時環境配置。
下面寫一下為項目配置環境的步驟。
- 添加環境
在環境文件夾上右鍵單擊,選擇“添加環境”,系統會彈出一個創建環境的窗口,需要填寫環境名字和描述。如下圖
點擊OK將會在環境文件夾創建新環境。
- 創建環境變量
選擇剛剛創建的環境,右鍵單擊選擇屬性。這時候會打開環境屬性窗口。在窗口左邊選擇頁面中點擊變量,在右邊的窗口中可以創建一系列的變量。這些變量可以與包和項目中定義的參數相對應,一個參數對應一個變量。建議將變量名設置為與參數名稱一樣。如果兩個包使用了同樣的參數名稱,值不一樣,可以在變量名前加前綴標志。我創建的環境變量如下(紅線框起來的部分是因為兩個包使用了同樣的參數名加以區分):
在權限頁可以設置每個賬戶對這個環境的讀寫和管理權限。
- 復制環境變量
通常情況下需要配置多個環境,這些環境會使用同樣的環境變量名,只是值不一樣。如果變量很多的話,一個個配置起來也很麻煩。這個時候該怎么辦呢?開動我們的大腦,想想之前配置的DEV環境變量都存在哪里了?DEV環境變量都存在哪里了?DEV環境變量都存在哪里了?(重要的事情說三遍)
這個時候我們去查看一下數據庫,發現有一個叫SSISDB的庫,在這個庫里面有幾張表看起來和我們的環境有關系。他們分別是[internal].[environments],[internal].[environment_variables],[internal].[environment_permissions]。怎么樣,是不是已經要腦洞大開了,沒錯,就是這三張表。
[internal].[environments] -- 這個表存放的是環境信息,主要有環境ID,名稱,文件夾ID,描述和創建者信息。
[internal].[environment_variables] -- 這個表存放的是環境變量信息,主要有變量ID,環境ID,名稱,描述,類型,值以及其他信息。
[internal].[environment_permissions] -- 這個表存放的是權限控制信息。
知道了這么多以后該怎么做,相信大家已經心里有數了。但是我還是給大家列出了詳細的步驟哦(樓主好人,謝謝分享)
首先是按照你的需要,在環境文件夾中創建你所有需要的環境,比如我創建了DEV,INT,STG,PRD環境。除了DEV中是已經配置了變量,其他的目前都是空白。這些環境每個都有一個唯一的標志,在屬性頁的第一頁里面(怎樣,我不說你注意到了嗎?)
接下來在SSISDB數據庫執行如下腳本,比如我的DEV環境標志是1,INT的標志是2,我現在要把DEV的變量復制到INT里面去。
INSERT INTO [internal].[environment_variables] ([environment_id] ,[name] ,[description] ,[type] ,[sensitive] ,[value] ,[sensitive_value] ,[base_data_type]) SELECT 2 as environment_id --INT Environment ID ,[name] ,[description] ,[type] ,[sensitive] ,[value] ,[sensitive_value] ,[base_data_type] FROM [SSISDB].[internal].[environment_variables] where environment_id = 1 --DEV Environment ID
好了,現在打開INT環境,查看一下他的屬性,變量是不是都在了啊。(笑濕了吧)
使用同樣的語句來給其他環境創建變量吧。
- 引用環境變量
配置了這么多環境和變量了(累濕了),如何使用它們呢?下面接着給大家伙細細道來。
在項目文件夾選擇之前部署的項目,右擊(右鍵單擊)選擇配置,選擇參考頁(References)。這里有一個列表是用來選擇環境和文件夾的。點擊添加按鈕,有一個彈出框讓你選擇環境。你可以選擇當前目錄下面或者其他目錄下面(你會定義到別的項目的目錄下面去嗎?)的環境,一次只能選擇一個(連多選都不給咱)。然后就可以看到環境一個個的添加進來了。我的長成下面這個樣子了:
然后你就可以在參數頁使用環境里面的變量了喲。
選擇參數頁,選好作用域(Scope),然后可以看到你在項目級別拉,包級別拉定義的參數了吧。選中一個參數,單擊Value右邊的那個按鈕,在彈出的框框里面選擇使用環境變量,如下所示。
現在知道在各個環境中定義相同的變量名的好處了吧(記得值不要一樣哦)。快去給每個參數設置一下吧。
- 使用環境變量
到這一步已經接近大功告成了(碼字好累,繼續寫),但是這么多環境變量怎么使用呢?
想想我們開發了這么多包,又部署了,有配置了,主要是為了干甚呢?不就是為了執行嗎。好吧,選中包,右擊選執行。
怎么回事,那么多必填的值啊,往下看,哦,要選擇環境啊。
之前是這樣:
之后是這樣:
好了,點擊OK按鈕去執行吧。你也可以從上邊選擇生成腳本去執行(自己找吧,不截圖了)。
到這一步,一切都很完美了。
使用了參數以后,整個項目的開發,部署以及運行,一切都如行雲流水,就好象子畫帶着小骨在御劍飛行啊,好舒服的呢。
接下來,老大,我的SSIS是要長期執行的,怎么做啊?
別急啊,中午了,下一篇繼續講解如何將SSIS部署到SQL Job吧。