Databricksのインフォメーションスキーマ

[Information schema \| Databricks on AWS](https://docs.databricks.com/sql/language-manual/sql-ref-information-schema.html) [2022/11/1時点]の翻訳です。

:::note warn
本書は抄訳であり内容の正確性を保証するものではありません。正確な内容に関しては原文を参照ください。
:::

:::note
**適用対象**
- Databricks SQL
- Databricksランタイム10.2以降
:::

`INFORMATION_SCHEMA`は、`HIVE_METASTORE`カタログ以外の全てのカタログに存在するSQL標準ベースのシステム提供のスキーマです。

インフォメーションスキーマでは、あなたが参照権限を持つオブジェクトを説明する一連のビューを参照することができます。`SYSTEM`カタログのインフォメーションスキーマは、メタストア内のすべてのカタログのオブジェクトに関する情報を返却します。

インフォメーションスキーマの目的は、メタデータに対してSQLベースの自己記述型のAPIを提供することです。

# Information schemaのエンティティ関連図

以下のエンティティリレーションシップ(ER)図は、インフォメーションスキーマ内のリレーションの概要と、それぞれの関係性を示しています。
![](https://docs.databricks.com/_images/information-schema.png)

# Information schemaのビュー

| 名前 | 説明 |
|:--|:--|
| [CATALOG\_PRIVILEGES](https://docs.databricks.com/sql/language-manual/information-schema/catalog_privileges.html)  |  カタログに対する[権限](https://docs.databricks.com/sql/language-manual/sql-ref-privileges.html)を持つ[プリンシパル](https://docs.databricks.com/sql/language-manual/sql-ref-principal.html)を一覧します。 |
| [CATALOGS](https://docs.databricks.com/sql/language-manual/information-schema/catalogs.html)  | カタログを説明します。  |
| [COLUMNS](https://docs.databricks.com/sql/language-manual/information-schema/columns.html)  |  カタログに含まれるテーブルやビューのカラムを説明します。 |
| [CONSTRAINT\_COLUMN\_USAGE](https://docs.databricks.com/sql/language-manual/information-schema/constraint_column_usage.html)  | カタログのカラムを参照する制約を説明します。  |
| [CONSTRAINT\_TABLE\_USAGE](https://docs.databricks.com/sql/language-manual/information-schema/constraint_table_usage.html)  | カタログのカラムを参照する制約を説明します。  |
| [CHECK\_CONSTRAINTS](https://docs.databricks.com/sql/language-manual/information-schema/check_constraints.html)  | 将来の利用に予約されています。  |
| [INFORMATION\_SCHEMA\_CATALOG\_NAME](https://docs.databricks.com/sql/language-manual/information-schema/information_schema_catalog_name.html)  | このインフォメーションスキーマのカタログ名を返却します。  |
| [PARAMETERS](https://docs.databricks.com/sql/language-manual/information-schema/parameters.html)  | カタログのルーチン(関数)のパラメーターを説明します。  |
|  [REFERENTIAL\_CONSTRAINTS](https://docs.databricks.com/sql/language-manual/information-schema/referential_constraints.html) |  カタログで定義されている参照制約(外部キー)を説明します。 |
| [ROUTINE\_COLUMNS](https://docs.databricks.com/sql/language-manual/information-schema/routine_columns.html)  | 関数の結果テーブルのカラムを説明します。  |
| [ROUTINE\_PRIVILEGES](https://docs.databricks.com/sql/language-manual/information-schema/routine_privileges.html)  |  カタログのルーチンに対する[権限](https://docs.databricks.com/sql/language-manual/sql-ref-privileges.html)を持つ[プリンシパル](https://docs.databricks.com/sql/language-manual/sql-ref-principal.html)を一覧します。 |
| [TABLE\_PRIVILEGES](https://docs.databricks.com/sql/language-manual/information-schema/table_privileges.html)  | カタログのテーブルとビューに対する[権限](https://docs.databricks.com/sql/language-manual/sql-ref-privileges.html)を持つ[プリンシパル](https://docs.databricks.com/sql/language-manual/sql-ref-principal.html)を一覧します。  |
|  [TABLES](https://docs.databricks.com/sql/language-manual/information-schema/tables.html) |  カタログで定義されているテーブルやビューを説明します。 |
| [SCHEMA\_PRIVILEGES](https://docs.databricks.com/sql/language-manual/information-schema/schema_privileges.html)  | カタログのスキーマに対する[権限](https://docs.databricks.com/sql/language-manual/sql-ref-privileges.html)を持つ[プリンシパル](https://docs.databricks.com/sql/language-manual/sql-ref-principal.html)を一覧します。  |
| [SCHEMATA](https://docs.databricks.com/sql/language-manual/information-schema/schemata.html)  |  カタログのスキーマを説明します。 |
| [VIEWS](https://docs.databricks.com/sql/language-manual/information-schema/views.html)  | カタログのビューに関するビュー固有の情報を説明します。  |

# 注意

SQL分で参照する際、識別子は大文字小文字を区別しませんが、`STRING`としてインフォメーションスキーマに格納されます。これは、[ilike](https://docs.databricks.com/sql/language-manual/functions/ilike.html)の様な関数を用いるか、識別子が格納されている大文字小文字を指定して検索を行わなくてはならないことを意味します。

# サンプル

システムレベルのインフォメーションスキーマテーブルを使用するサンプルのワークフローを以下に示します。

過去24時間以内に作成されたすべてのテーブルを参照する場合には、以下の様なクエリーを実行します。

```sql:SQL
> 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;
```

それぞれのスキーマにいくつのテーブルが含まれているのかを知りたいのであれば、以下の様なクエリーを実行します。

```sql:SQL
> SELECT table_schema, count(table_name)
    FROM system.information_schema.tables
    WHERE table_schema = 'tpch'
    GROUP BY table_schema
    ORDER BY 2 DESC
```

# 関連資料

- [SHOW](https://docs.databricks.com/sql/language-manual/index.html#show-statements)
- [DESCRIBE](https://docs.databricks.com/sql/language-manual/index.html#describe-statements)

### Databricks 無料トライアル

[Databricks 無料トライアル](https://databricks.com/jp/try-databricks)