Databricks

Lakeflow Jobsとは?Databricksのワークフロー管理

2026-03-26
更新: 2026-10-13
NicheeLab編集部
目次
  1. マルチタスクジョブの構造(DAG)
  2. タスクタイプ一覧
  3. スケジューリング
  4. リトライとエラーハンドリング
  5. Job ClusterとAll-Purpose Clusterの使い分け
  6. パラメータとタスク値の受け渡し
  7. 通知設定
  8. 監視(実行履歴とSystem Tables)
  9. 試験で問われるポイント
  10. 問題で確認
  11. よくある質問

Lakeflow Jobsは、Databricks上でデータパイプラインやMLワークフローをスケジュール実行・監視するためのオーケストレーション基盤です。 旧称は「Databricks Jobs」(左メニューでは「Workflows」)で、2025年6月11日に「Lakeflow Jobs」へ改称されました。 複数のタスクをDAG(有向非巡回グラフ)で構成し、依存関係・リトライ・パラメータ受け渡しを一元管理します。

この記事では、マルチタスクジョブの構造からスケジューリング、エラーハンドリング、監視までを実務と試験の両面から整理します。

マルチタスクジョブの構造(DAG)

Lakeflow Jobsの基本単位は「ジョブ」で、1つのジョブは1つ以上の「タスク」で構成されます。 タスク間に依存関係を定義するとDAGが形成され、依存先タスクの完了後に次のタスクが自動起動します。

[Ingest] ──→ [Transform_Bronze] ──→ [Transform_Silver] ──→ [Load_Gold]
                    │                                          │
                    └──→ [Data_Quality_Check] ────────────────→┘
                                                               │
                                                          [Notify]

上記のDAGでは、Ingestの完了後にTransform_BronzeとData_Quality_Checkが並列起動し、 Transform_Silver → Load_Goldは直列に実行されます。NotifyタスクはLoad_GoldとData_Quality_Checkの両方が完了してから実行されます。 このように、直列・並列・合流を組み合わせて複雑なパイプラインを表現できます。

依存関係の定義はUIのDepends on欄で上流タスクを選ぶか、JSON/YAML定義の depends_on に上流タスクのtask_keyを並べます。 循環依存はバリデーションエラーになります。

タスクタイプ一覧

1つのジョブ内で異なるタスクタイプを混在させることができます。 例えばNotebookでETLを行い、その結果をSQLタスクで集計し、Lakeflow Spark Declarative Pipelines(旧DLT)のパイプラインでストリーミング処理を実行する構成が1ジョブで完結します。

タスクタイプ実行内容主な用途
Notebookワークスペース上のNotebookを実行ETL、データ加工、MLトレーニング
Python scriptワークスペースファイル・ボリューム・クラウドストレージ・Git上の.pyファイルを実行パッケージ化されたPythonコード
Python wheel.whlパッケージをインストールして実行CI/CDで生成した配布可能なコード
SQLSQLクエリまたはSQLファイルを実行集計・レポート用テーブル更新
Dashboard公開済みのダッシュボードの結果を更新集計後のレポート更新
PipelineLakeflow Spark Declarative Pipelines(旧DLT)のパイプラインを実行宣言的ETL・ストリーミング取り込み
dbtdbt Coreプロジェクトのタスクを実行dbtモデルのビルド・テスト
JARSparkアプリケーションのJARを実行Scala/Java製のバッチ処理
If/Else条件条件に基づいてDAGの分岐を制御動的なワークフロー分岐
For Each入力リストに対してタスクをループ実行複数テーブルへの同一処理の繰り返し

スケジューリング

Lakeflow Jobsを自動で起動するトリガーには、スケジュール・テーブル更新・ファイル到着・モデル更新(ベータ)・連続実行があります。ほかに手動(Run now)や外部のオーケストレーションツールから起動することもできます。DEA試験ガイドが挙げるのはスケジュール・ファイル到着・テーブル更新の3つです。ここではその3つと連続実行を説明します。

CRON式スケジュール

標準的な時刻ベースのスケジュールです。タイムゾーンを明示的に指定でき、 例えば 0 0 2 * * ?(毎日午前2時)や 0 0 */6 * * ?(6時間おき)のように設定します。 Quartz CRON形式(秒フィールドあり・6フィールド)を使用するため、 Linux標準の5フィールドCRONとはフィールド数が異なる点に注意が必要です。

ファイル到着トリガー

Unity Catalogの外部ロケーションまたはボリューム(その配下のパスも可)を監視し、新しいファイルが到着したらジョブを起動します。S3/ADLS/GCS上の場所を対象にできます。 新着ファイルの確認は1分ごとのベストエフォートで、外部ロケーションでファイルイベントを有効にすると、クラウドの変更通知を使って効率よく検知できます。 ファイルの到着時刻が不規則で、「ファイルが来たら処理する」というバッチ取り込みパイプラインに最適です。

テーブル更新トリガー

監視しているテーブルが更新(更新・マージ・削除を含む)されたらジョブを起動します。 Unity Catalogのマネージドテーブル(DeltaとIceberg)、Delta形式の外部テーブル、マテリアライズドビュー、ストリーミングテーブル、それらに依存するビューを1つ以上指定でき、いずれか1つが更新されたときと、すべてが更新されたときのどちらで起動するかを選べます。詳細設定の「トリガー間の最小時間」と「最後の変更後の待機時間」を使うと、続けて届く更新を1回の実行にまとめられます。 ジョブの実行ユーザー(Run as)には、監視するテーブルへのSELECTと、親のカタログ・スキーマへのUSE CATALOG・USE SCHEMAが必要です。

連続実行(Continuous)

常に1つの実行が動き続けるモードで、実行が終わると(成功・失敗を問わず)60秒未満の遅延の後に次の実行が始まります。常時稼働のストリーミング処理に使います。 連続実行のジョブにはリトライポリシーを設定できず、失敗時はジョブ全体が指数バックオフで自動的に再試行されます。実行中に失敗したタスクの再試行はTask retry modeで指定します(既定はOn failure)。

リトライとエラーハンドリング

リトライポリシーはタスクごとに設定します。多くの構成では既定でリトライしませんが、サーバーレスのジョブは既定の自動最適化で失敗したタスクを再試行し、連続実行のジョブは前述の指数バックオフで再試行します。下の表の最後の行はリトライではなく、ジョブ単位の同時実行の設定です。

設定レベルパラメータ挙動
タスクレベルmax_retriesそのタスクが失敗した場合にタスク単体を再実行する最大回数(既定0、-1で無制限)
タスクレベルmin_retry_interval_millis失敗した実行の開始から次のリトライまでの最小間隔(ミリ秒)
タスクレベルretry_on_timeoutタイムアウト時にもリトライ対象にするか
ジョブレベルmax_concurrent_runs同一ジョブの同時実行数の上限(デフォルト1)

タスクにリトライが設定されている場合、そのタスクが失敗するとまずタスク単体が再実行されます。 max_retriesを超えてもタスクが成功しなければ、そのタスクは最終的に「失敗」となり、 既定のRun if(All succeeded)の下流タスクは「Upstream failed」の状態になって実行されません。 ジョブ全体の実行結果は「失敗」になりますが、失敗タスクに依存しないブランチのタスクは正常に実行されます。

「修復実行(Repair Run)」機能を使うと、失敗したタスクとその下流タスクだけを再実行できます。 成功済みのタスクは再実行されないため、大規模パイプラインの部分障害回復に有用です。

Job ClusterとAll-Purpose Clusterの使い分け

Lakeflow Jobsのタスクを動かすコンピュートには、サーバーレスのジョブコンピュート(対応するタスクでは既定)、クラシックのJob Cluster(ジョブ専用クラスタ)、SQLタスク用のSQLウェアハウス、パイプラインのコンピュートがあります。All-Purpose Cluster(対話型クラスタ)も選べますが、本番ジョブには推奨されていません。ここではクラシックの2つを比べます。

比較項目Job ClusterAll-Purpose Cluster
ライフサイクルジョブ実行開始時に自動作成→完了後に自動終了手動で起動・停止(自動終了設定は可能)
DBU単価All-Purposeより低い(金額はクラウドとプランごとの料金ページで確認)Job Clusterより高い
起動遅延毎回クラスタを起動(数分)起動済みなら即実行
適用場面本番バッチ・スケジュール実行開発中のテスト実行・対話デバッグ

本番パイプラインでは原則としてジョブ用のコンピュート(サーバーレスまたはJob Cluster)を使います。Job ClusterはAll-PurposeよりDBU単価が低く、実行後にクラスタが自動で終了するため リソースの放置リスクがありません。開発フェーズでは、すでに起動中のAll-Purpose Clusterで手動テスト実行し、 本番デプロイ時にジョブ用のコンピュートへ切り替えるのが一般的なワークフローです。

パラメータとタスク値の受け渡し

Lakeflow Jobsでは、外部からジョブに渡す「Job Parameters」と、 タスク間で実行時にデータを受け渡す「Task Values」の2つの仕組みがあります。

Job Parameters

ジョブ定義時にパラメータのキーとデフォルト値(固定値または動的参照)を設定し、UIやAPIから値を変えて実行するときや、修復実行のときに値を上書きできます。 動的参照として {{job.start_time.iso_date}}、{{job.run_id}} などの組み込み変数が使えます。 Notebook内からは dbutils.widgets.get("param_name") で取得します。

Task Values(dbutils.jobs.taskValues)

あるタスクの実行結果を後続タスクに渡す仕組みです。

# タスクAで値をセット
dbutils.jobs.taskValues.set(key="row_count", value=df.count())
dbutils.jobs.taskValues.set(key="target_date", value="2026-03-27")

# タスクB(タスクAに依存)で値を取得
row_count = dbutils.jobs.taskValues.get(
    taskKey="task_a", key="row_count"
)
target_date = dbutils.jobs.taskValues.get(
    taskKey="task_a", key="target_date"
)

値はJSONで表せるもの(文字列、数値、ブール値、リストなど)に限られ、JSONにしたときの大きさは48 KiBまでです。 大きなDataFrameやバイナリデータは渡せないため、そのような場合はDelta Tableや一時ファイルに書き出して パスのみをtaskValueで共有するパターンを使います。

通知設定

ジョブの開始・成功・失敗・実行時間のしきい値超過・ストリーミングのバックログ超過といったイベントに対して通知を設定できます。スキップやキャンセルされた実行の通知は止める(ミュートする)こともできます。メール以外の通知先は、管理者があらかじめシステムの通知先として登録しておきます。

  • メール通知: 任意のメールアドレスに送信。複数アドレス指定可能
  • Webhook: 任意のHTTPSエンドポイントに送信し、自社システムなどと連携
  • Slack連携: Databricksの通知先としてSlack Webhookを登録し、チャンネルへ自動投稿
  • Microsoft Teams: WebhookのURLを通知先として登録して通知
  • PagerDuty: PagerDutyの統合キーを通知先として登録して通知

通知はジョブレベルとタスクレベルの両方で設定可能です。 例えば「ジョブ全体の失敗はオンコールチームに通知」「特定タスクの失敗はデータ品質チームに通知」のように 粒度を分けることで、アラート疲れを防ぎつつ適切な担当者に情報を届けられます。

監視(実行履歴とSystem Tables)

Lakeflow JobsのUIから各ジョブの実行履歴を確認でき、成功・失敗・実行時間・各タスクのステータスが一覧表示されます。 実行履歴が保持されるのは過去60日間です。

より高度な分析や長期保持には、Unity CatalogのSystem Tablesを使います。system.lakeflow スキーマに以下のテーブルが用意されています。

テーブル名内容
system.lakeflow.jobsジョブ定義のメタデータ(ジョブ名、作成者、トリガー設定、実行ユーザーなど)
system.lakeflow.job_tasks各タスクの定義情報(タスクキー、上流タスクへの依存関係など)
system.lakeflow.job_run_timeline実行ごとのタイムライン(開始・終了時刻、結果ステータス)
system.lakeflow.job_task_run_timelineタスクごとの実行タイムライン(個別タスクの所要時間・ステータス)

これらのテーブルをSQLで集計すると、「過去30日で最も失敗率が高いジョブ」「平均実行時間が増加傾向にあるタスク」 「特定時間帯のクラスタ利用集中」などを可視化できます。 Databricks SQLダッシュボードと組み合わせると、運用チーム向けのジョブ健全性モニタリングを構築できます。

試験で問われるポイント

Data Engineer Associate試験では、Lakeflow Jobsは「Working with Lakeflow Jobs」(16%)という独立したセクションで出題されます。 ガイドの目標に沿って、次の論点を押さえておきましょう。

  • 本番パイプラインでジョブ用のコンピュートとAll-Purpose Clusterのどちらを使うべきか → ジョブ用のコンピュート(サーバーレスまたはJob Cluster。コストと自動終了の観点)
  • ジョブが失敗したときに失敗タスクだけを再実行する方法 → 修復実行(Repair Run)
  • 前のタスクの計算結果を後のタスクに渡す方法 → dbutils.jobs.taskValues.set() / get()
  • ファイル到着時にジョブを起動する設定 → ファイル到着トリガー
  • ソーステーブルが更新されたらジョブを起動する設定 → テーブル更新トリガー
  • CRON式のフィールド数 → Quartz形式の6フィールド(秒を含む)
  • タスクの依存関係に循環がある場合 → バリデーションエラー(DAGでなくなるため作成不可)

「Lakeflow Spark Declarative Pipelinesのパイプライン」「Lakeflow Jobs」「Notebook単独実行」の役割の違いも整理しておきましょう。 パイプラインはデータセットと変換の関係を宣言的に定義し、ジョブはタスクの実行順序と起動条件を手続き的に定義します。パイプラインはジョブの中の1つのタスクとして実行できます。

問題で確認

Data Engineer Associate – Working with Lakeflow Jobs

問題 1

データエンジニアが本番のマルチタスクジョブを運用している。昨夜のジョブ実行で、5つのタスクのうち3番目のタスク(Transform_Silver)だけが一時的なネットワーク障害で失敗した。1番目と2番目のタスクは成功済みで、4番目と5番目のタスクはUpstream failed(上流の失敗)となり実行されなかった。成功済みのタスクを再実行せずに、失敗したタスクとその下流タスクだけを効率的に再実行するには、どの機能を使用すべきか。

  1. ジョブ全体を最初から再実行する
  2. 修復実行(Repair Run)を使い、失敗タスクとその下流タスクのみ再実行する
  3. 失敗したタスクのNotebookを手動でAll-Purpose Cluster上で実行する
  4. ジョブを削除して同じ定義で新しいジョブを作成し、実行する

正解: B

修復実行(Repair Run)は、失敗したタスクとその下流タスクだけを再実行する機能です。成功済みのタスク(Ingest、Transform_Bronze)は再実行されないため、コンピュート費用と実行時間を節約できます。ジョブ全体の再実行は成功済みタスクも含めて全タスクを再実行するため非効率です。手動Notebook実行ではDAGの依存関係管理が失われ、下流タスクの自動起動もされません。

よくある質問

Lakeflow JobsとDatabricks Jobs(Workflows)の違いは何ですか?

機能的な違いはありません。2025年6月11日に「Databricks Jobs」が「Lakeflow Jobs」に改称され、移行作業は不要とされています。同じ日にDLT(Delta Live Tables)も改称され、DEA試験ガイドでは「Lakeflow Spark Declarative Pipelines」と表記されています。左メニューの「Workflows」は2025年6月18日に「Jobs & Pipelines」へ統合されました。REST API(/api/2.2/jobs/ など)やCLIのjobsコマンドは、引き続きjobsの名前で使えます。現行の試験ガイドの表記は「Lakeflow Jobs」ですが、古い教材やブログでは「Databricks Jobs」「Workflows」と書かれていることがあり、どれも同じ機能を指します。

dbutils.jobs.taskValues と Job Parameters の使い分けは?

Job Parametersはジョブに設定するキーと値(固定値または動的参照)で、実行を起動するときに上書きでき、キーと値の形式でパラメータを受け取るタスクには自動で渡されます。一方dbutils.jobs.taskValues.set() / get()はタスク間の実行時データ受け渡し用です。例えば、前段のタスクで算出したファイル数やパーティションキーを後段タスクに渡す場合はtaskValuesを使います。Job Parametersは、実行日のように起動時に決まる値を、固定値や動的参照({{job.start_time.iso_date}}など)で渡す用途に適しています。

Lakeflow JobsはData Engineer Associate試験でどの程度出題されますか?

Data Engineer Associate試験のExam Guide(2026年5月4日からの試験バージョン)では、Lakeflow Jobsが「Working with Lakeflow Jobs」(日本語版ガイドでは「Lakeflow Jobsの利用」)という独立したセクションになっており、全体の16%を占めます。ガイドが挙げる目標は、リトライと条件付きタスク(分岐とループ)による制御フロー、ノートブック・SQLクエリ・ダッシュボード・パイプラインの各タスクとDAGでの依存関係、スケジュール・ファイル到着・テーブル更新の各トリガー、時間ベースとデータ駆動のトリガーの選び分けです。ジョブを動かすコンピュートの選び方は、セクション1(Databricks Intelligence Platform)のコンピュート選定の目標に含まれます。

この記事の内容を、基礎から読む

出題範囲を体系的に扱う教科書があります。全 16 章、登録なしで全部読めます。

教科書の目次をすべて見る →
この記事で学んだ内容を問題で確認しましょう

16,000問以上の問題で実力チェック

無料で問題を解いてみる
この記事の著者

NicheeLab編集部

データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。


関連記事
Databricks

Databricks資格一覧|全8試験・難易度・勉強法

Databricks認定資格(全8試験)の一覧・出題範囲・合格ライン・難易度を徹底解説。2026年10月時点の公式情報に...

Databricks

Databricks試験の難易度ランキング|7資格を徹底比較

Databricks認定試験のうち7資格の難易度をランキング形式で徹底比較。合格率・学習時間・出題傾向から難易度を分析。...

Databricks

Databricks資格の勉強方法|最短合格ルートと学習時間の目安

Databricks認定資格に最短で合格するための勉強方法を完全ガイド。公式リソース・問題集・学習スケジュールを徹底解説...

Databricks

Databricks Data Engineer Associate完全解説|出題範囲・問題例・合格戦略

Databricks Certified Data Engineer Associate試験を徹底解説。2026年5月版...

Databricks

Databricks Data Engineer Professional完全解説|上級試験の攻略法

Databricks Certified Data Engineer Professional試験を徹底解説。2026年...

Databricksの記事一覧 (109件)
© 2026 NicheeLab All rights reserved.