はじめに
こんにちは。株式会社ZEALの@ey___00129です。
DataFactoryのForEachを用いたループ処理について
Lookupアクティビティで取得した値をもとにループする処理を実装していきたいと思います。
利用するAzureリソースは以下
・DataFactory
・AzureSQLDatabase(プロシージャを作成し、ループ処理の確認用として)
所要時間:30分程で実装可能
AzureSQLDatabaseにてプロシージャ作成
まずは、ループ処理の確認用のプロシージャを作成します。
今回は確認目的なので連携されたパラメーターをInsertするプロシージャを作成。
CREATE PROCEDURE [dbo].[Insert_parameter]
@parameter AS [varchar](20)
AS
DECLARE @parameter1 AS [varchar](20)
SET @parameter1 = @parameter;
EXECUTE ('INSERT INTO [dbo].[parameter_insert_table] VALUES ('''+ @parameter1 +''');');
GO
一旦、AzureSQLDatabase上で挙動確認
DataFactoryのパイプライン作成
ここからは、Lookupアクティビティで取得した値を
ループ処理に引き渡し取得したデータを元に、プロシージャを繰り返し実行していきたいと思います。
利用するアクティビティは以下。
・Lookup
・ForEach
・Stored procedure
Lookupアクティビティでは、parameterテーブルに存在する値を取得するクエリを記載。
ForEachのItemsでは、Lookupから渡された結果をvalueとして受け取ります。
Sequentialでは、チェックを入れると順次ループ処理が実行されます。
チェックを入れないと、並列で処理が実行されます。
Itemsは、以下
@activity('Lookup').output.value
最後に、ForEachの中にStored procedureを作成し
Stored procedure parametersに渡したいパラメーター(@item().parameter)を記載します。
これで設定は以上です。
DataFactory実行確認
<実行前>
Lookupアクティビティが取得する先のテーブル

DataFactoryを実行
Stored procedureがパラメーター分3回繰り返し実行されていますね。

<実行後>
パラメーター取り込み先テーブルにも正しく3レコード取り込まれていました!!

以上で、完了です。
今回は基礎的なループ処理を実装してみましたが、
処理を共通化するときなど、他にも応用して使えるので是非お試しください。






