Contents
Databricks の概要と主要サービス
Databricks は Apache Spark をベースにした Lakehouse プラットフォームであり、データレイクの柔軟性とデータウェアハウスの高性能分析機能を同一基盤上で提供します。
本セクションでは Lakehouse の全体像と、主要コンポーネントである Apache Spark と Delta Lake の役割を整理し、以降の章で登場する概念の土台を作ります。
Lakehouse、Apache Spark、Delta Lake の基本概念
-
Lakehouse
データレイク上にテーブル層(メタデータ・インデックス)を持つことで、スキーマ管理や ACID トランザクションが可能になります。これにより「バッチ処理」だけでなく「リアルタイム分析」も同一ストレージで実行できます。 -
Apache Spark
メモリ上で分散処理を行うオープンソースエンジンです。SQL、Python(PySpark)、R、Scala といった複数言語に対応し、データの読込・変換・集計を高速に実行します。 -
Delta Lake
Spark 上で動作するストレージレイヤーで、ACID トランザクション、スキーマ進化(MERGE_SCHEMA)やタイムトラベル機能(過去バージョンの参照)を提供します。これによりデータ品質とガバナンスが大幅に向上します。
アカウント作成とワークスペース構築(2024 年時点の UI)
Databricks の無料体験は公式サイトから数分で完了し、すぐにノートブックやジョブを試せます。
本章では 現在提供されている UI に沿って、アカウント登録からワークスペース作成までの流れを具体的に示します。将来の UI 変更は公式ドキュメントで随時確認してください。
新規アカウント登録手順
まずは Databricks のホームページからサインアップ画面へ移動し、最低限必要な情報だけでアカウントを作成できます。
- ページ右上の Sign Up ボタンをクリック
- メールアドレスを入力し Send code を実行
- 受信した認証コードを入力し、パスワード(8〜20 文字)を設定
※個人情報はメールアドレスとパスワードのみで完結しますが、後続のクラウドプロバイダー連携時には各プロバイダー側の認証情報が必要になります。
ワークスペース作成と初期設定
アカウント作成後に表示される「Create workspace」画面では、以下の項目を選択します。ここで設定した内容は以降のリソース作成や料金体系に影響するため、組織の要件に合わせて選んでください。
- クラウドプロバイダー:AWS/Azure/GCP のいずれか
- リージョン:データソースが配置されているリージョンと同一にすると転送コストが削減できます
- デフォルトクラスタ:ワークスペース作成時に自動で 1 台のクラスタがプロビジョニングされます。サイズは「Small」「Medium」などのラベルで表示され、実際の CPU・メモリ構成はクラウド側のプランに依存します(例:Small は 2 vCPU/8 GB RAM 程度)
設定が完了するとダッシュボードへ遷移し、すぐにノートブックやジョブを作成できる状態になります。
データ管理基盤:Unity Catalog とノートブック操作
2024 年時点では Unity Catalog が Databricks の統合データガバナンス機能として提供されており、カタログ・スキーマ・テーブル単位で細かな権限設定が可能です。
本章では Unity Catalog の有効化手順と、実際にロールを付与した上でノートブックを使う流れを紹介します。
Unity Catalog の有効化とカタログ・スキーマ作成
- ワークスペース左側メニューの Data → Unity Catalog を選択
- 画面右上の Enable ボタンをクリックし、利用規約に同意
- 「Create catalog」ダイアログでカタログ名(例:
demo_catalog)を入力して作成 - 作成したカタログ内にスキーマ(例:
sales)を追加
これだけでデータ資産が Unity Catalog の管理下に入り、以降の権限設定や監査ログが有効になります。
アクセス制御のベストプラクティス
最小権限の原則(Least Privilege)を守ることがセキュリティ上重要です。以下は典型的なロール構成例です。
| ロール名 | 主な権限 |
|---|---|
account_admin |
カタログ・スキーマ・テーブルすべてへのフルアクセス |
data_engineer |
SELECT、INSERT、CREATE TABLE(自所属スキーマ) |
analyst |
SELECT のみ |
権限付与のサンプル SQL
|
1 2 3 4 5 6 |
-- ユーザー alice に data_engineer ロールを付与 GRANT ROLE data_engineer TO USER alice@example.com; -- データエンジニアに sales スキーマ内の全テーブルへの SELECT/INSERT を許可 GRANT SELECT, INSERT ON CATALOG demo_catalog.sales.* TO ROLE data_engineer; |
ロールは必要に応じて細分化し、定期的にレビューすることで不要権限の蓄積を防げます。
ノートブック作成と基本的なセル操作
ノートブックはデータ探索・ETL・レポーティングを同一画面で実行できるインタラクティブ環境です。以下の手順で作成し、Python と SQL の両方を試すことができます。
- ワークスペース上部メニュー Create → Notebook をクリック
- 名前(例:
sales_analysis)と実行言語(PythonまたはSQL)を選択 - 作成されたセルにコードを書き、Shift + Enter で実行
Python セルのサンプル
|
1 2 3 4 5 6 |
# CSV ファイルを DataFrame に読み込み、最初の数行を表示 df = spark.read.format("csv") \ .option("header", "true") \ .load("/FileStore/tables/sample.csv") display(df) |
SQL セルのサンプル
|
1 2 3 4 5 |
SELECT * FROM demo_catalog.sales.orders WHERE order_date >= '2024-01-01' LIMIT 20; |
ショートカット Ctrl+/(コメント切替)や Alt+Enter(新規セル作成)を覚えておくと、ノートブックの操作が格段に速くなります。
データ取り込みと Delta テーブルへの変換
Databricks ではローカルファイル、DBFS、外部ストレージ(S3・ADLS 等)のいずれからでもデータを読み込めます。本章では代表的な 2 通りの手順と、Delta テーブルへ永続化するベストプラクティスを示します。
DBFS へのファイルアップロード(UI と CLI)
UI を使う場合
- 左メニュー Data → Upload を選択
- 「Drag & drop」エリアにローカルの CSV/JSON 等をドロップ
- 保存先はデフォルトで
/FileStore/tables/が推奨されます
CLI(Databricks CLI)を使う場合
|
1 2 3 |
# ファイルを DBFS にコピー databricks fs cp sales.csv dbfs:/FileStore/tables/sales.csv |
アップロード後は以下のように Spark で確認できます。
|
1 2 3 4 |
display(spark.read.format("csv") .option("header", "true") .load("dbfs:/FileStore/tables/sales.csv")) |
外部ストレージからの読み込み例(Amazon S3 / Azure ADLS)
外部ストレージに直接アクセスするには、事前に認証情報を Spark コンフィグへ設定します。
Amazon S3 の例
|
1 2 3 4 5 6 |
spark.conf.set("fs.s3a.access.key", "<ACCESS_KEY>") spark.conf.set("fs.s3a.secret.key", "<SECRET_KEY>") df = spark.read.format("json") \ .load("s3a://my-bucket/raw/events.json") |
Azure Data Lake Storage (ADLS) の例
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
spark.conf.set( "fs.azure.account.auth.type.<account>.dfs.core.windows.net", "OAuth") spark.conf.set( "fs.azure.account.oauth.provider.type.<account>.dfs.core.windows.net", "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider") spark.conf.set( "fs.azure.account.oauth2.client.id.<account>.dfs.core.windows.net", "<APP_ID>") spark.conf.set( "fs.azure.account.oauth2.client.secret.<account>.dfs.core.windows.net", "<APP_SECRET>") spark.conf.set( "fs.azure.account.oauth2.client.endpoint.<account>.dfs.core.windows.net", "https://login.microsoftonline.com/<TENANT>/oauth2/token") df = spark.read.format("parquet") \ .load("abfss://raw@<account>.dfs.core.windows.net/events.parquet") |
Delta テーブルの作成と最適化
取得した DataFrame を Delta 形式で保存することで、ACID トランザクションやスキーマ自動進化が有効になります。
|
1 2 3 4 5 6 |
df.write.format("delta") \ .mode("overwrite") \ .partitionBy("year", "month") \ # パーティショニング例 .option("mergeSchema", "true") \ .saveAsTable("demo_catalog.sales.orders") |
テーブルの最適化(Z‑ORDER)
クエリ頻度が高い列に対して Z‑ORDER を設定すると、スキャン対象データ量が劇的に減少します。
|
1 2 |
OPTIMIZE demo_catalog.sales.orders ZORDER BY (order_id); |
ETL とジョブ運用:Delta Live Tables とスケジューリング
Delta Live Tables(DLT) は宣言的な SQL/Scala 定義だけでインクリメンタル ETL パイプラインを構築でき、品質チェックや自動リカバリ機能が標準装備されています。本章ではシンプルなパイプライン作成からジョブ化・スケジューリング、コスト管理までの流れを示します。
シンプルな DLT パイプライン構築例
以下は「RAW CSV → Bronze テーブル → Silver でデータクレンジング → Gold で集計」の典型的な 3 層モデルです。SQL をノートブックに記述し、DLT UI からパイプラインとして保存します。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
-- Bronze: 生データを Delta に取り込む(CSV が DBFS 上にある前提) CREATE LIVE TABLE raw_sales COMMENT "Bronze layer: raw CSV data" TIER = "bronze" AS SELECT * FROM csv.`/FileStore/tables/sales.csv`; -- Silver: データクレンジングと売上金額計算 CREATE LIVE_TABLE enriched_sales COMMENT "Silver layer: cleaned data with revenue" TIER = "silver" AS SELECT *, CAST(price AS DOUBLE) * CAST(quantity AS INT) AS revenue, TO_DATE(order_timestamp) AS order_date FROM LIVE.raw_sales WHERE price > 0 AND quantity > 0; -- Gold: 日次集計テーブル CREATE LIVE_TABLE daily_sales COMMENT "Gold layer: daily aggregated sales" TIER = "gold" AS SELECT order_date, SUM(revenue) AS total_revenue, COUNT(*) AS orders_cnt FROM LIVE.enriched_sales GROUP BY order_date; |
品質チェック(EXPECT)例
|
1 2 3 |
-- revenue が正の数値であることを保証 EXPECT revenue > 0 ON LIVE.enriched_sales; |
作成したパイプラインは DLT UI の Refresh mode を Scheduled に設定し、Cron 表記(例:0 * * * *)で毎時実行できます。
ジョブの作成・スケジュール設定・モニタリング
- 左メニュー Jobs → Create Job
- 名前を入力(例:
sales_etl_job)し、Task type にDelta Live Tables pipelineを選択 - 先ほど作成したパイプライン(
sales_etl)を指定 - スケジュールは「Cron 表記」か「Interval」で設定。頻度はデータ更新サイクルに合わせて調整します。
ジョブ実行状況は Jobs ページの一覧から確認でき、失敗した場合は自動で再試行するオプションも設定可能です。ログは DBFS の dbfs:/databricks/jobs/ 配下に保存されます。
コスト管理とトラブルシューティングのポイント
| 項目 | 推奨設定・対策 |
|---|---|
| クラスタサイズ | 小規模データは Small(2 vCPU/8 GB)で開始し、Auto‑Scaling を有効化。 |
| Auto‑Termination | 30 分以上アイドル状態が続いたら自動停止させることで無駄な課金を防止。 |
| スポットインスタンス | AWS では Spot、Azure では低優先度プールを利用すると最大 70% 削減可能。 |
| エラーログ確認 | ジョブ詳細画面の Details タブでスタックトレースを取得し、エラーコード別に対処。 |
| よくあるエラー例 | PERMISSION_DENIED → ロール付与不足PATH_NOT_FOUND → DBFS パス確認RESOURCE_EXHAUSTED → クラスタサイズ増加または Auto‑Scaling 有効化 |
具体的な対処フロー(例:RESOURCE_EXHAUSTED)
- ジョブ実行画面で失敗したタスクを開く
- エラーメッセージに記載されたリソース要件(CPU、メモリ)を確認
- Clusters → Edit から対象クラスタのサイズを
Medium以上へ変更し、Auto‑Scaling をオンにする - ジョブを再実行し、ステータスが
Succeededに変わることを確認
まとめ
- Databricks の Lakehouse アーキテクチャは、データレイクの柔軟性とウェアハウスの高速分析を同時に提供します。
- 現行 UI(2024 年)でのアカウント作成・ワークスペース構築手順はシンプルで、数分以内に環境が整います。
- Unity Catalog による統合ガバナンスとノートブックによるインタラクティブ開発が、データサイエンティストからエンジニアまで幅広く活用できる土台です。
- データ取り込みは DBFS・外部ストレージ双方に対応し、Delta Lake 形式で永続化すれば ACID とスキーマ自動進化が利用可能です。
- Delta Live Tables を使えば宣言的 ETL パイプラインを短時間で構築でき、ジョブとして定期実行・モニタリングも一元管理できます。
本ガイドに沿って環境をセットアップし、まずはサンプルデータでノートブックと DLT の操作感を掴んでみてください。疑問点やエラーが発生した場合は公式ドキュメント(Databricks Documentation)および本稿のトラブルシューティング表を参照すると迅速に解決できるでしょう。