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