2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

滋賀大学で講義した資料を説明します。4.5時間の講義でした。

スライドはこちら。

デモや実習のリポジトリ。

アジェンダ

  • イントロダクション: データエンジニアリングとは
    • データエンジニアリングとETLの基本
    • 2つの実装アプローチ
  • Part 1: Sparkの基礎(90分)
    • Apache Sparkとは
    • Apache Sparkのアーキテクチャ
    • DataFrameと変換処理
    • PySparkによる命令型ETL実装
  • Part 2: Lakeflow SDP(90分)
    • 宣言型パイプラインの概念
    • コアとなる構成要素
    • エクスペクテーション(データ品質)
    • Lakeflowジョブによる自動化
  • Part 3: 実践演習(90分)
    • NYC Taxiデータを使って命令型・宣言型の両方でETLパイプラインを構築

イントロダクション

データエンジニアリングとは

データエンジニアリングとは分析などでデータを活用できるようにするための営みです。

Screenshot 2026-01-16 at 8.22.09.png

データエンジニアリングとは、様々なソースやフォーマットで提供される生のデータを収集、分析できるようにするシステムの設計、構築に関するプロセスを意味します。このようなシステムによって、ユーザーはビジネスの成長につながる実践的なデータアプリケーションを作り出すことが可能となります。

参考: What Is Data Engineering?

データエンジニアリングは、需要の高まっているスキルです。生成AIの出現により、その需要はさらに高まりを見せています。データエンジニアは、データを統合し、あなたたちがナビゲートする助けとなるシステムを設計する人たちです。データエンジニアは以下を含む様々なタスクを実行します:

  • 取得:ビジネスに関連するすべての様々なデータセットを特定します
  • クレンジング:データにおけるすべてのエラーを特定し、綺麗にします
  • 変換:すべてのデータに共通的なフォーマットを与えます
  • 曖昧性の除去:複数の方法で解釈し得るデータを解釈します
  • 重複排除:データの重複したコピーを排除します

これらが完了すると、データレイクやデータレイクハウスのような中央リポジトリにデータを格納することができます。また、データエンジニアはデータのサブセットをデータウェアハウスにコピー、移動することができます。

データエンジニアは以下を含む様々なツールとテクノロジーを扱います:

  • ETLツール: ETL(抽出、変換、ロード)ツールはシステム間でデータを移動します。データにアクセスし、分析により適した形にするためにデータを変換します。
  • SQL: 構造化クエリー言語(SQL)はリレーショナルデータベースへのクエリーにおける標準言語です。
  • Python: Pythonは汎用プログラミング言語です。データエンジニアはETLタスクでPythonを使うことがあります。
  • クラウドデータストレージ: Amazon S3、Azure Data Lake Storage(ADLS)、Google Cloud Storageなど
  • クエリーエンジン: 回答を得るためにデータに対してクエリーを実行するエンジン。データエンジニアは、Dremio Sonar、Spark、Flinkなどのエンジンを取り扱います。

データエンジニアはビジネスアナリストやデータサイエンティストと連携してプロジェクトに取り組みます。

Screenshot 2026-01-16 at 9.21.00.png
Screenshot 2026-01-16 at 9.21.16.png

Databricksとの関係性についても触れます。ビジネスアナリストの方が利用するDatabricksの機能は、全体から見るとほんの一部です。

Screenshot 2026-01-16 at 9.22.10.png

一方、データエンジニアリングの視点からDatabricksを見ると、大部分が関係していることがわかります。それだけ、データエンジニアの方に求められるスキルが幅広いということです。

Screenshot 2026-01-16 at 9.22.32.png

ETL処理

ETLとはExtract(抽出)、Transform(変換)、Load(ロード)から構成される処理です。データエンジニアリングに取り組む際には基本的にこの流れに従います。

Screenshot 2026-01-16 at 10.02.50.png

メダリオンアーキテクチャ

メダリオンアーキテクチャは特定の機能を指すものではなく、データパイプラインを構築する際に従うべき情報の整理学であり、Databricksで提唱しているアーキテクチャです。

  • メダリオンアーキテクチャは、レイクハウスに格納されているデータの品質を示す一連のデータレイヤーを表現します。
  • 企業のデータプロダクトに対して信頼できる唯一の情報源(single source of truth)を構築するために、Databricksではマルチレイヤーのアプローチを取ることをお勧めしています。
  • このアーキテクチャは、公立的な分析に最適化されたレイアウトでデータ格納される前の検証、変換を行う複数のレイヤーをデータが追加する際の、原子性、一貫性、分離性、耐久性を保証します。ブロンズ(生)、シルバー(検証済み)、ゴールド(拡張済み)という用語はそれぞれのレイヤーにおけるデータの品質を表現しています。

Screenshot 2026-01-16 at 10.04.24.png

2つの実装アプローチ

ここまで、データエンジニアリングに関係するコンセプトを説明してきましたが、実際にデータエンジニアリングにおける実装はどのようにおこなうのでしょうか?Databricksでは2つのアプローチが存在します。

命令型(PySpark)

どうやって処理するかをステップバイステップで記述

df = spark.read.csv(...)
df = df.filter(...)
df.write.saveAsTable(...)

メリット: ✓ 柔軟性が高い ✓ デバッグしやすい
デメリット: △ コード量が多い △ 運用が大変

宣言型(Lakeflow SDP)

何が欲しいかを宣言し、実行方法はシステムにお任せ

@dp.table
def silver_data():
return dp.read("bronze")

メリット: ✓ 簡潔 ✓ 自動で依存関係解決
デメリット: △ 細かい制御が難しい

本講座ではまず命令型で基礎を学び、その後宣言型の利点を体験します。

Part 1 : Sparkの基礎

なぜPandasではなくSparkなのか?

Screenshot 2026-01-16 at 11.08.34.png

データ量が少なければpandasで問題ありませんが、pandasではメモリに収まらないデータを処理することができないため、大規模データを取り扱う際にはSparkが選択肢として上がってきます。

Sparkの動作原理を学びましょう。

Sparkでもpandas同様にデータフレームを取り扱います。

Screenshot 2026-01-16 at 11.25.11.png

Sparkデータフレームを操作する際には、トランスフォーメーションアクションの違いを理解することが重要です。トランスフォーメーションは変換ロジックを定義しますが、変換処理自身を実行しません。アクションを呼び出すことで定義された変換処理が実行されます。これは、遅延評価とよばれるものであり、処理を実行する前にSparkが処理を最適化できるようにするためです。

Screenshot 2026-01-16 at 11.27.07.png

Sparkはデータを分散させて処理を行います。フィルタリングなど分散されたデータで処理が完結する狭い変換処理では、並列化の恩恵を最大限に享受できます。一方、集計や結合などの広い変換処理では、分散したデータのやり取りが必要となります。これはシャッフルと呼ばれ、処理性能にインパクトを与えるので注意が必要です。

Screenshot 2026-01-16 at 11.29.06.png

視覚的にSparkを学ぶアーティファクトです。

本格的にSparkを勉強したい方はこちらの書籍もどうぞ。私たちが執筆しました。

Part 2 : Lakeflowによる宣言型パイプライン

すべては良いデータからスタートします。
Screenshot 2026-01-16 at 11.34.16.png

一方、ガバナンスの欠如、複雑性、貧弱な信頼性などが良いデータの実現を妨げています。

Screenshot 2026-01-16 at 11.35.04.png

Lakeflowはこれらの課題を解決します。
Screenshot 2026-01-16 at 11.35.22.png
Screenshot 2026-01-16 at 11.35.41.png

LakeflowはDatabricksにおけるデータエンジニアリングをシンプルなものにします。
Screenshot 2026-01-16 at 11.36.01.png

Lakeflowは、コネクト、Spark宣言型パイプライン(SDP)、ジョブから構成されています。本講義ではSDPとジョブにフォーカスします。
Screenshot 2026-01-16 at 11.36.32.png

Lakeflow SDPは、シンプルな宣言型アプローチを使用して信頼性の高いデータパイプラインを構築する、初のETLフレームワークです。Lakeflow SDPはインフラストラクチャを大規模に自動管理するため、データアナリストやエンジニアはツールに費やす時間を削減し、データから価値を引き出すことに集中できます。

Screenshot 2026-01-16 at 11.37.26.png

宣言型アプローチでは、どう行うかではなく、何を行うべきかを記述します。以下の二つのコードは同じ処理を記述しています。

Spark命令型プログラム

def upsertToDelta(microBatchOutputDF: DataFrame, batchId: Long) {
  microBatchOutputDF
    .groupBy("key")
    .agg(max_by("ts", struct("*").alias("row"))
    .select("row.*")
    .createOrReplaceTempView("updates")

  microBatchOutputDF.sparkSession.sql(s"""
    MERGE INTO cdc_data_raw t
    USING updates s
    ON s.key = t.key
    WHEN MATCHED AND s.is_delete THEN 
      UPDATE SET DELETED_AT=now()
    WHEN MATCHED THEN UPDATE SET 
      A=CASE WHEN s.ts > t.ts THEN s.a ELSE t.a,
      B=CASE WHEN s.ts > t.ts THEN s.b ELSE t.b,
      … for every column …
    WHEN NOT MATCHED THEN INSERT *
  """)
}

cdcData.writeStream
  .foreachBatch(upsertToDelta _)
  .outputMode("append")
  .start()

宣言型パイプラインプログラム

AUTO CDC INTO cdc_data
FROM source_data
KEYS (id)
SEQUENCE BY ts
APPLY AS DELETE WHEN is_deleted

SDPのコアとなる概念

インクリメンタル処理とは?

一言で言うと 「前回から変わった部分だけ」を処理する方式です。
Screenshot 2026-01-16 at 11.40.16.png

大量のデータを取り扱うデータエンジニアリングにおいて、毎日すべてのデータを処理することは非効率的です。毎日のデータ更新を例に考えてみましょう。
Screenshot 2026-01-16 at 11.41.21.png

インクリメンタルな処理を実装することで、処理時間、コストを削減することができます。しかし、自前でインクリメンタル処理を実装することは困難です。そこでLakeflow SDPです。Lakeflow SDPがインクリメンタル処理を簡単にしてくれます。
Screenshot 2026-01-16 at 11.42.16.png

Lakeflowの構成要素を説明する前に、一般的なテーブルとビューの定義を確認しましょう。
Screenshot 2026-01-16 at 11.43.49.png

Part1では、df.write.saveAsTableを用いてテーブルを保存しました。このアプローチで高度なデータパイプラインを実装しようとすると、いくつかの課題に直面します。
Screenshot 2026-01-16 at 11.44.58.png

これらの課題を、SDPでは宣言するだけで解決します。
Screenshot 2026-01-16 at 11.45.50.png

宣言するのは主に以下の2つの要素です。
Screenshot 2026-01-16 at 11.47.33.png

  • マテリアライズドビュー(MV) データ変換・集計・JOIN
  • ストリーミングテーブル(ST) ファイルの増分取り込み

迷ったらMV、ファイルの取りっこ身にはSTと覚えておきましょう。

マテリアライズドビュー(MV)とは

Screenshot 2026-01-16 at 11.48.44.png

ストリーミングテーブル(ST)とは

Screenshot 2026-01-16 at 11.49.04.png

MVとSTの使い分け

Screenshot 2026-01-16 at 11.49.58.png

  • 典型的なパイプライン構成では、Bronze層とSilver層をSTで、Gold層をMVで作ります。
  • STはファイルの取り込みだけでなく、フィルタリング、型変換、カラム追加といった1行が1行になる処理であれば続けて使えます。
  • 集計(groupBy)やJOINが必要になったタイミングでMVに切り替えます。これは、STが「追加」しかできないのに対し、集計やJOINは既存の行を「更新」する必要があるためです。

Lakeflow SDPでパイプライン構築がシンプルに

Lakeflowパイプラインエディタで効率的にデータパイプラインを構築できます。
Screenshot 2026-01-16 at 11.51.40.png

エクスペクテーションでデータ品質を担保します。
Screenshot 2026-01-16 at 11.52.20.png

  • データエクスペクテーションにより、パイプライン内でデータ品質と整合性の制御を定義
  • 柔軟なポリシーでデータ品質エラーに対処: 失敗、破棄、アラート、隔離
  • すべてのデータパイプライン実行と品質メトリクスが取得、追跡、報告されます

Lakeflow SDPでパイプライン管理がシンプルに

イベントログでパイプラインのイベントを確認できます。
Screenshot 2026-01-16 at 11.53.27.png

  • パイプラインに関連するすべての情報を包含(データ品質チェック、進捗、リネージ)
  • 宣言型パイプラインUI、API、またはDeltaテーブルとして直接クエリで表示可能!

データリネージでエンドツーエンドのリネージを確認できます。
Screenshot 2026-01-16 at 11.54.51.png

Lakeflowジョブ

Lakeflowジョブは、パイプラインを含む様々なものをオーケストレーションします。
Screenshot 2026-01-16 at 11.56.10.png

Lakeflowジョブの主要コンセプト

Screenshot 2026-01-16 at 11.57.07.png

GUIとAPIでジョブを作成できます。
Screenshot 2026-01-16 at 11.57.42.png

ジョブの実行結果を視覚的に確認できます。
Screenshot 2026-01-16 at 11.58.13.png

手動実行、スケジュール実行に加えて、テーブル更新、ファイル到着をトリガーにすることも可能です。

  • テーブル更新トリガー 指定されたテーブルの更新が発生したときにジョブ実行をトリガーします。データの鮮度を保証します。UCテーブル、ストリーミングテーブル、マテリアライズドビューをサポート。
  • ファイル到着トリガー 外部ロケーションに新しいファイルが到着したときにジョブの実行をトリガーします。

Screenshot 2026-01-16 at 11.59.35.png

ジョブに含まれるタスクを条件分岐やループなど様々なロジックで制御可能です。
Screenshot 2026-01-16 at 12.00.33.png

Part 3 : 実践演習

  • 演習1(25分): PySparkによる命令型ETL
    Bronze → Silver → Gold パイプラインを手動実装
  • 演習2(25分): Lakeflow SDP宣言型パイプライン
    同じ処理を宣言型で実装
  • 演習3(15分): エクスペクテーションの追加
    データ品質チェックを追加
  • 演習4(15分): ジョブによる自動化
    ワークフローとスケジュール設定

使用するノートブックなどはこちらに格納されています。

参考資料

はじめてのDatabricks

はじめてのDatabricks

Databricks無料トライアル

Databricks無料トライアル

2
1
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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?