Databricks

System Tablesとは?Databricksの監視・監査テーブル

2026-03-21
更新: 2026-03-27
NicheeLab編集部

System Tablesは、Databricksワークスペースの監査ログ・課金データ・コンピュートリソース・テーブルリネージ等の運用メタデータをSQLで直接クエリできる仕組みです。Unity Catalogのsystemカタログ配下にDelta Table形式で格納されており、BI・セキュリティ監査・コスト最適化の基盤として活用できます。Data Engineer Professional試験ではSystem Tablesの種類・用途・有効化方法が出題されます。

System Tablesの概要

System TablesはDatabricksプラットフォームが自動的に生成・更新するメタデータテーブルです。ユーザーが明示的にデータを書き込む必要はなく、ワークスペース上の操作(ジョブ実行・テーブルアクセス・クラスタ作成等)がリアルタイムに記録されます。すべてのテーブルはsystemカタログの各スキーマに格納されます。

主要テーブル一覧

テーブル名スキーマ内容保持期間
system.access.auditaccess全APIコール・UIアクションの監査ログ365日
system.billing.usagebillingDBU消費量・SKU別課金データ365日
system.billing.list_pricesbilling各SKUの単価リスト(価格変更履歴含む)全期間
system.compute.clusterscomputeクラスタの作成・設定・ステータス変更365日
system.compute.node_typescompute利用可能なインスタンスタイプ一覧最新のみ
system.lakeflow.job_run_timelinelakeflowジョブ実行のタイムライン・タスク実行結果365日
system.lakeflow.job_task_run_timelinelakeflowタスクレベルの実行タイムライン365日
system.information_schema.tablesinformation_schemaUnity Catalog登録テーブルのメタデータ最新のみ
system.information_schema.columnsinformation_schemaUnity Catalog登録テーブルのカラム定義最新のみ
system.storage.predictive_optimization_operations_historystoragePredictive Optimization(自動OPTIMIZE/VACUUM)の実行履歴90日

System Tablesの有効化

System Tablesはデフォルトでは一部のスキーマのみ有効です。すべてのスキーマを有効化するにはアカウント管理者が以下のコマンドを実行します。

-- 全スキーマを有効化(アカウント管理者権限が必要)
ALTER CATALOG system ENABLE ALL SCHEMAS

-- 特定スキーマのみ有効化
ALTER CATALOG system ENABLE SCHEMA billing
ALTER CATALOG system ENABLE SCHEMA access

-- アクセス権の付与(データエンジニアグループに監査ログの読み取り権限)
GRANT SELECT ON SCHEMA system.access TO `data-engineers`
GRANT SELECT ON TABLE system.billing.usage TO `finance-team`

監査ログのクエリ例

system.access.auditテーブルには、ワークスペース上の全APIリクエストと操作が記録されます。セキュリティ監査やコンプライアンス対応に使用します。

-- 過去7日間のテーブルアクセスログ(誰がどのテーブルを参照したか)
SELECT
  event_date,
  user_identity.email AS user_email,
  action_name,
  request_params.full_name_arg AS table_name,
  source_ip_address,
  response.status_code
FROM system.access.audit
WHERE action_name IN ('getTable', 'commandSubmit')
  AND event_date >= CURRENT_DATE - INTERVAL 7 DAYS
  AND request_params.full_name_arg IS NOT NULL
ORDER BY event_date DESC

-- 特定ユーザーの操作履歴(インシデント調査用)
SELECT
  event_date,
  event_time,
  action_name,
  request_params,
  response.status_code,
  source_ip_address
FROM system.access.audit
WHERE user_identity.email = '[email protected]'
  AND event_date >= '2026-03-01'
ORDER BY event_time DESC

課金分析のクエリ例

system.billing.usagesystem.billing.list_pricesを結合して、実際のコストをドル換算で分析できます。

-- 過去30日のSKU別DBU消費量と推定コスト
SELECT
  u.sku_name,
  u.usage_unit,
  SUM(u.usage_quantity) AS total_dbu,
  ROUND(SUM(u.usage_quantity * p.pricing.default), 2) AS estimated_cost_usd
FROM system.billing.usage u
LEFT JOIN system.billing.list_prices p
  ON u.sku_name = p.sku_name
  AND u.usage_date BETWEEN p.price_start_time AND COALESCE(p.price_end_time, '2099-12-31')
WHERE u.usage_date >= CURRENT_DATE - INTERVAL 30 DAYS
GROUP BY u.sku_name, u.usage_unit
ORDER BY estimated_cost_usd DESC

-- ワークスペース別の日次コスト推移
SELECT
  u.usage_date,
  u.workspace_id,
  ROUND(SUM(u.usage_quantity * p.pricing.default), 2) AS daily_cost_usd
FROM system.billing.usage u
LEFT JOIN system.billing.list_prices p
  ON u.sku_name = p.sku_name
  AND u.usage_date BETWEEN p.price_start_time AND COALESCE(p.price_end_time, '2099-12-31')
WHERE u.usage_date >= CURRENT_DATE - INTERVAL 90 DAYS
GROUP BY u.usage_date, u.workspace_id
ORDER BY u.usage_date DESC

クラスタ監視のクエリ例

system.compute.clustersテーブルでクラスタの構成・稼働時間・コスト効率を分析できます。

-- アクティブなクラスタとそのスペック一覧
SELECT
  cluster_id,
  cluster_name,
  cluster_source,
  driver_node_type,
  node_type_id AS worker_node_type,
  autoscale.min_workers,
  autoscale.max_workers,
  spark_version,
  creator
FROM system.compute.clusters
WHERE delete_time IS NULL
ORDER BY cluster_name

-- 長時間稼働クラスタの検出(コスト最適化)
SELECT
  cluster_id,
  cluster_name,
  creator,
  state,
  TIMESTAMPDIFF(HOUR, last_restarted_time, CURRENT_TIMESTAMP) AS hours_since_restart
FROM system.compute.clusters
WHERE state = 'RUNNING'
  AND delete_time IS NULL
  AND TIMESTAMPDIFF(HOUR, last_restarted_time, CURRENT_TIMESTAMP) > 24
ORDER BY hours_since_restart DESC

テーブルリネージの活用

Unity Catalogが自動追跡するリネージ情報はsystem.access.table_lineagesystem.access.column_lineageテーブルに記録されます。データの流れを可視化し、影響分析やデータ品質トラッキングに活用できます。

-- 特定テーブルの上流テーブル(データソース)を特定
SELECT
  source_table_full_name,
  target_table_full_name,
  event_date,
  entity_type
FROM system.access.table_lineage
WHERE target_table_full_name = 'gold.analytics.daily_revenue'
  AND event_date >= CURRENT_DATE - INTERVAL 30 DAYS
GROUP BY source_table_full_name, target_table_full_name,
         event_date, entity_type
ORDER BY event_date DESC

運用ベストプラクティス

  • フィルタを必ず指定:System Tablesは大量のレコードを含むため、WHERE句でevent_dateやusage_dateのフィルタを指定しないとクエリコストが高額になる
  • ゴールドテーブルに集約:頻繁に参照するメトリクスはマテリアライズドビューまたはDelta Tableに事前集約し、Databricks SQLダッシュボードで可視化する
  • アラート設定:Databricks SQLのアラート機能でコスト閾値や異常アクセスパターンを検知する
  • 長期保存:保持期間(365日)を超えるデータが必要な場合、定期ジョブで外部ストレージにエクスポートする

サンプル問題

System Tables - 監査ログ

問題 1

セキュリティチームが過去30日間にDatabricksワークスペース上で特定のテーブルにアクセスした全ユーザーを特定する必要があります。最も適切なアプローチはどれですか?

  1. system.information_schema.tablesをクエリしてテーブルの所有者情報を確認する
  2. system.access.auditテーブルをevent_dateとrequest_params.full_name_argでフィルタし、user_identity.emailを集計する
  3. DESCRIBE HISTORYコマンドでテーブルの変更履歴を確認し、userIdentityカラムから読み取りユーザーを特定する
  4. system.billing.usageテーブルをクエリしてテーブルアクセスに対応するDBU消費を持つユーザーを特定する

正解: B

system.access.auditテーブルにはワークスペース上の全APIリクエスト(テーブルの読み取り・書き込み含む)が記録されています。event_dateで期間を絞り、request_params.full_name_argでテーブル名をフィルタし、user_identity.emailでアクセスユーザーを特定できます。DESCRIBE HISTORYはテーブル変更(WRITE/MERGE等)のみ記録しSELECTは含みません。information_schemaは所有者情報のみ、billing.usageはテーブル単位のアクセスログを持ちません。

よくある質問(FAQ)

System Tablesを有効化するにはどのような権限が必要ですか?

System TablesはUnity Catalogのsystemカタログ配下に存在し、有効化にはアカウント管理者(Account Admin)権限が必要です。具体的にはALTER CATALOG system ENABLE ALL SCHEMASコマンドを実行するか、アカウントコンソールのSystem Tables設定画面から有効化します。有効化後、各テーブルへのアクセスはUnity CatalogのGRANT文でスキーマ単位またはテーブル単位で制御します。

System Tablesのデータ保持期間はどのくらいですか?

テーブルによって異なります。system.access.audit(監査ログ)は365日間、system.billing.usage(課金データ)は365日間、system.compute.clusters(クラスタ情報)は365日間保持されます。system.billing.list_prices(リスト価格)は過去の価格変更履歴を全期間保持します。保持期間を超えたデータは自動的にパージされるため、長期保存が必要な場合はETLで別テーブルにコピーしてください。

System Tablesのクエリにはコンピュートコストがかかりますか?

はい、System TablesへのSQLクエリは通常のDelta Tableクエリと同様にDBU(Databricks Unit)を消費します。特にsystem.access.auditは大量のレコードを含むため、フィルタなしのSELECT *は高コストになり得ます。WHERE句で日付やaction_name等のフィルタを必ず指定し、必要に応じてマテリアライズドビューやゴールドテーブルに集約データを事前計算しておくことがコスト最適化のベストプラクティスです。

この記事で学んだ内容を問題で確認しましょう

16,000問以上の問題で実力チェック

無料で問題を解いてみる
この記事の著者

NicheeLab編集部

データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。


関連記事
Databricks

Databricks資格一覧|全7試験・難易度・勉強法

Databricks認定資格全7試験の一覧・難易度・出題範囲・合格ラインを徹底解説。2026年最新版の公式試験ガイドに準...

Databricks

Databricks試験の難易度ランキング|全7資格を徹底比較

Databricks認定全7試験の難易度をランキング形式で徹底比較。合格率・学習時間・出題傾向から難易度を分析。...

Databricks

Databricks資格の勉強方法|最短合格ルートと学習時間の目安

Databricks認定資格に最短で合格するための勉強方法を完全ガイド。公式リソース・問題集・学習スケジュールを徹底解説...

Databricks

Databricks Data Engineer Associate完全解説|出題範囲・問題例・合格戦略

Databricks Certified Data Engineer Associate試験を徹底解説。5つの出題ドメイ...

Databricks

Databricks Data Engineer Professional完全解説|上級試験の攻略法

Databricks Certified Data Engineer Professional試験を徹底解説。10の出題...

Databricksの記事一覧 (110件)
© 2026 NicheeLab All rights reserved.