Databricks Data Engineer Associate 資格対策
Databricks認定 Data Engineer Associate資格は、Databricks Lakehouse Platform 上でのデータエンジニアリングスキルを証明する認定資格です。このブログでは、出題ドメインの概要と、各ドメインで学習すべきポイントを整理し、資格取得のための学習ガイドとしてまとめます。
- 2025年3月時点の情報で整理しています。
- こちらの内容で試験に合格できました(正解率:85%程度)。
資格のドメイン構成
資格試験は以下の5つのドメインに分類されています:
- Databricks Lakehouse Platform
- ELT with Spark SQL and Python
- Incremental Data Processing
- Production Pipelines
- Data Governance
1.Databricks Lakehouse Platform
- Delta Lake の基礎技術:
- ACIDトランザクション、スキーマの管理、Time Travel などの信頼性機能を Parquet と JSON ログファイルで実現。
-- Delta テーブルの作成
CREATE TABLE my_table (id INT, name STRING) USING DELTA;
- OPTIMIZE と ZORDER:読み取り性能向上。
OPTIMIZE my_table ZORDER BY (id);
- VACUUM:古いデータファイルを削除し、ストレージコスト削減。
VACUUM my_table RETAIN 168 HOURS;
- 構成アーキテクチャ:
- コントロールプレーン(UI、ワークフロー管理)
- データプレーン(クラスタ、データ保存)
- Databricks Repos(バージョン管理):
- Gitベースの開発フローに統合可能。
- Databricks ノートブックと Git リポジトリの統合で、再現性・CI/CD 対応を実現。
- サポート操作:Clone, Pull, Commit, Push
- サポート外:競合解決(マージ)、rebase、タグ操作、サブモジュール利用などは不可
#Repos 内での基本操作例
#最新のコードを取得
Git Pull
#修正をローカルから Git に反映
Git Commit & Push
- Databricks Repos + Security のポイント:
- Repos におけるアクセス制御はワークスペースレベルのロールに基づく。
- 個人・グループ単位で Repo の閲覧・編集権限が付与可能。
- Unity Catalog とは独立して管理され、ノートブックやジョブと同様にオブジェクトアクセス管理の対象。
- Repos 上での CI/CD 構成(例えば GitHub Actions 連携)は、クラウドストレージへの直接デプロイや DLT パイプラインとの接続にも活用される。
- Control Plane / Data Plane:
- Control Plane:メタデータ管理、UI操作、認証処理などを Databricks 側で管理
- Data Plane:ユーザーデータの保存・処理を行うクラウドプロバイダ側の領域(S3/ADLS/GCS)
2.ELT with Spark SQL and Python
- ビューの活用:物理データをコピーせずに分析用ビューを作成。
CREATE OR REPLACE TEMP VIEW temp_view AS
SELECT * FROM employees;
- DML 操作(DELETE, UPDATE, MERGE):
DELETE FROM products WHERE price <= 1000;
UPDATE products SET price = price * 0.5 WHERE price > 1000;
MERGE INTO target USING source ON target.id = source.id
WHEN MATCHED THEN UPDATE SET *
WHEN NOT MATCHED THEN INSERT *;
- ビューの種類:
- TEMP VIEW:セッション限定
- GLOBAL TEMP VIEW:グローバルに共有
- 標準VIEW:カタログに永続保存
- JDBC 経由でのデータ接続:PostgreSQL, SQLite など。
CREATE TABLE orders
USING org.apache.spark.sql.jdbc
OPTIONS (
url "jdbc:sqlite:/bookstore.db",
dbtable "orders"
);
- 高階関数(HOF)操作:ARRAY型に対する処理。
SELECT FILTER(students, s -> s.total_courses < 3) FROM faculties;
SELECT TRANSFORM(students, s -> s.total_courses + 1) FROM faculties;
- CREATE TABLE USING CSV:CSVファイルから直接テーブル作成。
CREATE TABLE my_table (col1 STRING, col2 STRING)
USING CSV
OPTIONS (header = "true", delimiter = ";")
LOCATION "/path/input";
- dbutils:Databricksが提供するノートブック用の補助ツールキット
- dbutils.widgets:パラメータの受け取り(インタラクティブなノートブック実行)
- dbutils.fs:DBFS(Databricks File System)などのファイル操作
- dbutils.notebook:別ノートブックの呼び出し・パラメータ渡し
- dbutils.secrets:シークレットスコープからの機密情報読み取り
- dbutils.library:ライブラリのインストール(クラスターレベル)(非推奨)
3.Incremental Data Processing
-
Auto Loaderを活用したデータ取り込み
- 特徴 大量のファイルを効率的にスキャンし、新規ファイルのみをストリーミングまたはバッチ的に取り込む。
- オプション cloudFiles.format、cloudFiles.schemaLocation、cloudFiles.useNotifications などを指定し、スケーラビリティやパフォーマンスを向上。
- Incremental File Listing:新しいファイルのみをリスト化し、フルスキャンを回避する
- Cloud Notifications:AWS S3, Azure ADLS のイベント通知を利用してファイルの追加を即時検出
- Checkpointing:取り込み済みのファイル情報を保存し、重複を防ぐ
- Schema Evolution:新しい列が追加された場合にスキーマを自動更新
- Stream & Batch 対応:ストリーミングモード(リアルタイム処理)とバッチモード(定期処理)の両方をサポート
- Optimize File Reads:ストレージリスト操作のコストを削減し、大量のファイルでもスケーラブル
- コード例
spark.readStream
.format("cloudFiles")
.option("cloudFiles.format", "json")
.option("cloudFiles.schemaLocation", "/path/to/schema")
.option("cloudFiles.useNotifications", "true")
.load("/mnt/raw")
.writeStream
.option("checkpointLocation", "/mnt/checkpoints/bronze")
.table("bronze_table")
-
Structured Streamingとトリガー設定
- Streamingクエリの起動時に .trigger(...) を指定することで、実行モードを制御可能。
- processingTime="2 minutes":2分間隔のマイクロバッチ
- availableNow=True:バッチ処理を一回走らせて即終了するモード
- once=True:似たように単発バッチで処理し終了
- コード例
(spark.readStream
.table("cleaned_data")
.writeStream
.trigger(processingTime="2 minutes")
.option("checkpointLocation", "/mnt/chk")
.outputMode("append")
.table("silver_table"))
- Streamingクエリの起動時に .trigger(...) を指定することで、実行モードを制御可能。
- Structured Streaming でサポートされない(または制限される)主な操作
操作・構文 サポート状況 理由・備考 ORDER BY サポート外 無限データ全体に対する並べ替えはできない(ソート対象が終わらない) LIMIT サポート外 無限ストリームに対して「N 件だけ取得」は意味を成さない DISTINCT(一部制限あり) 状態保持のため慎重に扱う必要あり 大量のキーでメモリ使用が膨大になる可能性 サブクエリ(スカラーサブクエリなど) 一部制限あり ストリーミング側のデータとバッチ的に比較する場合は制限されることがある JOIN(ストリーミング同士) 制限あり ストリーミング vs ストリーミング JOIN にはウォーターマークと時間制限が必須 UNION 可だが、スキーマが完全一致している必要あり -- GROUP BY + HAVING ウィンドウ付きなら可 状態を保持しながら集計可能。無限グループに注意 WINDOW 関数(OVER句) サポート外 通常のウィンドウ関数はサポートされない(window() 集計は可能) PIVOT / CUBE / ROLLUP サポート外 全件を把握する必要があるため JOIN + 外部クエリ(非ストリーム) (Broadcast JOINなど) ストリーム × 静的テーブル は OK(よく使われるパターン) DROP / ALTER TABLE ランタイム中は使用不可 ストリーム処理中にテーブル定義を変更できない -
Delta Live Tables(DLT)
- 宣言的パイプラインにより、データフロー・依存関係を自動管理。
- メダリオンアーキテクチャ(Bronze・Silver・Gold)の実装に最適。
- 例 テーブル依存関係とCDC処理:
CREATE STREAMING LIVE TABLE silver_orders
AS
SELECT order_id, total + tax AS total_after_tax
FROM STREAM(LIVE.bronze_orders);APPLY CHANGES INTO LIVE.gold_aggregated_orders
FROM STREAM(LIVE.silver_orders)
KEYS (order_id)
SEQUENCE BY timestamp
COLUMNS *
-
データ品質管理(Expectations)
- DLTの EXPECT句により、無効なデータを検出・除外・失敗扱いなど柔軟に制御。
- EXPECT のみ:違反データを除外せずに保持しつつ、メトリクスやイベントログに "failed" として記録される(これがデフォルト)
- ON VIOLATION DROP ROW:制約違反の行を**ターゲットテーブルから除外(ドロップ)**する
- ON VIOLATION FAIL UPDATE:パイプライン全体を失敗させる(厳格モード)
- コード例
CREATE LIVE TABLE validated_data
CONSTRAINT valid_id EXPECT (id IS NOT NULL) ON VIOLATION DROP ROW
AS
SELECT * FROM raw_data; - 上記で id が NULL の行は除外され、イベントログで違反件数を確認できる。
- マルチホップ・メダリオンアーキテクチャ
- Bronze:生データをAppend-Onlyで格納(例:ログ、IoTなど)
- Silver:結合・重複排除・クレンジング後の整形データ
- Gold:BIやML用の集約済みデータ、KPIなど
- データレイヤを段階的に分けることで品質管理・メンテナンス性を高める。
4. Production Pipelines
-
Databricks Jobs
- マルチタスクジョブのDAG化:ワークフローをビジュアルに定義し、複数ノートブックやJAR、Pythonスクリプトを連携。
- 依存関係設定:Depends onでタスク間の実行順序を制御。
- 通知設定 ジョブページの “Edit notifications” から、成功/失敗時のメール送信先を指定。
- クラスタータイプ
- All-Purpose Cluster:ノートブック実行や対話的分析向け。起動中は常に課金。
- Job Cluster:ジョブ実行時のみ立ち上がり、自動終了。コスト効率が良く、本番運用で推奨。
- SQL ウェアハウス:Databricks SQL 用のクラスター。BIツールやSQLダッシュボードでの利用に最適。
- Cluster Pools:事前にVMをプールし、起動時間を短縮。
- ジョブスケジューリング(Cron表記)
- 時間ベースの定期実行を設定可能。
- 例:毎朝6時に起動 → 0 6 * * *
- ジョブのリカバリ機能(Repair Job)
- 複数タスクのワークフローにおいて、一部のみ失敗した場合、失敗タスクだけを再実行できる。
- ロングランのジョブが多い本番環境では時短に繋がる重要機能。
- DLTパイプライン(Triggered / Continuous)
- Triggered モード:1度テーブル更新したら停止。日次などのバッチ処理に向いている。
- Continuous モード:常時実行し、新着データをリアルタイム処理。Auto LoaderやKafkaと連動して低レイテンシ分析に活用。
- ジョブ間の依存関係の主な種類(4パターン)
- 線形依存関係(Linear)
- ジョブ A → ジョブ B → ジョブ C のように、1本の直線的な流れで順番に実行される。
- A → B → C
- ブランチ依存関係(Branching)
- ジョブ A の後に、ジョブ B・C が並列に実行される。
- A → {B, C}
- 集約依存関係(Join)
- 複数のジョブ(B, C)が完了したら、ジョブ D を実行
- {B, C} → D
- DAG(有向非巡回グラフ)依存関係
- 複数のパターンが混在する複雑なグラフ型依存
- A → B → D, A → C → D など
- 線形依存関係(Linear)
- SQL Alerts / Dashboards
- Databricks SQLでクエリ結果が一定閾値を超えた場合に通知する機能。
- SlackやWebhookなどの外部サービスと連携し、問題発生をいち早く検知。
5. Data Governance
-
Data Explorer
- Databricks SQLのUIで、テーブル・ビューのメタデータと権限を管理する画面。
- テーブルやDB(スキーマ)の所有者変更や GRANT/REVOKE の実行が簡単に行える。
- 主要な権限
- SELECT:読み取り操作
- MODIFY:データ挿入/更新/削除(INSERT, UPDATE, DELETE, MERGE など)
- USAGE:スキーマ・カタログにアクセスする基本権限(他の権限と組み合わせて使う)
- ALL PRIVILEGES:全権限(SELECT, MODIFY, CREATE, USAGE, READ_METADATA など)を一括付与
GRANT SELECT ON TABLE employees TO hr_team;
REVOKE MODIFY ON TABLE employees FROM ex_hr_member; -
所有権(OWNERSHIP)
- テーブル・ビューなどのオブジェクトごとにOwnerが設定される。
- Data Explorer からUI操作、または ALTER TABLE ... OWNER TO ... で変更可能。
-
Unity Catalog
- 複数ワークスペースを統合的にガバナンスする仕組み(上位資格でより詳しく問われる可能性あり)。
- カタログ/スキーマ/テーブル/ビューに対する統一的なアクセス制御、行レベルセキュリティや列マスキングなどもサポート。
-
ダイナミックビュー(Dynamic View):SQLの VIEW をベースに、アクセスユーザーの属性に応じて表示するデータを動的に制御できるビュー。
少し実用的な例:ロールベース制御(is_member)
CREATE OR REPLACE VIEW sales_view AS
SELECT *
FROM sales
WHERE
(dept_id = 'HR' AND is_member('hr_team')) OR
(dept_id = 'IT' AND is_member('it_team')); - メダリオンアーキテクチャとガバナンス
- Bronze/Silver/Goldレイヤに対して、それぞれのレイヤで必要な権限を絞り込む運用を推奨(例:BronzeはETL担当のみ書き込み可、GoldはBIユーザー向け読み取りのみなど)。
- Data Explorerでオブジェクトごとの権限を整理し、アクセス管理を徹底する。
Discussion