Snowflake Information Schema¶
Snowflake情報スキーマ(別名「データディクショナリ」)は、アカウントで作成されたオブジェクトに関する広範なメタデータ情報を提供するシステム定義のビューとテーブル関数のセットで構成されています。Snowflake情報スキーマは SQL-92 ANSI 情報スキーマに基づいていますが、Snowflakeに固有のビューと機能が追加されています。
Information Schemaは、Snowflakeがアカウント内のすべてのデータベースに自動的に作成する INFORMATION_SCHEMA という名前のスキーマとして実装されます。
注釈
ANSI は、「カタログ」という用語を使用してデータベースを参照します。標準との互換性を維持するために、Snowflake情報スキーマのトピックでは、「データベース」の代わりに「カタログ」を使用します(該当する場合)。すべての意図と目的について、用語は概念的に同等であり、交換可能です。
このトピックの内容:
INFORMATION_SCHEMA とは何ですか?¶
アカウントで作成された各データベースには、 INFORMATION_SCHEMA という名前の組み込み、読み取り専用スキーマが自動的に含まれます。スキーマには次のオブジェクトが含まれます。
データベースに含まれるすべてのオブジェクトのビュー、およびアカウントレベルのオブジェクト(ロール、ウェアハウス、データベースなどの非データベースオブジェクト)のビュー
アカウント全体の履歴データと使用データのテーブル関数。
情報スキーマビューとテーブル関数¶
ビューのリスト¶
INFORMATION_SCHEMA のビューには、データベースで定義されたオブジェクトに関するメタデータと、すべてのデータベースで共通の非データベースアカウントレベルオブジェクトのメタデータが表示されます。INFORMATION_SCHEMA の各インスタンスには次が含まれます。
Snowflakeに関連するデータベースおよびアカウントレベルのオブジェクトのANSI標準ビュー。
Snowflakeがサポートする非標準オブジェクト(ステージ、ファイル形式など)のSnowflake固有のビュー。
特に断りのない限り、Snowflake情報スキーマビューは ANSI標準です。
ビュー |
型 |
Snowflake固有 |
メモ |
---|---|---|---|
アカウント |
|||
データベース |
✔ |
||
データベース |
✔ |
||
データベース |
✔ |
||
データベース |
✔ |
||
データベース |
|||
データベース |
✔ |
||
アカウント |
✔ |
||
データベース |
|||
アカウント |
|||
データベース |
✔ |
||
データベース |
✔ |
||
データベース |
|||
データベース |
✔ |
||
データベース |
|||
データベース |
✔ |
||
データベース |
✔ |
||
データベース |
✔ |
||
アカウント |
|||
アカウント |
✔ |
データは14日間保持されます。 |
|
アカウント |
|||
データベース |
✔ |
||
データベース |
✔ |
||
データベース |
✔ |
||
データベース |
|||
アカウント |
✔ |
||
アカウント |
✔ |
||
データベース |
|||
データベース |
|||
データベース |
✔ |
||
データベース |
✔ |
||
データベース |
|||
データベース |
|||
データベース |
✔ |
||
データベース |
テーブルとビューを表示します。 |
||
データベース |
シーケンスの権限のみを表示します。他の型のオブジェクトに対する権限を表示するには、 OBJECT_PRIVILEGES を使用します。 |
||
データベース |
テーブル関数のリスト¶
INFORMATION_SCHEMA のテーブル関数を使用して、ストレージ、ウェアハウス、ユーザーログイン、クエリのアカウントレベルの使用状況と履歴情報を返すことができます。
テーブル関数 |
データ 保持 |
メモ |
---|---|---|
14日間 |
結果は MONITOR USAGE 権限に依存します。 [1] |
|
14日間 |
結果は MONITOR USAGE 権限に依存します。 [1] |
|
60分間 |
結果は、 ACCOUNTADMIN ロール、タスク所有者(つまり、タスクに対する OWNERSHIP 権限を持つロール)、またはグローバル MONITOR EXECUTION 権限を持つロールに対してのみ返されます。 |
|
14日間 |
結果は、ユーザーに現在割り当てられているロールの権限に応じて異なります。 |
|
N/A |
結果は、 ACCOUNTADMIN ロール、タスク所有者(つまり、タスクに対する OWNERSHIP 権限を持つロール)、またはグローバル MONITOR EXECUTION 権限を持つロールに対してのみ返されます。 |
|
14日間 |
結果は MONITOR USAGE 権限に依存します。 [1] |
|
14日間 |
結果は、ユーザーに現在割り当てられているロールの権限に応じて異なります。 |
|
DATABASE_REFRESH_PROGRESS , DATABASE_REFRESH_PROGRESS_BY_JOB |
14日間 |
結果は、ユーザーに現在割り当てられているロールの権限に応じて異なります。 |
14日間 |
ACCOUNTADMIN ロールに対してのみ結果が返されます。 |
|
6か月間 |
結果は MONITOR USAGE 権限に依存します。 [1] |
|
N/A |
結果は MONITOR USAGE 権限に依存します。 [1] |
|
1日 |
結果は MONITOR USAGE 権限に依存します。 [1] |
|
14日間 |
結果は MONITOR USAGE 権限に依存します。 [1] |
|
N/A |
結果は、ユーザーに現在割り当てられているロールの権限に応じて異なります。 |
|
30日間 |
結果は、ユーザーに現在割り当てられているロールの権限に応じて異なります。 |
|
7日間 |
結果は、ユーザーに現在割り当てられているロールの権限に応じて異なります。 |
|
14日間 |
結果は MONITOR USAGE 権限に依存します。 [1] |
|
14日間 |
結果は、 ACCOUNTADMIN ロール、タスク所有者(つまり、統合に対する OWNERSHIP 権限を持つロール)、または統合に対する USAGE 権限を持つロールにのみ返されます。 |
|
14日間 |
結果は MONITOR USAGE 権限に依存します。 [1] |
|
N/A |
ACCOUNTADMIN ロールに対してのみ結果が返されます。 |
|
14日間 |
結果は MONITOR USAGE 権限に依存します。 [1] |
|
7日間 |
結果は、ユーザーに現在割り当てられているロールの権限に応じて異なります。 |
|
14日間 |
複製またはフェールオーバーグループに対する権限を持つロールの行に対してのみ結果を返します。 |
|
REPLICATION_GROUP_REFRESH_PROGRESS, REPLICATION_GROUP_REFRESH_PROGRESS_BY_JOB |
14日間 |
複製またはフェールオーバーグループに対する権限を持つロールの行に対してのみ結果を返します。 |
14日間 |
結果は MONITOR USAGE 権限に依存します。 [1] |
|
14日間 |
ACCOUNTADMIN ロールに対してのみ結果が返されます。 |
|
7日間 |
ACCOUNTADMIN ロールに対してのみ結果が返されます。 |
|
14日間 |
結果は MONITOR USAGE 権限に依存します。 [1] |
|
14日間 |
結果は MONITOR USAGE 権限に依存します。 [1] |
|
14日間 |
結果は、ユーザーに現在割り当てられているロールの権限に応じて異なります。 |
|
6か月間 |
結果は MONITOR USAGE 権限に依存します。 [1] |
|
N/A |
結果は、指定されたオブジェクトにアクセスできるロールに対してのみ返されます。 |
|
N/A |
結果は、指定されたオブジェクトにアクセスできるロールに対してのみ返されます。 |
|
N/A |
ACCOUNTADMIN ロールまたはタスク所有者(タスクに対する OWNERSHIP 権限を持つロール)に対してのみ結果が返されます。 |
|
7日間 |
結果は、 ACCOUNTADMIN ロール、タスク所有者(つまり、タスクに対する OWNERSHIP 権限を持つロール)、またはグローバル MONITOR EXECUTION 権限を持つロールに対してのみ返されます。 |
|
14日間 |
結果は、ユーザーに現在割り当てられているロールの権限に応じて異なります。 |
|
14日間 |
結果は MONITOR USAGE 権限に依存します。 [1] |
|
6か月間 |
結果は MONITOR USAGE 権限に依存します。 [1] |
[1] ロールに MONITOR USAGE グローバル権限が割り当てられている場合に結果を返します。それ以外の場合は、 ACCOUNTADMIN ロールのみの結果を返します。
一般的な使用上の注意¶
各 INFORMATION_SCHEMA スキーマは読み取り専用です(スキーマ、およびスキーマ内のすべてのビューとテーブル関数は変更または削除できません)。
INFORMATION_SCHEMA ビューでのクエリは、同時 DDL に関する一貫性を保証しません。例えば、長時間実行される INFORMATION_SCHEMA クエリの実行中にテーブルのセットが作成された場合、クエリの結果には、作成されたテーブルの一部、またはすべてが含まれる場合とテーブルが含まれない場合があります。
ビューまたはテーブル関数の出力は、ユーザーの現在のロールに付与されている権限に依存します。INFORMATION_SCHEMA ビューまたはテーブル関数をクエリすると、現在のロールにアクセス権限が付与されているオブジェクトのみが返されます。
パフォーマンスの問題を防ぐため、 INFORMATION_SCHEMA クエリで指定されたフィルターが十分に選択的でない場合、次のエラーが返されます。
Information schema query returned too much data. Please repeat query with more selective predicates.
Snowflake固有のビューは変更される可能性があります。これらのビューからすべての列を選択することは避けてください。代わりに、必要な列を選択します。たとえば、
name
列が必要な場合は、SELECT *
ではなくSELECT name
を使用します。
Tip
Information Schemaビューは、ディクショナリからオブジェクトの小さなサブセットを取得するクエリ用に最適化されています。可能な限り、スキーマ名とオブジェクト名でフィルタリングすることで、クエリのパフォーマンスを最大化します。
使用法および詳細については、 Snowflake情報スキーマのブログ投稿 をご参照ください。
SHOW コマンドを情報スキーマビューに置き換えるための考慮事項¶
INFORMATION_SCHEMA ビューは、 SHOW <オブジェクト> コマンドによって提供される同じ情報への SQL インターフェイスを提供します。ビューを使用して、これらのコマンドを置き換えることができます。ただし、切り替える前に考慮すべき重要な違いがいくつかあります。
考慮事項 |
SHOW コマンド |
情報スキーマビュー |
---|---|---|
ウェアハウス |
実行の必要なし。 |
ビューをクエリするには、ウェアハウスが実行中であり、現在使用されている必要があります。 |
パターンマッチング/フィルタリング |
大文字と小文字を区別しない( LIKEを使用してフィルタリングする場合)。 |
標準(大文字と小文字を区別する)SQLセマンティクス。Snowflakeは、引用符なしの大文字と小文字を区別しない識別子を内部で自動的に大文字に変換するため、情報スキーマビューで引用符なしのオブジェクト名を大文字でクエリする必要があります。 |
クエリ結果 |
ほとんどの SHOW コマンドは、デフォルトで結果を現在のスキーマに制限します。 |
ビューには、現在の/指定されたデータベース内のすべてのオブジェクトが表示されます。特定のスキーマに対してクエリを実行するには、フィルター述語を使用する必要があります(例: |
クエリの情報スキーマビューとテーブル関数の名前の修飾¶
INFORMATION_SCHEMA ビューまたはテーブル関数をクエリする場合、ビュー/テーブル関数 または の修飾名を使用する必要があります。INFORMATION_SCHEMA スキーマはセッションで使用する必要があります。
例:
ビューとテーブル関数の完全修飾名を
database.information_schema.name
の形式で使用してクエリするには、SELECT table_name, comment FROM testdb.INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'PUBLIC' ... ; SELECT event_timestamp, user_name FROM TABLE(testdb.INFORMATION_SCHEMA.LOGIN_HISTORY( ... ));
ビューとテーブル関数の修飾名を
information_schema.name
の形式で使用してクエリするには、USE DATABASE testdb; SELECT table_name, comment FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'PUBLIC' ... ; SELECT event_timestamp, user_name FROM TABLE(INFORMATION_SCHEMA.LOGIN_HISTORY( ... ));
セッションで使用中の INFORMATION_SCHEMA スキーマでクエリするには、
USE SCHEMA testdb.INFORMATION_SCHEMA; SELECT table_name, comment FROM TABLES WHERE TABLE_SCHEMA = 'PUBLIC' ... ; SELECT event_timestamp, user_name FROM TABLE(LOGIN_HISTORY( ... ));
注釈
共有から作成されたデータベースを使用中に、セッションの現在のスキーマとして INFORMATION_SCHEMA を選択した場合、 SELECT ステートメントは次のエラーにより失敗する可能性があります。
INFORMATION_SCHEMA does not exist or is not authorized
これが発生した場合は、セッションの現在のスキーマに別のスキーマを選択してください。
より詳細な例については、各ビュー/テーブル関数の参照ドキュメントをご参照ください。