Databricks

Databricks Declarative Pipelines (Delta Live Tables) と Workflows の使い分け・設計判断

2026-03-21
更新: 2026-03-27
NicheeLab編集部

Databricksでデータパイプラインを構築する際、Lakeflow Declarative Pipelines(旧Delta Live Tables / DLT)とWorkflows(Jobs)のどちらを使うべきか、あるいは併用すべきかは頻出の設計判断です。 DLTは「何をしたいか」を宣言する方式で、データ品質や依存関係をフレームワークが自動管理します。 Workflowsは「どう実行するか」を命令する方式で、任意のタスクをDAGで組み合わせて柔軟にオーケストレーションします。

本記事では両者を実行モデル・エラー処理・データ品質・コストの4軸で比較し、併用パターンと選択判断フローを整理します。

DLT vs Workflows:主要観点の比較

観点DLT(Declarative Pipelines)Workflows(Jobs)
実行モデル宣言型:テーブル間の依存関係をフレームワークが自動解決命令型:タスクの実行順をDAGで明示的に定義
定義方法@dlt.tableデコレータ / SQL CREATE LIVE TABLEJSON/YAML定義 / UI / Databricks CLI / REST API
エラー処理Expectations(品質違反の記録/除外/停止)が組み込みタスク単位のリトライ、条件分岐、通知設定
データ品質Expectationsによる宣言的な品質ゲート組み込みの品質機能なし(ノートブック内で自前実装)
再処理Full Refresh / 増分処理をフレームワークが管理手動でバックフィルロジックを実装
リネージテーブル間の依存関係を自動可視化タスク間のDAGは可視化されるがデータリネージは別途
対象ワークロードETL/ELTパイプライン(テーブル変換中心)ETL・ML・通知・外部API呼び出し等あらゆるタスク
コストDLT用のDBU単価が適用(通常のJobsより高い)Jobs Compute DBU単価(DLTより低い)
コンピュート管理DLTがクラスタを自動管理(Enhanced Autoscaling)ジョブクラスタまたは既存クラスタを指定

DLTの基本構文:宣言的なテーブル定義

DLTでは「このテーブルはこのソースからこう変換して作る」と宣言するだけで、依存関係の解決・増分処理・スキーマ進化をフレームワークが管理します。

import dlt
from pyspark.sql.functions import col, current_timestamp

@dlt.table(comment="Bronzeレイヤー:生データ取り込み")
def bronze_orders():
    return (
        spark.readStream
        .format("cloudFiles")
        .option("cloudFiles.format", "json")
        .load("/mnt/landing/orders/")
    )

@dlt.table(comment="Silverレイヤー:クレンジング済み")
@dlt.expect_or_drop("valid_amount", "amount > 0")
def silver_orders():
    return (
        dlt.read_stream("bronze_orders")
        .select("order_id", "customer_id", "amount", "region",
                current_timestamp().alias("processed_at"))
        .filter(col("order_id").isNotNull())
    )

@dlt.table(comment="Goldレイヤー:集約")
def gold_revenue_by_region():
    return (
        dlt.read("silver_orders")
        .groupBy("region")
        .agg({"amount": "sum"})
        .withColumnRenamed("sum(amount)", "total_revenue")
    )

dlt.read_stream()でストリーミング読み取り、dlt.read()でバッチ読み取りを指定します。 テーブル間の依存はread/read_streamの参照先から自動的に解決されるため、実行順の指定は不要です。

Workflowsの基本構造:マルチタスクDAG

Workflowsはタスクの依存関係をDAG(有向非巡回グラフ)として定義します。 各タスクにはノートブック、Pythonスクリプト、JARファイル、DLTパイプライン、dbtプロジェクトなどを指定でき、 異なるコンピュートリソースを割り当てることも可能です。

# Workflows のDAG構造の概念
#
# [extract_task] ──→ [dlt_pipeline_task] ──→ [notify_task]
#       │                                         ↑
#       └──→ [validate_source_task] ──────────────┘
#
# - extract_task: 外部APIからデータ取得(Pythonノートブック)
# - dlt_pipeline_task: DLTパイプラインでETL(タスクタイプ: Pipeline)
# - validate_source_task: ソースデータの疎通確認
# - notify_task: Slack通知(成功/失敗を条件分岐で制御)

Workflowsの強みは、タスクごとにリトライ回数・タイムアウト・条件分岐(if/else/for_each)を設定できる柔軟性です。 MLモデルの学習、外部APIの呼び出し、通知といったデータ変換以外のタスクも統合管理できます。

併用パターン:Workflows × DLT

実務で最も多いのは、WorkflowsのDAG内の1タスクとしてDLTパイプラインを組み込む併用パターンです。 DLTにはETLの変換・品質管理を任せ、Workflowsには前後処理のオーケストレーションを担当させます。

タスク順序担当内容
1. データ取得Workflows タスク(ノートブック)外部APIからJSON取得→Landingゾーンに保存
2. ETL変換Workflows タスク(DLTパイプライン)Bronze→Silver→GoldをDLTで宣言的に処理
3. データ検証Workflows タスク(ノートブック)Goldテーブルのレコード数やチェックサム検証
4. 通知Workflows タスク(条件分岐)成功→Slack通知、失敗→PagerDutyアラート

この構成では、DLTパイプラインの成功/失敗がWorkflowsのタスクステータスとして伝搬するため、 後続タスクの条件分岐やリトライ設定と組み合わせた高度なエラーハンドリングが可能です。

選択判断フロー

DLTとWorkflowsの選択は、パイプラインの性質とチームのニーズに応じて判断します。

パイプラインの中心はテーブル変換(ETL/ELT)か?
├─ YES → データ品質管理(Expectations)が必要か?
│    ├─ YES → DLTを使う(Workflowsと併用も検討)
│    └─ NO  → シンプルならWorkflows単体、複雑ならDLTを検討
└─ NO  → MLトレーニング・外部API・通知など多様なタスクか?
     └─ YES → Workflowsを使う(ETL部分があればDLTを併用)
  • テーブル変換中心 + 品質管理が必要 → DLT(単独 or Workflows併用)
  • 多様なタスクのオーケストレーション → Workflows
  • ETL + ML + 通知を統合 → Workflows + DLTパイプラインタスク
  • 単純なノートブック1本の定期実行 → Workflowsで十分

コスト面の違い

DLTはDLT専用のDBU単価が適用され、通常のJobs Compute DBUより単価が高くなります。 ただしDLTはEnhanced Autoscalingによるクラスタ最適化やincremental処理の自動化を行うため、 手動で同等の機能を実装した場合の開発コスト・運用コストとの総合比較が必要です。

コスト項目DLTWorkflows(ノートブック直接実行)
DBU単価DLT単価(Jobs Computeより高い)Jobs Compute単価
クラスタ管理自動(Enhanced Autoscaling)手動設定(オーバー/アンダープロビジョニングのリスク)
品質管理の開発コストExpectations組み込み(追加開発なし)自前実装が必要(開発・テスト・保守コスト)
増分処理の開発コストフレームワーク自動管理Structured Streamingやmergeロジックを自前実装

試験で問われるポイント

  • DLTが「宣言型」でWorkflowsが「命令型」であることの具体的な違い
  • データ品質管理はDLTのExpectationsが組み込みで提供し、Workflowsには組み込みの品質機能がないこと
  • WorkflowsのタスクとしてDLTパイプラインを実行できること(併用パターン)
  • DLTは依存関係を自動解決するがWorkflowsはDAGで明示的に定義すること
  • DBU単価の違い(DLT > Jobs Compute)

問題で確認

Data Engineer Associate / Professional

問題 1

データエンジニアが以下の要件を持つパイプラインを設計している。(1) 外部APIからデータ取得 (2) Bronze→Silver→Goldの3段階ETL (3) Silverテーブルで品質違反レコードを自動除外 (4) パイプライン完了後にSlack通知。最も適切なアーキテクチャはどれか。

  1. すべてのステップをDLTパイプライン内で定義する
  2. Workflowsでノートブックタスクのみを使い、品質チェックをPythonで自前実装する
  3. Workflowsで全体をオーケストレーションし、ETL部分はDLTパイプラインタスクとして組み込む
  4. DLTパイプラインを2つ作成し、1つ目でデータ取得、2つ目でETLを行う

正解: C

外部APIからのデータ取得やSlack通知はDLTの対象外(テーブル変換ではない)であるため、DLT単独では要件を満たせません。WorkflowsでDAGを構成し、ETL部分をDLTパイプラインタスクとして組み込むことで、DLTのExpectationsによる品質管理とWorkflowsの柔軟なタスクオーケストレーション(通知含む)を併用できます。

よくある質問

DLTパイプラインをWorkflowsのタスクとして実行できますか?

はい、Workflowsのタスクタイプに「Delta Live Tables pipeline」があり、DLTパイプラインをDAGの一タスクとして組み込めます。前段でデータ取得、中段でDLT変換、後段で通知といった構成が可能です。DLTの宣言型品質管理とWorkflowsのオーケストレーションを組み合わせた最も一般的な併用パターンです。

DLTとWorkflowsでエラーハンドリングはどう違いますか?

DLTはパイプライン内でExpectations(品質制約)に基づく自動的なエラー処理(記録/除外/停止)を行います。Workflowsはタスク単位でリトライ回数・条件分岐(if/else task)・通知を設定でき、より広範なオーケストレーション制御が可能です。両者を併用すると、DLTでデータ品質エラーを処理し、Workflowsでインフラ障害やタスク失敗をハンドリングする二層の構造になります。

小規模チームでもDLTを導入すべきですか?

ETLパイプラインが3テーブル以上の依存関係を持ち、品質管理やリネージ可視化が必要なら、小規模でもDLTの導入効果があります。逆に、単純なnotebook1本のバッチ処理であればWorkflows単体で十分です。DLTの管理テーブルやイベントログの運用コストも考慮して判断してください。

この記事で学んだ内容を問題で確認しましょう

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

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

NicheeLab編集部

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


関連記事
Databricks

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

Databricks認定資格全7試験の一覧・難易度・出題範囲・合格ラインを徹底解説。2026年最新版の公式試験ガイドに準...

Databricks

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

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

Databricks

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

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

Databricks

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

Databricks Certified Data Engineer Associate試験を徹底解説。5つの出題ドメイ...

Databricks

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

Databricks Certified Data Engineer Professional試験を徹底解説。10の出題...

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