適用対象:
Databricks SQL
Databricks Runtime 10.4 LTS 以降
Unity Catalog のみ
SYSTEM カタログでは、INFORMATION_SCHEMAは、メタストア内のすべてのカタログのオブジェクトに関するメタデータを提供する SQL 標準スキーマです。
hive_metastore オブジェクトに関するメタデータは含まれません。
個別に、Unity カタログで作成された各カタログには、そのカタログ内のオブジェクトに関するメタデータのみを記述する information_schema も自動的に含まれます。
どちらの種類の情報スキーマでも、Unity カタログ権限を持つオブジェクトのみが含まれるように結果が自動的にフィルター処理されます。 この動作は、他の Azure Databricks システム テーブルとは異なります。 情報 スキーマ・システム表が権限を処理する方法を参照してください。
情報スキーマの目的は、カタログ メタデータにアクセスするための SQL ベースの特権対応の自己記述型 API を提供することです。
情報スキーマ システム テーブルがアクセス許可を処理する方法
system.information_schema は、自動フィルター処理を実装するという点で、他のシステム テーブルとは異なります。 つまり、Unity カタログにアクセスする権限を持っているオブジェクト (カタログ、スキーマ、テーブル、列など) のみが表示されます。 権限が変更されると、情報スキーマに表示される内容が適宜変更されます。 たとえば、 information_schema.tablesクエリを実行すると、表示する権限を持つテーブルの行のみが返されます。
他のすべてのシステム テーブルと同様に、情報スキーマにアクセスしてクエリを実行するには、明示的な USE と SELECT のアクセス許可が必要です。
情報スキーマのエンティティ リレーションシップ ダイアグラム
次のエンティティ リレーションシップ (ER) ダイアグラムは、情報スキーマ ビューのサブセットの概要と、それらの相互の関連を示しています。
情報スキーマ ビュー
| 名前 | 説明 |
|---|---|
| CATALOG_PRIVILEGES | カタログに対する権限を持つプリンシパルを一覧表示します。 |
| CATALOG_PROVIDER_SHARE_USAGE | カタログにマウントされたプロバイダー共有について説明します。 |
| CATALOG_TAGS | カタログに適用されているタグが含まれます。 |
| CATALOGS | カタログについて説明します。 |
| CHECK_CONSTRAINTS | 将来利用するために予約されています。 |
| COLUMN_MASKS | カタログ内のテーブル列の列マスクについて説明します。 |
| COLUMN_TAGS | テーブル内の列タグ付けメタデータが含まれます。 |
| COLUMNS | カタログ内のテーブルとビューの列について説明します。 |
| CONNECTION_PRIVILEGES | 外部接続に対する権限を持つプリンシパルを一覧表示します。 |
| CONNECTIONS | 外部接続について説明します。 |
| CONSTRAINT_COLUMN_USAGE | カタログ内の列を参照する制約について説明します。 |
| CONSTRAINT_TABLE_USAGE | カタログ内のテーブルを参照する制約について説明します。 |
| CREDENTIAL_PRIVILEGES | 資格情報に privileges を持つprincipalsを一覧表示します。 |
| CREDENTIALS | 資格情報について説明します。 |
| EXTERNAL_LOCATION_PRIVILEGES | 外部の場所に対する権限を持つプリンシパルを一覧表示します。 |
| EXTERNAL_LOCATIONS | 外部の場所について説明します。 |
| INFORMATION_SCHEMA_CATALOG_NAME | この情報スキーマのカタログの名前を返します。 |
| KEY_COLUMN_USAGE | カタログ内の主キー制約または外部キー制約の列をリストアップします。 |
| METASTORE_PRIVILEGES | 現在のメタストアに対する権限を持つプリンシパルを一覧表示します。 |
| METASTORES | 現在のメタストアについて説明します。 |
| PARAMETERS | カタログ内のルーチン (関数) のパラメーターについて説明します。 |
| PROVIDERS | プロバイダーについて説明します。 |
| RECIPIENT_ALLOWED_IP_RANGES | 受信者に許可されている IP 範囲を一覧表示します。 |
| RECIPIENT_TOKENS | 受信者のトークンを一覧表示します。 |
| RECIPIENTS | 受信者について説明します。 |
| REFERENTIAL_CONSTRAINTS | カタログ内に定義されている参照 (外部キー) に関する制約について説明します。 |
| ROUTINE_COLUMNS | テーブル値関数の結果列について説明します。 |
| ROUTINE_PRIVILEGES | カタログ内のルーチンに対する権限を持つプリンシパルを一覧表示します。 |
| ROUTINES | カタログ内のルーチン (関数) について説明します。 |
| ROW_FILTERS | カタログ内のテーブルに対する行フィルターについて説明します。 |
| SCHEMA_PRIVILEGES | カタログ内のスキーマに対する権限を持つプリンシパルを一覧表示します。 |
| SCHEMA_TAGS | スキーマ内のスキーマ タグ付けメタデータが含まれます。 |
| SCHEMA_SHARE_USAGE | 共有で参照されるテーブルについて説明します。 |
| SCHEMATA | カタログ内のスキーマについて説明します。 |
| SHARE_RECIPIENT_PRIVILEGES | 共有へのアクセスを許可されている受信者について説明します。 |
| SHARES | 共有について説明します。 |
| STORAGE_CREDENTIAL_PRIVILEGES | [非推奨]ストレージ資格情報にprivilegesを持つprincipalsを一覧表示します。 |
| STORAGE_CREDENTIALS | [非推奨]ストレージ資格情報について説明します。 |
| TABLE_CONSTRAINTS | カタログ内のすべての主および外部キー制約のメタデータについて説明します。 |
| TABLE_PRIVILEGES | カタログ内のテーブルとビューに対する権限を持つプリンシパルを一覧表示します。 |
| TABLE_SHARE_USAGE | 共有で参照されるテーブルについて説明します。 |
| TABLE_TAGS | テーブル内のテーブル タグ付けメタデータが含まれます。 |
| TABLES | カタログ内で定義されているテーブルとビューについて説明します。 |
| VIEWS | カタログ内のビューに関するビュー固有の情報について説明します。 |
| VOLUMES | カタログ内の定義済みボリュームを説明します。 |
| VOLUME_PRIVILEGES | カタログ内のボリュームに対する権限を持つプリンシパルを一覧表示します。 |
| VOLUME_TAGS | ボリュームに適用されるボリューム タグ付けメタデータが含まれます。 |
メモ
- 情報スキーマは、特権対応のフィルター処理を実装します。 Unity カタログにアクセスするアクセス許可を持っているオブジェクトのみが自動的に表示されます。 情報 スキーマ・システム表が権限を処理する方法を参照してください。
- 一部のカタログ メタデータの変更を情報スキーマに反映するには、
REPAIR TABLEを使用した手動同期が必要になる場合があります。 詳細については、REPAIR TABLEを参照してください。 - 列名とタグ名 を除く すべての識別子は、情報スキーマに小文字の
STRINGとして格納されます。 クエリのパフォーマンスを向上させるには、識別子列でLOWER()やUPPER()などの関数を使用しないでください。 代わりに、小文字の値を使用して識別子を直接比較します。 - クエリのタイムアウトを防ぐには、情報スキーマに対してクエリを実行するときに選択的フィルターを適用します (例:
WHERE table_catalog = 'main' AND table_schema = 'default')。 各 Information Schema テーブルのフィルターとして使用できる列の完全な一覧については、上記のドキュメントを参照してください。-
LIMITプッシュダウンは現在サポートされていないため、結果を切り捨てることはできますが、パフォーマンスは向上しません。
-
例
> SELECT table_name, column_name
FROM information_schema.columns
WHERE data_type = 'DOUBLE'
AND table_schema = 'information_schema';
システム レベルの情報スキーマ テーブルが使用されているワークフローの例を次に示します。
過去 24 時間以内に作成されたすべてのテーブルを表示する場合、クエリは次のようになります。
> SELECT table_name, table_owner, created_by, last_altered, last_altered_by, table_catalog
FROM system.information_schema.tables
WHERE datediff(now(), last_altered) < 1;
各スキーマに含まれるテーブルの数を表示する場合は、次の例を検討してください。
> SELECT table_schema, count(table_name)
FROM system.information_schema.tables
WHERE table_schema = 'tpch'
GROUP BY table_schema
ORDER BY 2 DESC