Databricksノートブックは、Python・SQL・Scala・Rの4言語に対応したインタラクティブな開発環境です。 1つのノートブック内でマジックコマンドを使い複数言語を切り替えられ、リアルタイム共同編集にも対応します。
本記事では、マジックコマンドの全種類、共同編集と権限モデル、実行コンテキスト(インタラクティブ/ジョブ)、 ウィジェットによるパラメータ化、ノートブック間連携、Git統合(Repos)を体系的に整理します。
ノートブック作成時にデフォルト言語(Python / SQL / Scala / R)を1つ選択します。 各セルはデフォルト言語で実行されますが、セル先頭にマジックコマンド(%python, %sql等)を記述することで セル単位で言語を切り替えられます。
%python
# Pythonセル:DataFrameを作成してTempViewに登録
df = spark.range(100).toDF("id")
df.createOrReplaceTempView("numbers")
%sql
-- SQLセル:Pythonで作ったTempViewをSQLで参照
SELECT id, id * 10 AS multiplied FROM numbers WHERE id < 10;
%scala
// Scalaセル:同じSparkSessionを共有
val df = spark.sql("SELECT * FROM numbers LIMIT 5")
df.show()言語を切り替えてもSparkSessionは共有されるため、Pythonで作成したTempViewをSQLやScalaから参照できます。 ただしPython変数とScala変数は直接共有できないため、TempViewやDeltaテーブルを介してデータを受け渡します。
| コマンド | 用途 | 実行先 | 代表的な使い方 |
|---|---|---|---|
| %python | Pythonセルとして実行 | アタッチされたクラスタ(ドライバ) | DataFrame操作、pandas、ライブラリ呼び出し |
| %sql | SQLセルとして実行 | アタッチされたクラスタ(Spark SQL) | SELECT / DDL / DML、結果は自動表示 |
| %scala | Scalaセルとして実行 | アタッチされたクラスタ(JVM) | 型安全なSpark処理、Java連携 |
| %r | Rセルとして実行 | アタッチされたクラスタ(SparkR) | 統計分析、R可視化 |
| %md | Markdownとしてレンダリング | クライアント側(実行なし) | ドキュメント、セクション見出し、説明文 |
| %run | 別ノートブックを同一セッションに読み込み | アタッチされたクラスタ | 共通設定やユーティリティ関数の読み込み |
| %sh | シェルコマンドを実行 | ドライバノードのOS | ファイル確認、パッケージ情報、curl |
| %fs | DBFSファイルシステム操作 | DBFS(dbutils.fsのショートカット) | ls, cp, head, mkdirs |
| %pip | Pythonパッケージのインストール | クラスタのPython環境 | pip install パッケージ名==バージョン |
%shはドライバノードのOSで実行されるため、ワーカーノードでは実行されません。 また%shの実行結果はSpark処理に直接渡せないため、ファイルの確認やデバッグ目的で使います。
Databricksノートブックはリアルタイム共同編集に対応しています。複数ユーザーが同時にセルを編集でき、 変更は即座に他のユーザーに反映されます。コメント機能や@メンションでレビューコミュニケーションも可能です。
ノートブックとフォルダには以下の4段階のアクセス権限があります。
| 権限レベル | 閲覧 | 実行 | 編集 | 権限管理 | 用途 |
|---|---|---|---|---|---|
| CAN VIEW | 可 | 不可 | 不可 | 不可 | レビュアー、閲覧のみの関係者 |
| CAN RUN | 可 | 可 | 不可 | 不可 | 分析ユーザー、ジョブ実行者 |
| CAN EDIT | 可 | 可 | 可 | 不可 | 開発者、コード変更担当 |
| CAN MANAGE | 可 | 可 | 可 | 可 | 管理者、プロジェクトオーナー |
ノートブックの実行には2つのモードがあり、用途に応じて使い分けます。
| 実行モード | コンピュートリソース | セッション状態 | 適した用途 |
|---|---|---|---|
| インタラクティブ実行 | All-Purpose Cluster(共有可能) | セル間で変数・キャッシュが保持される | 探索・開発・デバッグ・アドホック分析 |
| ジョブ実行 | Job Cluster(ジョブ専用、起動→破棄) | 毎回クリーンな状態から開始 | 定期バッチ、本番ETL、再現性が必要な処理 |
# インタラクティブ実行のイメージ
# ノートブック → All-Purpose Cluster にアタッチ → セル単位で対話的に実行
#
# ジョブ実行のイメージ
# Workflows → Job Cluster を起動 → ノートブック全体を上から順に実行 → クラスタ破棄
#
# ┌─────────────┐ attach ┌──────────────────┐
# │ Notebook │───────────→│ All-Purpose Cluster│ (インタラクティブ)
# │ (開発・探索) │ │ (共有・状態保持) │
# └─────────────┘ └──────────────────┘
#
# ┌─────────────┐ task ┌──────────────────┐
# │ Workflow │───────────→│ Job Cluster │ (ジョブ)
# │ (定期実行) │ create │ (専用・毎回新規) │
# └─────────────┘ └──────────────────┘インタラクティブ実行では前のセルの実行結果(変数値、一時ビューなど)が後続セルに引き継がれます。 ジョブ実行では毎回クリーンな環境のため、外部状態に依存しない設計(冪等な書き込み、パラメータ受け渡し)が重要です。
同一ノートブックを日付・環境・フィルタ条件ごとに使い回すには、ウィジェットでパラメータ化します。 Workflowsのタスクパラメータ(Base parameters)とも連携し、ジョブ実行時に値を注入できます。
%python
# ウィジェットの作成(4種類)
dbutils.widgets.text("proc_date", "2026-01-01", "処理日")
dbutils.widgets.dropdown("env", "dev", ["dev", "staging", "prod"], "環境")
dbutils.widgets.combobox("region", "APAC", ["APAC", "EMEA", "NA"], "リージョン")
dbutils.widgets.multiselect("status", "active", ["active", "inactive", "pending"], "ステータス")
# ウィジェット値の取得
proc_date = dbutils.widgets.get("proc_date")
env = dbutils.widgets.get("env")
# 取得した値をクエリに使用
df = spark.sql(f"""
SELECT * FROM {env}_catalog.orders.daily
WHERE order_date = '{proc_date}'
""")
df.display()
# ノートブック終了時に結果を返す(親ジョブが受け取れる)
dbutils.notebook.exit(f"OK: {proc_date}, rows={df.count()}")ウィジェットの種類はtext(自由入力)、dropdown(単一選択)、combobox(選択+自由入力)、multiselect(複数選択)の4つです。 Workflowsからジョブ実行する場合、Base parametersのキー名がウィジェット名と一致すれば自動的に値が注入されます。
ノートブックから別のノートブックを呼び出す方法は2つあり、状態共有の有無が決定的に異なります。
| 呼び出し方法 | 実行コンテキスト | 変数共有 | 戻り値 | 推奨用途 |
|---|---|---|---|---|
| %run ./path/to/notebook | 同一セッション(インライン読み込み) | すべて共有(変数、関数、UDF) | なし(セッション変数を直接参照) | 共通設定の読み込み、開発時のデバッグ |
| dbutils.notebook.run() | 分離されたセッション | なし(完全分離) | 文字列(dbutils.notebook.exitで返す) | 本番ジョブ、子タスクの分離実行 |
%python
# 方法1: %run - 同一セッションに読み込み(状態共有)
# %run ./includes/common_setup
# → common_setup内の変数・関数がすべて使える
# → 状態が混ざるため本番では注意
# 方法2: dbutils.notebook.run - 分離実行(本番推奨)
result = dbutils.notebook.run(
"./jobs/etl_daily",
timeout_seconds=3600,
arguments={"proc_date": "2026-03-27", "env": "prod"}
)
print(f"子ノートブックの結果: {result}")
# → 例: "OK: 2026-03-27, rows=15234"
# 複数ノートブックの並列実行(ThreadPoolExecutorと組み合わせ)
from concurrent.futures import ThreadPoolExecutor
notebooks = ["./jobs/etl_orders", "./jobs/etl_customers", "./jobs/etl_products"]
with ThreadPoolExecutor(max_workers=3) as executor:
futures = [
executor.submit(dbutils.notebook.run, nb, 3600, {"proc_date": "2026-03-27"})
for nb in notebooks
]
results = [f.result() for f in futures]Databricks ReposはGitプロバイダ(GitHub、GitLab、Bitbucket、Azure DevOps)と連携し、 ノートブックやPythonモジュールをブランチ単位で管理できます。
%python
# Repos配下のPythonモジュールをインポート
# /Repos/[email protected]/my-project/mypkg/transform.py
from mypkg.transform import run_etl, validate_output
# ノートブックはオーケストレーションに集中
result_df = run_etl(spark, source="s3://landing/orders/", date="2026-03-27")
validation = validate_output(result_df, expected_min_rows=1000)
if not validation["passed"]:
dbutils.notebook.exit(f"VALIDATION_FAILED: {validation['reason']}")
result_df.write.format("delta").mode("overwrite").saveAsTable("gold.daily_orders")Data Engineer Associate
問題 1
ノートブックAからノートブックBを呼び出し、Bの処理結果(成功/失敗のステータス文字列)をAで判定して後続処理を分岐させたい。AとBの変数空間は分離する必要がある。最も適切な方法はどれか。
正解: B
dbutils.notebook.runは分離された実行コンテキストでノートブックを実行し、dbutils.notebook.exitで返した文字列を戻り値として受け取れます。%runは同一セッションに読み込むため変数空間が共有されます。フォルダ配置や%sqlマジックではノートブック間の呼び出しと状態分離は実現できません。
%runとdbutils.notebook.runの違いは何ですか?
%runは呼び出し先のノートブックを同一セッションに読み込み、変数・関数・UDFがすべて共有されます。dbutils.notebook.runは分離された実行コンテキストで実行し、戻り値はdbutils.notebook.exitで返す文字列のみです。本番ジョブでは状態分離のためdbutils.notebook.runが推奨されます。
ノートブックの%sqlはSQLウェアハウスで動きますか?
通常のノートブック内の%sqlは、アタッチされたSparkクラスター上で実行されます。SQLウェアハウスはDatabricks SQL(SQLエディタ・ダッシュボード)の実行基盤です。ノートブックからSQLウェアハウスに接続するにはspark.sql()ではなくJDBC/ODBC接続やDatabricks SQL Connectorを使用します。
ノートブック内のパッケージ管理はどうすべきですか?
本番ジョブではDatabricks Runtimeバージョンを固定し、%pip install パッケージ名==バージョン でバージョンをピン留めします。Repos配下にrequirements.txtを置き、ノートブック先頭で%pip install -r requirements.txtを実行する方法も一般的です。クラスタライブラリとしてインストールする方法もありますが、ジョブ間の依存競合に注意が必要です。
NicheeLab編集部
データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。
Databricks資格一覧|全7試験・難易度・勉強法
Databricks認定資格全7試験の一覧・難易度・出題範囲・合格ラインを徹底解説。2026年最新版の公式試験ガイドに準...
Databricks試験の難易度ランキング|全7資格を徹底比較
Databricks認定全7試験の難易度をランキング形式で徹底比較。合格率・学習時間・出題傾向から難易度を分析。...
Databricks資格の勉強方法|最短合格ルートと学習時間の目安
Databricks認定資格に最短で合格するための勉強方法を完全ガイド。公式リソース・問題集・学習スケジュールを徹底解説...
Databricks Data Engineer Associate完全解説|出題範囲・問題例・合格戦略
Databricks Certified Data Engineer Associate試験を徹底解説。5つの出題ドメイ...
Databricks Data Engineer Professional完全解説|上級試験の攻略法
Databricks Certified Data Engineer Professional試験を徹底解説。10の出題...