はじめに
Announcing new event categories in Fabric Real-Time Hubにて、OneLake のファイルイベントの監視ができるようになったので、ファイルがアップされたらパイプラインを実行する手順を紹介します。
参考:https://learn.microsoft.com/en-us/fabric/real-time-hub/create-streams-fabric-onelake-events
準備
レイクハウス
upload フォルダを作成しておきます。ここにファイルをアップします。
データパイプラインの設定
upload フォルダからコピーします。
コピーが完了したら削除
あて先設定では backup フォルダに実行IDフォルダを作成してコピーします。
@concat('backup/',pipeline().RunId)
1. アップされたファイルごとにパイプラインを起動
まずはもっとも単純なパターン
問題点
この状態だと、3つのファイルをアップすると、三回パイプラインが起動されます。
3回同時に起動したので3個のRunIDフォルダが生成されてしまった
次の方法でこれを対処します。
2. 一定時間ごとにファイルが一つでもアップされたら一回だけパイプラインを起動
-
一意のIDを_source(監視対象=upload フォルダのこと)にして、ファイル作成イベントをすべて個別イベントとして扱ってカウントするのではなく、ファイル作成という1種類のイベントの回数をトラックしてやります。
-
これにより、監視しているディレクトリで起きているファイル作成はすべて同一の対象として追跡されるようになります。
文章だとわかりづらいですが、これを実施する前の追跡では、ファイルごとに個別のイベントとして記録されていたため、特定時間に何回そのイベントが起きたか、という数え方をしても1回+1回+1回という答えになってしまいます。なので、それぞれのイベントに対応する形でパイプラインが起動し、計3回の実行になりました。
: -
プロパティとしてイベントを追跡すると、それぞれの個体ごとにデータの変動などを監視できます。これを応用して、ルール作成時に10分毎に対象ディレクトリが何回ファイル作成イベントを発生させたかという集計をしてやります。
-
集計されたイベントにより、10分枠で考えたときに5回イベントが発生した10分、なにも発生しなかった10分、次にアップが発生した10分・・・という結果が算出されました。1回以上イベントが発生を条件にしてやると、このようになります。
-
これで、パイプライン起動を設定してやることで複数ファイルがアップされても1度の起動となるように構成されました。※10分毎に評価
以上です。
補足
現状では、アクティベータからパイプラインにパラメータを渡すことはできないようでした。