こんにちは。エンタープライズクラウド部 松田です。
今回は、Databricks公式チュートリアルを通して行った結果、得られた知識や、 やや理解しにくかった概念も含めて、できる限りわかりやすくお伝えできればと思います。
前提
- Databricks初心者向けの内容となります
- こちらの公式チュートリアルに対する補足となります https://docs.databricks.com/aws/ja/getting-started/
チュートリアルの構成
- データをクエリーして可視化
- ノートブックからCSVデータをインポートして可視化
- テーブルを作成
- 宣言型パイプラインを使用してETLパイプラインを構築するLakeflow
- Apache Spark を使用して ETL パイプラインを構築する
- ML モデルをトレーニングしてデプロイする
- ノーコードでLLMをクエリし、AIエージェントをプロトタイプ化
上記の構成から成っています。 各セクションとも、詰まらなければ20-30分程度で進められたかなという印象です。 今回は、Free Edition https://www.databricks.com/learn/free-edition で進めました。
チュートリアルを行うことで得られる知識
- ノートブックを利用したpythonコード、SQLコードの実行
- 実行結果に対するアドホックな可視化方法
- カタログの概念および利用方法
- Databricksにおける権限設定および継承
- パイプラインの作成およびジョブスケジュール
- 機械学習の管理ツール(MLflow)と、機械学習ライブラリ(scikit-learn)を利用したモデル作成
- Playgroundを利用したカスタムAIエージェントの開発、検証
チュートリアル前半では、Databricks初心者向けにノートブックを利用したデータ操作を学び、 チュートリアル後半では、データエンジニアやAIエンジニア向けのDatabricksプラットフォームでのモデル/AIエージェント開発を学べる内容となっています。
やや理解しにくかった概念
公式チュートリアルでは、Databricks独自の記法や、WebUIの特徴もあり、一部やや理解しづらかったものがありました。 以下で簡単に解説して行きたいと思います。
言語マジックコマンド
ノートブックに記述したSQLもしくはコードを実行する場合、実行環境(コンピュート)を起動する必要があります。 Free Editionでは、2種類のコンピュートを起動させることができます。
- 一般コンピューティング
一般コンピューティング SQLウェアハウス
SQLウェアハウス 一般コンピューティング
- Databricksの基本的な計算リソースです。主にDatabricksノートブックで使われ、Python、Scala、R、SQLなど複数の言語を混在させて実行できます。
- SQLウェアハウス
- 主にSQLクエリの実行に特化しており、アドホックなSQLクエリ実行、レポート作成、ダッシュボードの構築が可能です。
SQLウェアハウスを実行環境として選択している場合、SQLおよびMarkdown以外の言語を実行することができません。

一般コンピューティングで実行している場合、実行言語を選択することができます。

ただし、ノートブックのデフォルト言語(Python)以外を選択した場合は、%sql、%r、%scalaといった構文が付与されます。

これは、「言語マジックコマンド」と呼ばれ、コマンドはノートブックの対話型環境(REPL(Read-Eval-Print Loop)) に反映されます。 言語マジックコマンドを利用することで、実行環境を切替え(再起動)することなく、利用言語を柔軟に変更できます。 DatabricksのクラスターがApache Sparkを基盤としているため、同一クラスター上で異なる言語のコードを実行することが可能となっています。
また、ノートブックでは、いくつかの補助的なマジックコマンドもサポートされます。
- %sh: ノートブックでシェル・コードを実行できます
- %fs: dbutils ファイルシステムコマンドを使用できます
- %md:テキスト、画像、数式や方程式など、さまざまなタイプのドキュメントを含めることができます
マジックコマンドの詳細については、以下を参照してください。 https://docs.databricks.com/gcp/ja/notebooks/notebooks-code
権限の考え方
Databricksでは、以下のようにツリー構造で権限を継承管理する仕様となっています。

オブジェクト(上記の四角の箱)それぞれに対して、「所有者」「権限」「プリンシパル」という3つの要素からなる設定を行うことができます。
1. 所有者 (Owner)
オブジェクトの所有者は、そのオブジェクトに対するすべての権限を自動的に持ちます。 所有者は、他のプリンシパル(ユーザー、グループ、サービスプリンシパル)にそのオブジェクトに対する権限を付与することができます。 所有者はオブジェクトを削除することもできます。 いわゆる、オブジェクトの管理者という扱いですね。
2. プリンシパル (Principal)
Databricksが認識するユーザー、グループ、またはサービスのことを指します。
- ユーザー: Databricksを利用する個々の人。メールアドレスなどで識別されます。
- グループ: 複数のユーザーをまとめたものです。グループに権限を付与することで、グループ内の全ユーザーがその権限を持つようになり、管理が楽になります。
- サービスプリンシパル: 自動化されたプロセスやアプリケーションがDatabricksリソースにアクセスするために使用する特別なIDです。
プリンシパルは、設定メニューの「IDとアクセス」で管理できます。

3. 権限
権限は、プリンシパルがDatabricks内の特定のオブジェクトに対して実行できる操作を定義する許可です。 権限は、プリンシパルに直接付与することも、グループを通じて付与することも可能です。 権限は階層的に継承されます。例えば、カタログにSELECT権限を付与すると、そのカタログ配下の全スキーマ、全テーブルやビューにSELECT権限が自動的に適用されます。
権限の種類には以下のようなものがあります。

注意点
親オブジェクトの所有者が子オブジェクトのすべての権限を自動的に持つわけではありません。 例えば、スキーマの所有者はそのスキーマ内のテーブルに対するすべての権限を自動的に持つわけではありませんが、自分自身にそのテーブルへの権限を付与することができます。
整理すると、
- オブジェクトの所有者は、オブジェクトに対して全権限を持つ
- オブジェクトの所有者は、子オブジェクトに対して権限を付与できる
- オブジェクトに付与された権限は、子オブジェクトに対しても継承される
ということになります。
カタログとワークスペースの概念
カタログとワークスペースは明確に異なる概念ですので注意しましょう。
1. ワークスペース
ワークスペースは、Databricksを利用するユーザーが実際に作業を行う「場所」です。
Databricksにログインすると、作業領域(ワークスペース)が割り当てられます。 ワークスペースは以下のような構造になっています。
- ワークスペース(ルート)
- フォルダ
- デフォルトで定義される特殊なフォルダとして、「User(ホームフォルダ)」「Sharedフォルダ」「Reposフォルダ」があります。
- 各フォルダ配下にオブジェクトを作成することができます。
- オブジェクトには、以下のようなものがあります。
- デフォルトで定義される特殊なフォルダとして、「User(ホームフォルダ)」「Sharedフォルダ」「Reposフォルダ」があります。
- フォルダ
よくあるIDEのワークスペースのような概念です。
2. カタログ
一方、カタログは、Databricks上で管理されるデータの「メタデータ」を整理・管理する仕組みです。
- カタログ : データの最上位の組織単位です。組織単位、プロジェクト、開発ライフサイクル(開発、本番)等を管理します
- スキーマ : カタログ内のデータをグループ化する単位です
- テーブル : 構造化データ(いわゆる表データ)を格納する主要なコンポーネントです
- ボリューム : 非構造化データや半構造化データを格納するためのコンポーネントです
- モデル : 機械学習モデルを管理・デプロイするためのコンポーネントです
- スキーマ : カタログ内のデータをグループ化する単位です
他にも種類があり、アイコンが色々と使い分けられているようです。
整理すると、
- ワークスペースは、作業者に割り当てられた作業領域
- カタログは、データを管理するために必要なアセット群
というイメージでしょうか。
私ははじめ、デフォルトカタログ(初期状態で作成されているカタログ)が workspace という名前なので、前述のワークスペースの概念とごちゃまぜになって混乱してしまいました。。。
カタログとワークスペースはまったく異なる概念のため、気を付けてください。
まとめ
Databricksの公式チュートリアルを進めるにあたって、はじめに理解しておいたほうがよさそうな概念について整理しました!
チュートリアルでは、機械学習モデルをカタログに登録したり、 AIチャットボットを開発したりと、なかなか面白い内容がありますので、 ぜひトライしてみてください!