2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

OneLake にファイルがアップされたらパイプラインを実行する

Posted at

はじめに

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 フォルダからコピーします。

image.png

コピーが完了したら削除

image.png

あて先設定では backup フォルダに実行IDフォルダを作成してコピーします。

image.png



@concat('backup/',pipeline().RunId)

1. アップされたファイルごとにパイプラインを起動

まずはもっとも単純なパターン

  1. リアルタイムハブにアクセスし、OneLake イベントのアラート作成を選択
    image.png

  2. イベントソースの設定
    image.png

  3. イベント選択で、FileCreatedを選択
    image.png

  4. 監視するイベントの選択から監視対象のフォルダを選択して保存
    image.png
    image.png
    image.png

  5. アクションで実行したいパイプラインを選択してこのルールを作成するアクティベータ(今回は新規作成)を決めて作成
    image.png

  6. ファイルをアップすると、ルールの画面で検知・起動されます
    image.png
    image.png
    image.png
    ※少しルールが有効になるのにラグがあるようなので、2ファイルめを追加で起動されました。
    image.png

  7. 監視ハブとレイクハウスの状態からも実行確認
    image.png
    image.png
    image.png

問題点

この状態だと、3つのファイルをアップすると、三回パイプラインが起動されます。
image.png

検知したイベント
image.png

パイプラインを起動した回数
image.png

3回同時に起動したので3個のRunIDフォルダが生成されてしまった
image.png

次の方法でこれを対処します。

2. 一定時間ごとにファイルが一つでもアップされたら一回だけパイプラインを起動

  1. 既存のアラートは削除します。
    image.png

  2. New object を選択
    image.png

  3. 一意のIDを_source(監視対象=upload フォルダのこと)にして、ファイル作成イベントをすべて個別イベントとして扱ってカウントするのではなく、ファイル作成という1種類のイベントの回数をトラックしてやります。
    image.png

  4. これにより、監視しているディレクトリで起きているファイル作成はすべて同一の対象として追跡されるようになります。
    image.png

    文章だとわかりづらいですが、これを実施する前の追跡では、ファイルごとに個別のイベントとして記録されていたため、特定時間に何回そのイベントが起きたか、という数え方をしても1回+1回+1回という答えになってしまいます。なので、それぞれのイベントに対応する形でパイプラインが起動し、計3回の実行になりました。
    :

  5. プロパティとしてイベントを追跡すると、それぞれの個体ごとにデータの変動などを監視できます。これを応用して、ルール作成時に10分毎に対象ディレクトリが何回ファイル作成イベントを発生させたかという集計をしてやります。
    image.png
    image.png

    image.png

  6. 集計されたイベントにより、10分枠で考えたときに5回イベントが発生した10分、なにも発生しなかった10分、次にアップが発生した10分・・・という結果が算出されました。1回以上イベントが発生を条件にしてやると、このようになります。
    image.png

  7. これで、パイプライン起動を設定してやることで複数ファイルがアップされても1度の起動となるように構成されました。※10分毎に評価
    image.png

    アップロード
    image.png
    次の10分枠評価タイミングで、一つのRunIdのみ移動(5つ目のフォルダ)
    image.png

以上です。

補足

現状では、アクティベータからパイプラインにパラメータを渡すことはできないようでした。

image.png

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?