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固有

メモ

APPLICABLE_ROLES

アカウント

CLASS_INSTANCE_FUNCTIONS

データベース

CLASS_INSTANCE_PROCEDURES

データベース

CLASS_INSTANCES

データベース

CLASSES

データベース

COLUMNS

データベース

CURRENT_PACKAGES_POLICY

データベース

DATABASES

アカウント

ELEMENT_TYPES

データベース

ENABLED_ROLES

アカウント

EVENT_TABLES

データベース

EXTERNAL_TABLES

データベース

FIELDS

データベース

FILE FORMATS

データベース

FUNCTIONS

データベース

INFORMATION_SCHEMA_CATALOG_NAME

アカウント

LOAD_HISTORY

アカウント

データは14日間保持されます。

OBJECT_PRIVILEGES

アカウント

PACKAGES

データベース

PIPES

データベース

PROCEDURES

データベース

REFERENTIAL_CONSTRAINTS

データベース

REPLICATION_DATABASES

アカウント

REPLICATION_GROUPS

アカウント

SCHEMATA

データベース

SEQUENCES

データベース

SERVICES

データベース

STAGES

データベース

TABLE_CONSTRAINTS

データベース

TABLE_PRIVILEGES

データベース

TABLE_STORAGE_METRICS

データベース

TABLES

データベース

テーブルとビューを表示します。

USAGE_PRIVILEGES

データベース

シーケンスの権限のみを表示します。他の型のオブジェクトに対する権限を表示するには、 OBJECT_PRIVILEGES を使用します。

VIEWS

データベース

テーブル関数のリスト

INFORMATION_SCHEMA のテーブル関数を使用して、ストレージ、ウェアハウス、ユーザーログイン、クエリのアカウントレベルの使用状況と履歴情報を返すことができます。

テーブル関数

データ 保持

メモ

AUTOMATIC_CLUSTERING_HISTORY

14日間

結果は MONITOR USAGE 権限に依存します。 [1]

AUTO_REFRESH_REGISTRATION_HISTORY

14日間

結果は MONITOR USAGE 権限に依存します。 [1]

COMPLETE_TASK_GRAPHS

60分間

結果は、 ACCOUNTADMIN ロール、タスク所有者(つまり、タスクに対する OWNERSHIP 権限を持つロール)、またはグローバル MONITOR EXECUTION 権限を持つロールに対してのみ返されます。

COPY_HISTORY

14日間

結果は、ユーザーに現在割り当てられているロールの権限に応じて異なります。

CURRENT_TASK_GRAPHS

N/A

結果は、 ACCOUNTADMIN ロール、タスク所有者(つまり、タスクに対する OWNERSHIP 権限を持つロール)、またはグローバル MONITOR EXECUTION 権限を持つロールに対してのみ返されます。

DATA_TRANSFER_HISTORY

14日間

結果は MONITOR USAGE 権限に依存します。 [1]

DATABASE_REFRESH_HISTORY

14日間

結果は、ユーザーに現在割り当てられているロールの権限に応じて異なります。

DATABASE_REFRESH_PROGRESS , DATABASE_REFRESH_PROGRESS_BY_JOB

14日間

結果は、ユーザーに現在割り当てられているロールの権限に応じて異なります。

DATABASE_REPLICATION_USAGE_HISTORY

14日間

ACCOUNTADMIN ロールに対してのみ結果が返されます。

DATABASE_STORAGE_USAGE_HISTORY

6か月間

結果は MONITOR USAGE 権限に依存します。 [1]

EXTERNAL_FUNCTIONS_HISTORY

14日間

結果は MONITOR USAGE 権限に依存します。 [1]

EXTERNAL_TABLE_FILES

N/A

結果は、ユーザーに現在割り当てられているロールの権限に応じて異なります。

EXTERNAL_TABLE_FILE_REGISTRATION_HISTORY

30日間

結果は、ユーザーに現在割り当てられているロールの権限に応じて異なります。

LOGIN_HISTORY , LOGIN_HISTORY_BY_USER

7日間

結果は、ユーザーに現在割り当てられているロールの権限に応じて異なります。

MATERIALIZED_VIEW_REFRESH_HISTORY

14日間

結果は MONITOR USAGE 権限に依存します。 [1]

NOTIFICATION_HISTORY

14日間

結果は、 ACCOUNTADMIN ロール、タスク所有者(つまり、統合に対する OWNERSHIP 権限を持つロール)、または統合に対する USAGE 権限を持つロールにのみ返されます。

PIPE_USAGE_HISTORY

14日間

結果は MONITOR USAGE 権限に依存します。 [1]

POLICY_REFERENCES

N/A

ACCOUNTADMIN ロールに対してのみ結果が返されます。

QUERY_ACCELERATION_HISTORY

14日間

結果は MONITOR USAGE 権限に依存します。 [1]

QUERY_HISTORY , QUERY_HISTORY_BY_*

7日間

結果は、ユーザーに現在割り当てられているロールの権限に応じて異なります。

REPLICATION_GROUP_REFRESH_HISTORY

14日間

複製またはフェールオーバーグループに対する権限を持つロールの行に対してのみ結果を返します。

REPLICATION_GROUP_REFRESH_PROGRESS, REPLICATION_GROUP_REFRESH_PROGRESS_BY_JOB

14日間

複製またはフェールオーバーグループに対する権限を持つロールの行に対してのみ結果を返します。

REPLICATION_GROUP_USAGE_HISTORY

14日間

結果は MONITOR USAGE 権限に依存します。 [1]

REPLICATION_USAGE_HISTORY

14日間

ACCOUNTADMIN ロールに対してのみ結果が返されます。

REST_EVENT_HISTORY

7日間

ACCOUNTADMIN ロールに対してのみ結果が返されます。

SEARCH_OPTIMIZATION_HISTORY

14日間

結果は MONITOR USAGE 権限に依存します。 [1]

SERVERLESS_TASK_HISTORY

14日間

結果は MONITOR USAGE 権限に依存します。 [1]

STAGE_DIRECTORY_FILE_REGISTRATION_HISTORY

14日間

結果は、ユーザーに現在割り当てられているロールの権限に応じて異なります。

STAGE_STORAGE_USAGE_HISTORY

6か月間

結果は MONITOR USAGE 権限に依存します。 [1]

TAG_REFERENCES

N/A

結果は、指定されたオブジェクトにアクセスできるロールに対してのみ返されます。

TAG_REFERENCES_ALL_COLUMNS

N/A

結果は、指定されたオブジェクトにアクセスできるロールに対してのみ返されます。

TASK_DEPENDENTS

N/A

ACCOUNTADMIN ロールまたはタスク所有者(タスクに対する OWNERSHIP 権限を持つロール)に対してのみ結果が返されます。

TASK_HISTORY

7日間

結果は、 ACCOUNTADMIN ロール、タスク所有者(つまり、タスクに対する OWNERSHIP 権限を持つロール)、またはグローバル MONITOR EXECUTION 権限を持つロールに対してのみ返されます。

VALIDATE_PIPE_LOAD

14日間

結果は、ユーザーに現在割り当てられているロールの権限に応じて異なります。

WAREHOUSE_LOAD_HISTORY

14日間

結果は MONITOR USAGE 権限に依存します。 [1]

WAREHOUSE_METERING_HISTORY

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 を使用します。

ちなみに

Information Schemaビューは、ディクショナリからオブジェクトの小さなサブセットを取得するクエリ用に最適化されています。可能な限り、スキーマ名とオブジェクト名でフィルタリングすることで、クエリのパフォーマンスを最大化します。

使用法および詳細については、 Snowflake情報スキーマのブログ投稿 をご参照ください。

SHOW コマンドを情報スキーマビューに置き換えるための考慮事項

INFORMATION_SCHEMA ビューは、 SHOW <オブジェクト> コマンドによって提供される同じ情報への SQL インターフェイスを提供します。ビューを使用して、これらのコマンドを置き換えることができます。ただし、切り替える前に考慮すべき重要な違いがいくつかあります。

考慮事項

SHOW コマンド

情報スキーマビュー

ウェアハウス

実行の必要なし。

ビューをクエリするには、ウェアハウスが実行中であり、現在使用されている必要があります。

パターンマッチング/フィルタリング

大文字と小文字を区別しない( LIKEを使用してフィルタリングする場合)。

標準(大文字と小文字を区別する)SQLセマンティクス。Snowflakeは、引用符なしの大文字と小文字を区別しない識別子を内部で自動的に大文字に変換するため、情報スキーマビューで引用符なしのオブジェクト名を大文字でクエリする必要があります。

クエリ結果

ほとんどの SHOW コマンドは、デフォルトで結果を現在のスキーマに制限します。

ビューには、現在の/指定されたデータベース内のすべてのオブジェクトが表示されます。特定のスキーマに対してクエリを実行するには、フィルター述語を使用する必要があります(例: ... WHERE table_schema = CURRENT_SCHEMA()...)。十分に選択的なフィルターがない情報スキーマクエリはエラーを返し、実行されません(このトピック内の 一般的な使用上の注意 をご参照ください)。

クエリの情報スキーマビューとテーブル関数の名前の修飾

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( ... ));
    
    Copy
  • ビューとテーブル関数の修飾名を 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( ... ));
    
    Copy
  • セッションで使用中の 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( ... ));
    
    Copy

    注釈

    共有から作成されたデータベースを使用中に、セッションの現在のスキーマとして INFORMATION_SCHEMA を選択した場合、 SELECT ステートメントは次のエラーにより失敗する可能性があります。

    INFORMATION_SCHEMA does not exist or is not authorized

    これが発生した場合は、セッションの現在のスキーマに別のスキーマを選択してください。

より詳細な例については、各ビュー/テーブル関数の参照ドキュメントをご参照ください。