USERS および QUERY_HISTORY ビュー(ACCOUNT_USAGE)、および QUERY_HISTORY 関数: 新しい列(保留中)

注意

この動作変更は2024_08バンドルにあります。

バンドルの現在のステータスについては、 バンドル履歴 をご参照ください。

この動作変更バンドルが有効になっている場合は、 USERSQUERY_HISTORY ビュー、また QUERY_HISTORY 関数の出力に以下の新しい列が含まれます。

USERS ビュー(ACCOUNT_USAGE)

ユーザー TYPE が SNOWFLAKE_SERVICE の場合、それは サービスユーザー であることを示し、以下の新しい列がサービスのデータベースとスキーマ情報を提供します。それ以外の場合、これらの列はNULLです。

列名

説明

DATABASE_NAME

VARCHAR

ユーザー TYPE が SNOWFLAKE_SERVICE の場合は、サービスのデータベース名を指定し、それ以外の場合は NULL です。

DATABASE_ID

NUMBER

ユーザー TYPE が SNOWFLAKE_SERVICE の場合は、サービスのデータベース用にSnowflakeが生成した内部識別子を指定します。それ以外の場合は NULL です。

SCHEMA_NAME

VARCHAR

ユーザータイプが SNOWFLAKE_SERVICE の場合は、サービスのスキーマ名を指定します。それ以外の場合は NULL です。

SCHEMA_ID

NUMBER

ユーザータイプが SNOWFLAKE_SERVICE の場合は、サービスのスキーマ用にSnowflakeが生成した内部識別子を指定します。それ以外の場合は NULL です。

QUERY_HISTORY ビュー(ACCOUNT_USAGE)

QUERY_HISTORY USER_TYPE が SNOWFLAKE_SERVICE の場合は、Snowpark Container Servicesサービスによってクエリが実行されることを示し、他の列はサービスのデータベースとスキーマ情報を提供します。

列名

説明

USER_TYPE

VARCHAR

クエリを実行するユーザーのタイプを指定します。これは、ユーザーエンティティの type フィールドと同じです(USERS ビュー を参照)。Snowpark Container Servicesサービスがクエリを実行する場合、ユーザータイプは SNOWFLAKE_SERVICE です。

USER_DATABASE_NAME

VARCHAR

user_type 列の値が SNOWFLAKE_SERVICE の場合は、サービスのデータベース名を指定します。それ以外の場合は NULL です。

USER_DATABASE_ID

NUMBER

user_type 列の値が SNOWFLAKE_SERVICE の場合は、サービスのデータベース用にSnowflakeが生成した内部識別子を指定します。それ以外の場合は NULL です。

USER_SCHEMA_NAME

VARCHAR

user_type 列の値が SNOWFLAKE_SERVICE の場合は、サービスのスキーマ名を指定します。それ以外の場合は NULL です。

USER_SCHEMA_ID

NUMBER

user_type 列の値が SNOWFLAKE_SERVICE の場合は、サービスのスキーマ用にSnowflakeが生成した内部識別子を指定します。それ以外の場合は NULL です。

QUERY_HISTORY 関数

以下の新しい列が出力に追加されます(QUERY_HISTORY 関数 を参照)。これらはユーザータイプ(USER_TYPE)を識別します。USER_TYPE が SNOWFLAKE_SERVICE の場合、他の列はサービスのデータベースとスキーマを識別します。

列名

説明

USER_TYPE

VARCHAR

クエリを実行するユーザーのタイプを指定します。これは、ユーザーエンティティの type フィールドと同じです(USERS ビュー を参照)。Snowpark Container Servicesサービスがクエリを実行する場合、ユーザータイプは SNOWFLAKE_SERVICE です。

USER_DATABASE_NAME

VARCHAR

user_type 列の値が SNOWFLAKE_SERVICE の場合は、サービスのデータベース名を指定します。それ以外の場合は NULL です。

USER_SCHEMA_NAME

VARCHAR

user_type 列の値が SNOWFLAKE_SERVICE の場合は、サービスのスキーマ名を指定します。それ以外の場合は NULL です。

サービスのデータベースとスキーマ情報は、ユーザー名(SNOWFLAKE_SERVICE ユーザー type では、サービス名でもある)とともに、デバッグの際に役立ちます。たとえば、クエリを実行したサービスに関する情報を取得するクエリを記述できます。以下はクエリの一例です。

例1: サービスによって実行されるフェッチクエリ。

SELECT query_history.*
FROM snowflake.account_usage.query_history
WHERE user_type = 'SNOWFLAKE_SERVICE'
AND user_name = '<service-name>'
AND user_database_name = '<service-db-name>'
AND user_schema_name = '<service-schema-name>'
order by start_time;
Copy

WHERE 句で、

  • user_name = '<service-name>'。サービスは サービスユーザー としてクエリを実行し、サービスユーザー名はサービス名と同じだからです。

  • user_type = 'SNOWFLAKE_SERVICE'user_name = '<service-name>' は、サービスによって実行されたクエリのみを取得します。

  • user_database_nameuser_schema_name の名前は、サービスユーザーの場合、サービスのデータベースとスキーマです。

information_schema.query_history関数を使っても同じ結果が得られます。

SELECT *
FROM TABLE(<any-user-db-name>.information_schema.query_history())
WHERE user_database_name = '<service-db-name>'
AND user_schema_name = '<service-schema-name>'
AND user_type = 'SNOWFLAKE_SERVICE'
AND user_name = '<service-name>'
order by start_time;
Copy

WHERE 句で、

  • user_type = 'SNOWFLAKE_SERVICE'user_name = '<service-name>' は、サービスによって実行されたクエリだけを取得します。

  • user_database_nameuser_schema_name の名前は、サービスユーザーの場合、サービスのデータベースとスキーマです。

例2: サービスによって実行されたクエリと対応するサービス情報をフェッチします。

SELECT query_history.*, services.*
FROM snowflake.account_usage.query_history
JOIN snowflake.account_usage.services
ON query_history.user_name = services.service_name
AND query_history.user_schema_id = services.service_schema_id
AND query_history.user_type = 'SNOWFLAKE_SERVICE'
Copy

このクエリは、 QUERY_HISTORY と SERVICES ビューを結合し、クエリとクエリを実行したサービスに関する情報を取得します。次の点に注意してください。

  • サービスによって実行されるクエリの場合、 query_history.user_name は、サービスユーザー名です。これは、サービス名と同じです。

  • クエリは、スキーマ IDs (スキーマ名ではない)を使用してビューを結合し、同じスキーマを参照していることを確認します。スキーマをドロップして再作成すると、スキーマ ID は変更されますが、名前は同じままだからです。

クエリにオプションのフィルターを追加することができます。例:

  • 特定のクエリを実行したサービスのみを取得するためのフィルター query_history

  • 特定のサービスによって実行されたクエリのみを取得するためのフィルター services

例3: すべてのサービスについて、サービスユーザー情報をフェッチします。

SELECT services.*, users.*
FROM snowflake.account_usage.users
JOIN snowflake.account_usage.services
ON users.name = services.service_name
AND users.schema_id = services.service_schema_id
AND users.type = 'SNOWFLAKE_SERVICE'
Copy

このクエリは、 ACCOUNT_USAGE スキーマの SERVICES と USERS ビューを結合し、サービスとサービスユーザー情報を取得します。次の点に注意してください。

  • サービスがクエリを実行すると、サービスユーザーとしてクエリを実行します。サービスユーザーの名前はサービス名と同じです。したがって、結合条件 users.name = services.service_name を指定します。

  • サービス名はスキーマ内でのみ一意です。したがって、クエリは、各サービスユーザーが所属する固有のサービス(そして、異なるスキーマで実行されている他の同じ名前のサービスではない)に対して一致することを確実にするために、結合条件(users.schema_id = services.service_schema_id)を指定します。

参照: 1771