Unity Catalogは、Databricksが提供するアカウントレベルの統合データガバナンスレイヤーです。 テーブル・ビュー・関数・MLモデル・ファイル(Volumes)といったすべてのデータアセットに対し、 複数ワークスペースを横断した一元的なアクセス制御・監査ログ・データリネージを実現します。 従来のHive Metastoreではワークスペースごとに分断されていたメタデータ管理を、catalog.schema.table の3レベル名前空間で統一し、 SQL標準のGRANT/REVOKEによる権限管理を可能にしました。
この記事では、Unity Catalogの階層構造・権限モデル・External Location・Delta Sharing連携・Hive Metastoreとの違いまでを網羅的に解説します。Data Engineer Associate(DEA)試験のData Governanceドメイン(出題比率17%)を中心に、認定試験で問われるポイントもあわせて整理しています。
Unity Catalogは、Metastoreを頂点とする4階層のオブジェクトモデルを採用しています。すべてのデータアセットはこの階層ツリーに配置され、権限は上位から下位へ継承されます。
Metastore(アカウントに1つ、リージョンごと)
├── Catalog: production
│ ├── Schema: sales
│ │ ├── Table: orders
│ │ ├── Table: customers
│ │ ├── View: daily_summary
│ │ └── Function: calc_tax()
│ ├── Schema: marketing
│ │ ├── Table: campaigns
│ │ └── Volume: raw_files
│ └── Schema: information_schema(自動生成)
├── Catalog: development
│ └── Schema: sandbox
│ └── Table: test_orders
├── External Location: s3://data-lake/external/
└── Storage Credential: aws_s3_roleデータアセットを参照するときは、常に catalog.schema.object の3レベル名前空間を使います。これにより「どの環境の、どのドメインの、どのテーブルか」が名前だけで一意に特定できます。
-- 3レベル名前空間でのアクセス
SELECT * FROM production.sales.orders;
-- ^^^^^^^^^^ ^^^^^ ^^^^^^
-- Catalog Schema Table
-- デフォルトのCatalog/Schemaを設定
USE CATALOG production;
USE SCHEMA sales;
-- 上記の設定後は短縮形でアクセス可能
SELECT * FROM orders;| レベル | 説明 | 設計パターン例 |
|---|---|---|
| Metastore | Unity Catalogの最上位コンテナ。1リージョンに1つ作成し、複数ワークスペースに紐づける | ap-northeast-1(東京)用に1つ作成 |
| Catalog | データアセットの最上位論理グループ。環境・部門・プロジェクト単位で分離 | production / development / staging、finance / marketing |
| Schema | テーブルやビューのグルーピング。ドメインやデータレイヤー単位で整理 | sales / hr / logs、bronze / silver / gold |
| Table / View / Function / Volume | 実際のデータアセット。Managed TableかExternal Tableのいずれか | orders(Managed)、external_logs(External)、calc_tax()(UDF) |
Unity Catalogでデータアセットを格納するには、まずCatalogとSchemaを作成します。CatalogはMetastore Admin(またはCREATE CATALOG権限を持つユーザー)が、SchemaはCatalog所有者(またはCREATE SCHEMA権限を持つユーザー)が作成できます。
-- Catalogの作成
CREATE CATALOG IF NOT EXISTS production
COMMENT 'Production environment catalog';
-- Schemaの作成
CREATE SCHEMA IF NOT EXISTS production.sales
COMMENT 'Sales domain tables';
-- Managed Tableの作成(LOCATIONなし → Unity Catalog管理ストレージに格納)
CREATE TABLE production.sales.orders (
order_id BIGINT GENERATED ALWAYS AS IDENTITY,
customer_id BIGINT NOT NULL,
amount DECIMAL(12,2) NOT NULL,
order_date DATE NOT NULL,
status STRING DEFAULT 'pending'
)
COMMENT 'Customer order records'
TBLPROPERTIES ('quality' = 'gold');
-- External Tableの作成(LOCATIONあり → 外部ストレージのデータを参照)
CREATE TABLE production.sales.external_logs (
log_id BIGINT,
message STRING,
timestamp TIMESTAMP
)
LOCATION 's3://data-lake/external/sales/logs/';Unity CatalogはSQL標準のGRANT/REVOKE構文でアクセス制御を行います。権限はSecurable Object(Catalog、Schema、Table、View、Function、Volume、External Location、Storage Credential)に対して付与し、ユーザーまたはグループ(プリンシパル)に紐づけます。
| 権限 | 適用対象 | 効果 |
|---|---|---|
USAGE | Catalog, Schema | オブジェクト内部の一覧表示・配下へのアクセスに必須 |
SELECT | Table, View | データの読み取り(SELECT文の実行) |
MODIFY | Table | INSERT / UPDATE / DELETE / MERGE の実行 |
CREATE TABLE | Schema | Schema内に新しいテーブルを作成 |
CREATE SCHEMA | Catalog | Catalog内に新しいSchemaを作成 |
CREATE CATALOG | Metastore | Metastore内に新しいCatalogを作成 |
ALL PRIVILEGES | すべて | 対象オブジェクトに対する全権限を一括付与 |
CREATE EXTERNAL LOCATION | Storage Credential | Storage Credentialを使ったExternal Locationの作成 |
-- ステップ1: Catalogへのアクセスを開く(廊下を通す)
GRANT USAGE ON CATALOG production TO analysts;
-- ステップ2: SchemaへのUSAGEを開く
GRANT USAGE ON SCHEMA production.sales TO analysts;
-- ステップ3: テーブルのSELECT権限を付与(部屋に入れる)
GRANT SELECT ON SCHEMA production.sales TO analysts;
-- ↑ Schema配下の全テーブルにSELECTが適用される
-- 特定のテーブルだけに限定する場合
GRANT SELECT ON TABLE production.sales.orders TO analysts;
-- データ変更権限の付与
GRANT MODIFY ON TABLE production.sales.orders TO etl_service;
-- Schema内にテーブルを作れる権限
GRANT CREATE TABLE ON SCHEMA production.sales TO data_engineers;
-- 権限の確認
SHOW GRANTS ON SCHEMA production.sales;
SHOW GRANTS TO analysts;
-- 権限の取り消し
REVOKE SELECT ON SCHEMA production.sales FROM analysts;Unity Catalogの権限は上位オブジェクトから下位に継承されます。 たとえば、CatalogにSELECTを付与すると、そのCatalog配下のすべてのSchemaとテーブルに SELECTが適用されます。ただし、USAGEは自動継承されません。 上位のCatalogとSchemaの両方にUSAGEを明示的に付与しない限り、 配下のテーブルにSELECT権限があってもデータにアクセスできません。
権限の継承イメージ:
GRANT SELECT ON CATALOG production TO analysts;
→ production配下の全Schema・全Tableに SELECT が継承
ただし USAGE が必要:
Catalog: production → USAGE が必要 ✓
Schema: sales → USAGE が必要 ✓
Table: orders → SELECT で読み取り可能 ✓
USAGE が欠けている場合:
Catalog: production → USAGE なし ✗
Schema: sales → USAGE あり
Table: orders → SELECT あり → でもアクセス不可 ✗Unity Catalogに登録するテーブルは、データの保存場所によってManaged TableとExternal Tableに分類されます。DROP時の挙動が根本的に異なるため、設計時に正しく選択する必要があります。
| 比較項目 | Managed Table | External Table |
|---|---|---|
| データの場所 | Unity Catalogの管理ストレージ(Metastore/Catalog/Schemaのストレージルート) | ユーザーが指定した外部パス(S3, ADLS, GCS) |
| 作成方法 | CREATE TABLE ...(LOCATIONなし) | CREATE TABLE ... LOCATION 's3://...' |
| DROP時のデータ | メタデータとデータファイルの両方が削除される | メタデータのみ削除、データファイルは外部ストレージに残る |
| ライフサイクル管理 | Unity Catalogが完全に管理 | データファイルのライフサイクルはユーザーが管理 |
| 推奨ユースケース | Databricks内で完結するデータ、新規構築プロジェクト | 既存データレイクとの連携、他プラットフォームとのデータ共有 |
試験頻出: 「DROP TABLE実行後にデータファイルはどうなるか?」 → Managed Tableはデータも消える、External Tableはメタデータだけ消える。
External Tableを作成するには、Unity Catalogが外部ストレージにアクセスするための認証情報を登録する必要があります。この仕組みはStorage CredentialとExternal Locationの2段階で構成されます。
[Storage Credential] クラウドの認証情報を登録
│ (IAMロール / Service Principal / Service Account)
▼
[External Location] 認証情報と許可パスを紐づけ
url: s3://bucket/path/ 「この認証情報で、このパス範囲にアクセスOK」
│
▼
[External Table] LOCATION句で外部パスを指定してテーブル作成
production.sales.ext_logs
LOCATION 's3://bucket/path/logs/'-- 1. Storage Credentialの作成(Metastore Admin権限が必要)
CREATE STORAGE CREDENTIAL aws_s3_credential
WITH (
AWS_IAM_ROLE = 'arn:aws:iam::123456789012:role/unity-catalog-role'
);
-- 2. External Locationの作成
CREATE EXTERNAL LOCATION s3_data_lake
URL 's3://my-data-lake/production/'
WITH (STORAGE CREDENTIAL aws_s3_credential)
COMMENT 'Production data lake on S3';
-- 3. External Locationの権限を付与
GRANT CREATE EXTERNAL TABLE ON EXTERNAL LOCATION s3_data_lake
TO data_engineers;
-- 4. External Tableの作成
CREATE TABLE production.sales.external_events (
event_id BIGINT,
event_type STRING,
payload STRING,
created_at TIMESTAMP
)
LOCATION 's3://my-data-lake/production/events/';Storage Credentialは複数のExternal Locationで再利用できます。 たとえば1つのIAMロールで s3://bucket/sales/ と s3://bucket/marketing/の2つのExternal Locationを作成し、チームごとにアクセス範囲を分離するといった設計が可能です。
Unity Catalogは、従来のHive Metastoreが抱えていたガバナンスの課題を解決するために設計されました。移行を検討する際は以下の違いを理解しておく必要があります。
| 比較項目 | Hive Metastore | Unity Catalog |
|---|---|---|
| 管理スコープ | ワークスペース単位(各ワークスペースに独立したメタストア) | アカウント単位(複数ワークスペースで共有) |
| 名前空間 | 2レベル(schema.table / database.table) | 3レベル(catalog.schema.table) |
| 権限モデル | Table ACL(テーブル/ビュー単位のアクセス制御リスト) | SQL標準GRANT/REVOKE(階層的な権限継承) |
| 監査ログ | クラスタログに依存(統一的な監査が困難) | System Tablesによる統一監査ログ |
| データリネージ | 手動管理(標準機能なし) | テーブル・カラムレベルの自動リネージ |
| テーブル形式 | Delta / Parquet / CSV / JSON / ORC / Avro | Managed TableはDelta形式のみ、External Tableは複数形式対応 |
| ファイル管理 | DBFS(ガバナンスなし) | Volumes(権限管理・監査付き) |
| クロスワークスペース共有 | 不可(ワークスペース間でメタデータが分断) | 同一Metastore配下のワークスペースで自動共有 |
Delta Sharingは、組織の境界を超えてデータを安全に共有するためのオープンプロトコルです。 Unity CatalogはDelta Sharingのプロバイダーとして機能し、外部組織のDatabricks環境や 非Databricks環境(Spark、Pandas、Power BI、Tableauなど)に対してデータを共有できます。
-- 共有(Share)の作成
CREATE SHARE customer_analytics;
-- Shareにテーブルを追加
ALTER SHARE customer_analytics
ADD TABLE production.sales.orders;
-- 受信者(Recipient)の作成
CREATE RECIPIENT partner_company
USING ID 'partner-sharing-identifier';
-- 受信者にShareへのアクセスを付与
GRANT SELECT ON SHARE customer_analytics TO RECIPIENT partner_company;Volumesは、テーブル以外のファイル(CSV、JSON、画像、モデルアーティファクト、設定ファイルなど)をUnity Catalogの権限モデルで管理するための機能です。従来のDBFS(Databricks File System)にはガバナンス機能がなく、「誰がどのファイルにアクセスしたか」を追跡できませんでした。VolumeはCatalog/Schema配下に作成されるため、GRANT/REVOKEで権限制御ができ、監査ログにも記録されます。
-- Managed Volumeの作成(Unity Catalog管理ストレージに保存)
CREATE VOLUME production.raw.landing_files;
-- External Volumeの作成(外部パスを参照)
CREATE EXTERNAL VOLUME production.raw.s3_landing
LOCATION 's3://my-bucket/landing/';
-- ファイルの一覧表示
LIST '/Volumes/production/raw/landing_files/';
-- SQLからファイルを読み取り
SELECT * FROM csv.`/Volumes/production/raw/landing_files/2026-03/data.csv`;
-- PythonからVolume内のファイルを読み取り
-- df = spark.read.csv("/Volumes/production/raw/landing_files/2026-03/data.csv")Unity Catalogは、ノートブックやジョブで実行されたSparkクエリを自動的に解析し、テーブル間・カラム間のデータフロー(リネージ)を記録します。手動での設定や有効化は不要で、Unity Catalogが有効な環境では自動的に動作します。
監査ログは system.access.audit テーブル(System Tables)に記録されます。誰がいつどのオブジェクトに対してどの操作を行ったかを、SQLで直接クエリして分析できます。
-- 直近24時間の監査イベントを確認
SELECT
event_time,
user_identity.email AS user_email,
action_name,
request_params.full_name_arg AS object_name
FROM system.access.audit
WHERE event_time > current_timestamp() - INTERVAL 24 HOURS
AND action_name IN ('getTable', 'createTable', 'grantPermission')
ORDER BY event_time DESC;Data Engineer Associate(DEA)試験では、Data Governanceドメインが約17%の出題比率を占めます。Unity Catalogはこのドメインの中核トピックです。以下の項目は確実に押さえてください。
| 出題テーマ | 押さえるべきポイント |
|---|---|
| 3レベル名前空間 | catalog.schema.table の構造。Metastoreは名前空間には含まれない |
| USAGE権限 | Catalog・Schemaの両方にUSAGEがないとSELECTが効かない。上位が「廊下」、下位が「部屋」 |
| Managed vs External | DROP時の挙動: Managed→データ削除、External→メタデータのみ削除。LOCATION句の有無で区別 |
| Storage Credential → External Location | 2段階の認証構造。Credential=クラウド認証情報、Location=許可パス範囲 |
| Volumes | DBFSの後継。ファイルにもGRANT/REVOKE・監査ログが適用される |
| データリネージ | 有効化不要(自動記録)。テーブルレベルとカラムレベルの2種類 |
| Delta Sharing | オープンプロトコル。データコピー不要。受信者はDatabricksユーザーでなくてもよい |
| 権限の継承 | Catalogに付与した権限は配下の全Schema・全Tableに継承される(USAGEを除く) |
Data Governance / Unity Catalog
問題 1
アナリストチーム(グループ名: analysts)が production.sales.orders テーブルを SELECT しようとしたが、'PERMISSION DENIED' エラーが発生した。管理者は GRANT SELECT ON SCHEMA production.sales TO analysts を実行済みである。この問題を解決するために追加で必要なSQL文はどれか。
正解: A
Unity Catalogの権限モデルでは、配下オブジェクトにアクセスするためにCatalog・Schemaの両方にUSAGE権限が必要です。SchemaにSELECTを付与しても、上位のCatalogにUSAGEがなければ「廊下を通れない」ためアクセスできません。GRANT USAGE ON CATALOG production TO analysts を追加し、さらに production.sales スキーマへのUSAGEも必要です(問題文では SELECT ON SCHEMA が付与済みのため、スキーマレベルのアクセスは暗黙的にカバーされているケースもありますが、CatalogへのUSAGEは別途必要です)。選択肢BのALL PRIVILEGESは過剰な権限付与で最小権限の原則に反します。選択肢CのREADやDのBROWSEはUnity Catalogの標準権限名ではありません。
Data Governance / External Location
問題 2
データエンジニアがS3上の既存データを参照するExternal Tableを作成したい。Unity Catalogで必要な手順として正しい順序はどれか。
正解: C
External Tableの作成には、事前にStorage CredentialとExternal Locationが必要です。正しい順序は (1) Storage Credential(クラウド認証情報の登録)→ (2) External Location(そのCredentialを使ってアクセス可能なパス範囲を定義)→ (3) External Table(LOCATION句でパスを指定して作成)です。External LocationはStorage Credentialへの参照を含むため、Credentialが先に存在する必要があります。External TableはExternal LocationのURL範囲内にLOCATIONを指定するため、Locationが先に存在する必要があります。
Data Governance / Table Types
問題 3
Unity CatalogのManaged Tableに対して DROP TABLE production.sales.orders を実行した場合、データファイルはどうなるか。
正解: A
Managed TableはUnity Catalogがデータのライフサイクルを完全に管理するため、DROP TABLE実行時にメタデータとデータファイルの両方が削除されます。これに対し、External Tableの場合はメタデータのみが削除され、データファイルは外部ストレージに残ります。選択肢Bの「30日間保持」は存在しない仕組みです。選択肢CはExternal Tableの挙動です。選択肢DのUNDROP TABLEはUnity Catalogの機能として存在しますが、データファイル自体が「残る」のではなく、Unity Catalogの内部メカニズムで一定期間復元可能なだけです。試験ではManaged/Externalの違いを「データファイルの削除有無」で即答できるようにしましょう。
Unity CatalogとHive Metastoreの違いは何ですか?
Hive Metastoreはワークスペース単位でメタデータを管理し、ワークスペースをまたいだ権限管理や監査ができません。Unity Catalogはアカウントレベルで動作し、複数ワークスペースに対して統一的なアクセス制御・監査ログ・データリネージを提供します。権限の仕組みも異なり、Hive Metastoreはテーブル/ビュー単位のACLのみですが、Unity CatalogはGRANT/REVOKEによるSQL標準の権限管理を採用し、Catalog・Schema・Table/View/Function/Volumeの階層全体で一貫した制御が可能です。
Unity Catalogは無料で使えますか?
Unity Catalogの基本機能(3レベル名前空間・GRANT/REVOKE権限管理・Managed/External Table・Volumes)はDatabricksの全エディション(Standard含む)で利用可能です。ただし、Attribute-Based Access Control(ABAC)、自動リネージのカラムレベル追跡、Lakehouse Monitoringとの連携など一部の高度な機能はPremium以上が必要です。最新のエディション別機能はDatabricks公式ドキュメントで確認してください。
Unity Catalogの権限でUSAGEとSELECTの違いは何ですか?
USAGEは「そのオブジェクトの内部を参照する権利」で、CatalogやSchemaに対して付与します。SELECTは「テーブルやビューのデータを読み取る権利」です。例えば、production.sales.ordersテーブルをSELECTするには、テーブルへのSELECT権限に加えて、productionカタログへのUSAGE権限とsalesスキーマへのUSAGE権限が必要です。USAGEは「廊下を通る鍵」、SELECTは「部屋に入る鍵」と考えるとわかりやすいです。片方だけではアクセスできません。
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の出題...