USERSとQUERY_HISTORYのビュー(ACCOUNT_USAGE)およびQUERY_HISTORY関数: 新しい列¶
この動作変更バンドルが有効になっている場合は、 USERS と QUERY_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 | クエリを実行するユーザーのタイプを指定します。これは、ユーザーエンティティの  | 
| USER_DATABASE_NAME | VARCHAR | 
 | 
| USER_DATABASE_ID | NUMBER | 
 | 
| USER_SCHEMA_NAME | VARCHAR | 
 | 
| USER_SCHEMA_ID | NUMBER | 
 | 
QUERY_HISTORY 関数¶
以下の新しい列が出力に追加されます(QUERY_HISTORY 関数 を参照)。これらはユーザータイプ(USER_TYPE)を識別します。USER_TYPE が SNOWFLAKE_SERVICE の場合、他の列はサービスのデータベースとスキーマを識別します。
| 列名 | 型 | 説明 | 
|---|---|---|
| USER_TYPE | VARCHAR | クエリを実行するユーザーのタイプを指定します。これは、ユーザーエンティティの  | 
| USER_DATABASE_NAME | VARCHAR | 
 | 
| USER_SCHEMA_NAME | VARCHAR | 
 | 
例¶
サービスのデータベースとスキーマ情報は、ユーザー名(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;
WHERE 句で、
- user_name = '<service-name>'。サービスは サービスユーザー としてクエリを実行し、サービスユーザー名はサービス名と同じだからです。
- user_type = 'SNOWFLAKE_SERVICE'と- user_name = '<service-name>'は、サービスによって実行されたクエリのみを取得します。
- user_database_nameと- user_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;
WHERE 句で、
- user_type = 'SNOWFLAKE_SERVICE'と- user_name = '<service-name>'は、サービスによって実行されたクエリだけを取得します。
- user_database_nameと- user_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'
このクエリは、 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'
このクエリは、 ACCOUNT_USAGE スキーマの SERVICES と USERS ビューを結合し、サービスとサービスユーザー情報を取得します。次の点に注意してください。
- サービスがクエリを実行すると、サービスユーザーとしてクエリを実行します。サービスユーザーの名前はサービス名と同じです。したがって、結合条件 - users.name = services.service_nameを指定します。
- サービス名はスキーマ内でのみ一意です。したがって、クエリは、各サービスユーザーが所属する固有のサービス(そして、異なるスキーマで実行されている他の同じ名前のサービスではない)に対して一致することを確実にするために、結合条件( - users.schema_id = services.service_schema_id)を指定します。
参照: 1771