Integration Services 2012のWebサービスETLプロセス

将来使用するための在庫



その過程で、Webサービスからのデータが必要になることがあります。特に今日では、SOAP接続がほぼ標準です。



ETLプロセス(抽出-変換-ロード)は、ビジネスインテリジェンスからの用語であり、データを収集および変換して分析データベース(データウェアハウスなど)を作成するプロセスを表します。



WSDLで記述されたSOAPデータ交換プロトコルとWebサービスは、ほとんどすべてのERPシステム、多くのオンラインポータル、および金融機関の世界に共通するウィンドウです。



クラスで最も強力なツールの1つであるMS Integration Servicesを使用して、ETLプロセスをステップごとに説明していきます。



したがって、テストの問題を検討してください。



挑戦する





昨年の各日付のルーブルに対する為替レートに関するデータを収集し、さらに分析するためにテーブルにロードする必要があります。 ロシア中央銀行は、歴史的なデータを、適切な説明のあるWebサービスの形式で提供しています。

これが解決策のようです。



プロジェクトを作成する





最初に、Business Intelligence Development Studioでプロジェクトを作成します(さらに最近では、SQL Server Data Tools)。



ツールボックスにはWeb-service-task要素があり、それをワークスペースに転送します。





HttpConnection行で、NewConnectionを選択して新しい接続を作成します

URL http://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmxを入力します

ところで、そこに行くことができます-恥ずかしがらないでください。



WSDL-ファイルはそこにあります。ここではwww.cbr.ru/DailyInfoWebServ/DailyInfo.asmx?WSDLです。

ダウンロードして、設定ダイアログで選択します。



それだけです、入力タブに行きます



画像



ここでは、プロバイダーが提供するサービスとそのメソッドから選択できます。

GetCourseOnDateが必要です-要求された日付のDataSetを発行します。

日付の値を手動で入力します-[値]フィールドに少し戻って、これを自動化します。

出力は、新しい接続出力を作成することにより、単純にファイルになります-ファイルoutput.xmlに



画像



プロセスを始めましょう-行きました。 ファイルが作成されます-為替レートは為替レートのように見えます。

形式は奇妙です:diffgr属性、インライン図。 これは、DatasetオブジェクトのXML出力です。



BI-studioにはXML-Sourceコネクタがあります-そのようなファイルに設定しようとすると、結果はゼロになります。 (回路を読み取ります)。



Webサービスタスク-Skriptタスクの後に配置します。



回避策



非表示のテキスト
object rawConnection = Dts.Connections["output"].AcquireConnection(Dts.Transaction); DataSet CoursesFile = new DataSet(); string filePath = (string)rawConnection; object rawConnection2 = Dts.Connections["output2"].AcquireConnection(Dts.Transaction); string filePath_Out = (string)rawConnection2; object rawConnection3 = Dts.Connections["output.xsd"].AcquireConnection(Dts.Transaction); string filePath_Schema = (string)rawConnection3; CoursesFile.ReadXml(@filePath); CoursesFile.AcceptChanges(); CoursesFile.WriteXmlSchema(@filePath_Schema); CoursesFile.WriteXml(@filePath2);
      
      





C#のスクリプトでは、すべてのツール.netプラットフォームと2012 VisualStudioを使用できます。

System.Xmlを使用して最初に追加しました

接続のコレクションに移ります-回路を保存し、出力するために、さらに2つ作成しました。



出力は純粋なXMLです-acceptChanges()のおかげです;



始まりを再考する





日付の範囲を取り、それぞれの為替レートを取得してから、データベースにコースに日付フィールドを追加して記録するとよいでしょう。



まず、一時的なディメンションを作成します。これは、すべてのデータウェアハウスで複数回使用できます。



ネットワーク上でスパイされたスクリプトを自分のバリエーションで作成します。



非表示のテキスト
 -- Delete time dimension if it already exists. IF Exists(Select Name from sysobjects where name = 'Dim_Time') BEGIN Drop Table Dim_Time END GO -- Standard options for creating tables SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- Create your dimension table -- Adjust to your own needs Create Table dbo.Dim_Time ( Dateid int IDENTITY (1,1) PRIMARY KEY CLUSTERED, Date date, DateString varchar(10), Day int, DayofYear int, DayofWeek int, DayofWeekName varchar(10), Week int, Month int, MonthName varchar(10), Quarter int, Year int, IsWeekend bit, IsLeapYear bit ) -- Declare and set variables for loop Declare @StartDate datetime, @EndDate datetime, @Date datetime Set @StartDate = '2000/01/01' Set @EndDate = '2020/12/31' Set @Date = @StartDate -- Loop through dates WHILE @Date <=@EndDate BEGIN -- Check for leap year DECLARE @IsLeapYear BIT IF ((Year(@Date) % 4 = 0) AND (Year(@Date) % 100 != 0 OR Year(@Date) % 400 = 0)) BEGIN SELECT @IsLeapYear = 1 END ELSE BEGIN SELECT @IsLeapYear = 0 END -- Check for weekend DECLARE @IsWeekend BIT IF (DATEPART(dw, @Date) = 1 OR DATEPART(dw, @Date) = 7) BEGIN SELECT @IsWeekend = 1 END ELSE BEGIN SELECT @IsWeekend = 0 END -- Insert record in dimension table INSERT Into Dim_Time ( [Date], [DateString], [Day], [DayofYear], [DayofWeek], [Dayofweekname], [Week], [Month], [MonthName], [Quarter], [Year], [IsWeekend], [IsLeapYear] ) Values ( @Date, CONVERT(varchar(10), @Date, 105), -- See links for 105 explanation Day(@Date), DATEPART(dy, @Date), DATEPART(dw, @Date), DATENAME(dw, @Date), DATEPART(wk, @Date), DATEPART(mm, @Date), DATENAME(mm, @Date), DATENAME(qq, @Date), Year(@Date), @IsWeekend, @IsLeapYear ) -- Goto next day Set @Date = @Date + 1 END GO
      
      







新しいアイテムをワークスペースに移動します



画像



画像



途中で作成されたTESTベースとOLE DB接続localhost.TEST。



プロセスが結果からすべての日付を取得してWebServiceTaskに渡す方法。



変数を使用する。



変数



ワークスペース-変数を右クリックします。 または、[表示]メニュー-[その他のウィンドウ]-[変数]。 これは非常に強力なツールですが、それだけではなく、SSISを宣言することもできません。

System.Object型のUDate変数を作成します。 リクエストの結果を出力します。

SQLタスクに接続します



画像



次に、SQL-Task Foreachループコンテナーに順番に追加します。

これはコンテナであり(アクションのシーケンスをそこに固定できます)、foreachルーチンを実行します。

この場合、Webサービスに接続し、UDateセットの各日付の為替レートを記録します。

それが設定方法です
画像

画像






Date型の私たちが作成したDate変数はコンテナ内で利用できるため、レコードの現在の日付を渡します。



それがコンテナに入れたものです



画像



DataFlowがスクリプトに従っていることを見てみましょう。すべてがシンプルです。 XML-XML、ソース、

日付列を追加します-テーブルに書き込みます。

そして、日付ごとに。



画像



データベースへの書き込みのために、派生列要素に-Date変数を挿入します。



結果はこちら

画像







All Articles