モデルが更新されたときにジョブをトリガーする
モデル更新トリガーを使用して、Unity Catalogでモデルの変更が発生したときにジョブを自動的に実行します。この機能により、モデル更新を追跡するためのcronスケジュールや永続クラスターは不要になります。
ベータ版
モデル更新トリガーはベータ版です。
モデル更新トリガーは、次の2つの主要なペルソナ向けに設計されています。
- データサイエンティスト は、新しいモデルバージョンの準備ができたとき、またはエイリアスが設定されたときに、単一のモデルまたは一度に複数のモデルに対してジョブをトリガーできます。たとえば、所有するモデルが変更されるたびに、検証ジョブ、テストジョブ、またはプロモーションジョブを自動的に実行できます。例:新しいバージョンまたはエイリアスでのモデルの検証を参照してください。
- 管理者は 、メタストア全体(またはスキーマ)のすべてのモデルを監視できます。たとえば、管理者は、作成されたすべての新しいモデルを自動的に監査できます。例:スキーマまたはメタストア全体のモデルを監査するを参照してください。
モデル更新トリガーの仕組み
モデル更新トリガーは、Unity Catalog内のスコープでモデルイベントを監視し、一致するイベントが発生したときにジョブ実行をトリガーします。モデル更新トリガーを設定するときは、 スコープ と 条件 を選択します。
利用可能なスコープは次のとおりです:
- モデル :単一の登録済みモデル。
- スキーマ :スキーマ内のすべてのモデル。
- メタストア :メタストア内のすべてのモデル。メタストア管理者のみが、メタストアスコープのトリガーを設定できます。
条件によって、実行をトリガーするタイミングが決定されます:
- モデルが作成されました :スコープ内に新しい登録済みモデルが作成されます。
- モデルバージョンの準備が整った : スコープ内で新しいモデルバージョンが準備完了になります。
- モデルエイリアスが設定されています :指定されたエイリアスがモデルバージョンに適用されます。トリガーごとに最大10個のエイリアスを指定でき、いずれかのエイリアスが適用されたときにトリガーが応答します。
モデル更新トリガーは、クラウドプロバイダーの費用以外に追加費用を発生させません。
バッチ更新
モデルアップデートトリガーは、新しいイベントを約1分ごとにポーリングします。各間隔で検出された変更はバッチ化され、次のジョブ実行にジョブパラメーターとして渡されます。モデルアップデートトリガーに関連するジョブパラメーターを参照してください。
ジョブの実行ごとに最大9件の更新を処理できます。9つを超えるイベントが受信された場合、残りのイベントは次回の実行で処理されます。制限事項を参照してください。
始める前に
モデルアップデートトリガーを使用するには、次の項目が必要です。
- ワークスペースでUnity Catalogが有効になっている必要があります。
- トリガーで監視するターゲットのモデルまたはスキーマに、
EXECUTE権限が必要です。EXECUTEがないと、それらのモデルへの読み取りと書き込みが失敗する可能性があります。 - メタストアスコープのトリガーを設定するには、メタストア管理者である必要があります。ジョブがUnity Catalog内のあらゆるモデルにアクセスできるように、メタストア内のすべての現在および将来のカタログで自身に
EXECUTE権限を付与する必要もあります。
モデルアップデートトリガーを追加する
既存のジョブにモデル更新トリガーを追加するには:
-
Databricks ワークスペースのサイドバーで、 ジョブとパイプライン をクリックします。
-
ジョブの一覧で、トリガーを追加するジョブの名前をクリックします。
-
右側の ジョブの詳細 ペインで、 トリガーの追加 をクリックします。
-
トリガーの種類 で、 モデル更新 を選択します。
-
スコープ の下で、 モデル 、 スキーマ 、または メタストア を選択し、監視するモデルまたはスキーマを指定します。
-
[条件] で、トリガーするイベントを選択します。
- モデルが作成されました
- モデルバージョンが準備完了
- モデルエイリアスが設定されています 。監視するエイリアスを最大10個まで指定してください。トリガーは、指定されたエイリアスのいずれかが設定されると応答します。
-
(オプション)詳細オプションを構成します:
- トリガー間の最小時間 (秒) : 前回の実行後、次の実行をトリガーするまでに待機する最小時間。この期間中に更新されたモデルは、待機時間が経過した後でのみ実行をトリガーします。この設定を使用して、実行作成の頻度を制御します。
- 最終変更後の待機時間 (秒) :モデル更新後に実行をトリガーするまで待機する時間。この期間中に別のモデル更新があると、タイマーがリセットされます。この設定は、モデル更新がバッチで提供され、すべての更新が到着した後にバッチ全体を処理する必要がある場合に使用できます。
-
設定を検証するには、 [トリガーをテスト] をクリックします。エラーがない場合、ボタンには Success が表示されます。
-
保存 をクリックします。
トリガーを保存した後、トリガーが初期化されるまで約1分間待ちます。メッセージ 「トリガーはまもなく評価されます」 は、初期化が進行中であることを示します。初期化後、スコープ内の一致するモデルイベントによってジョブ実行がトリガーされます。
このトリガーを後で編集、停止する、または削除するには、 ジョブの詳細 ペインの スケジュールとトリガー セクションを使用します。既存のトリガーを管理するを参照してください。
Jobs APIからモデル更新トリガーを構成することもできます。Jobs API を使用してモデル更新トリガーを構成するを参照してください。
例:新しいバージョンまたはエイリアスでモデルを検証する
モデルが変更されたときに検証、テスト、またはプロモーションジョブを実行するには、 モデル スコープと モデルバージョン準備完了 または モデルエイリアス設定済み のいずれかの条件でトリガーを構成します。エイリアス変更の場合は、prodやstagingなど、監視するエイリアスを指定します。複数のモデルを一度に監視するには、代わりに Schema スコープを使用してください。トリガーが初期化された後、監視対象のモデルに一致する変更があると、ジョブ実行がトリガーされます。
例:スキーマまたはメタストア全体でモデルを監査する
スキーマまたはメタストアで作成されたすべてのモデルを監査するには、 スキーマ または メタストア スコープと モデル作成済み 条件でトリガーを構成します。トリガーが初期化された後、スコープ内で作成されたモデルはすべて、変更を記録または検証できるジョブ実行をトリガーします。
モデル更新トリガーに関連付けられているジョブ パラメーター
モデル更新トリガーが起動すると、実行をトリガーした変更に関する情報が、{{job.trigger.model.updates}}動的値参照を介してジョブ実行で利用可能になります。値は、バッチ内のモデル更新のJSONリストです:
[
{
"full_name": "model.full.name1",
"version": 123,
"alias_name": "prod"
}
]
フィールドは次のように入力されます:
full_name:常に、作成または更新されたモデルの名前が設定されます。version:準備が整ったバージョンについては モデルバージョンの準備が整った イベント、エイリアスが設定されたバージョンについては モデルエイリアスが設定された イベントで入力されます。alias_name:設定されたエイリアスの名前については モデルエイリアスが設定された イベントにのみ入力されます。
たとえば、各条件のパラメーター値は次のとおりです:
-
モデル作成済み :
JSON[{ "full_name": "model.number.one" }, { "full_name": "model.number.two" }] -
モデルバージョンが準備完了 :
JSON[
{ "full_name": "model.number.one", "version": 7 },
{ "full_name": "model.number.two", "version": 3 }
] -
モデルエイリアスが設定されています :
JSON[
{ "full_name": "model.number.one", "version": 7, "alias_name": "prod" },
{ "full_name": "model.number.two", "version": 3, "alias_name": "staging" }
]
更新をタスクで利用できるようにするには、値が{{job.trigger.model.updates}}のジョブパラメーターを追加します。パラメーターを追加するには、ジョブのサイドパネルで [パラメーターの編集] をクリックし、パラメーターの値を{{job.trigger.model.updates}}に設定します。ジョブパラメーターの詳細については、ジョブのパラメーター化を参照してください。
以下のノートブックは、eventsという名前のパラメーターを読み込み、実行に渡されたモデル更新を処理します。
import json
json_list = dbutils.widgets.get("events")
data = json.loads(json_list)
for item in data:
print(f"Full Name: {item['full_name']}, Version: {item.get('version')}, Alias Name: {item.get('alias_name')}")
For eachタスクでモデル更新を処理する
For each taskは、リスト内の各要素ごとにネストされたタスクを1回実行します。モデル更新トリガーの場合、{{job.trigger.model.updates}}の要素ごとに1回の実行をすることができます。
- For each タスクが
{{job.trigger.model.updates}}を入力として受け取るように構成します。 - イテレーションによって提供される各入力の値を読み取るように、入れ子になったタスクを構成します。
- 各更新の値は、入れ子になったタスクのウィジェット パラメーターとして利用できます。
次のノートブックは、ネストされたタスク内のイテレーションごとの値を読み取ります:
full_name = dbutils.widgets.get("full_name")
version = dbutils.widgets.get("version")
alias_name = dbutils.widgets.get("alias_name")
print(f"Full Name: {full_name}, Version: {version}, Alias Name: {alias_name}")
Jobs API を使用してモデル更新トリガーを構成します。
モデル更新トリガーは、triggerオブジェクトをjobs/create、jobs/update、またはjobs/reset操作に追加することで設定できます。次の例ではjobs/updateを使用しています:
{
"job_id": 574587036927544,
"new_settings": {
"trigger": {
"pause_status": "UNPAUSED",
"model": {
"securable_name": "main.default",
"condition": "MODEL_ALIAS_SET",
"aliases": ["alias1", "alias2"],
"min_time_between_triggers_seconds": 3600,
"wait_after_last_change_seconds": 120
}
},
"parameters": [
{
"default": "{{job.trigger.model.updates}}",
"name": "events"
}
]
}
}
「model」トリガーオブジェクトの場合:
securable_name:監視するスキーマまたはモデル。メタストア全体を監視するには、空のままにするか省略してください。condition``MODEL_CREATED、MODEL_VERSION_READY、またはMODEL_ALIAS_SETのいずれかです。aliases監視するエイリアス。MODEL_ALIAS_SET条件にのみ適用されます。
失敗したモデル更新トリガーの通知を受け取る
モデル更新トリガーの評価に失敗した場合に通知を受け取るには、ジョブ失敗時のEメール通知またはシステム宛先通知を設定します。ジョブに通知を追加するを参照してください。
制限事項:
モデルアップデートトリガーには次の制限があります。
- ワークスペースごとに最大100個のモデル更新トリガーを構成できます。この制限はケースバイケースで引き上げることができます。
- 各トリガーされたジョブ実行中に最大9つのイベントが処理されます。
- 各モデル更新トリガーは、最大10個のエイリアスを監視できます。
- 実行が1時間連続して毎分トリガーされた場合、トリガーは自身を無効化し、手動で再有効化する必要があります。
- メタストアスコープのトリガーを構成するには、メタストア管理者である必要があり、ジョブが任意のモデルにアクセスできるように、Unity Catalog内の現在および将来のすべてのカタログに対する
EXECUTE権限を自分に付与する必要があります。
FAQ
デプロイメントジョブとモデルアップデートトリガーは、いつ使用すればよいですか?
次の場合は、モデルアップデートトリガーを使用してください。
- モデル作成イベントまたはエイリアスの変更を監視します。
- 単一のモデルよりも広いスコープ(スキーマやメタストアなど)でイベントを監視します。
- 各モデルに個別のジョブを設定する代わりに、単一のトリガーで複数のモデルを監視します。
モデルバージョンの作成とジョブ実行の関係に関する緊密なUIカップリングとアクティビティログが必要な場合は、デプロイメントジョブを使用してください。