Vues USERS et QUERY_HISTORY (ACCOUNT_USAGE) et fonction QUERY_HISTORY : nouvelles colonnes (en attente)¶
Attention
Ce changement de comportement est présent dans le bundle 2024_08.
Pour connaître le statut actuel du bundle, reportez-vous à Historique du bundle.
Lorsque ce bundle de changements de comportement est activé, les vues USERS et QUERY_HISTORY et la sortie de la fonction QUERY_HISTORY comprennent les nouvelles colonnes suivantes.
Vue USERS (ACCOUNT_USAGE)¶
Lorsque le TYPE d’utilisateur est SNOWFLAKE_SERVICE, indiquant qu’il s’agit d’un utilisateur de service, les nouvelles colonnes suivantes fournissent les informations sur la base de données et le schéma du service. Sinon, ces colonnes sont nulles.
Nom de la colonne |
Type |
Description |
---|---|---|
DATABASE_NAME |
VARCHAR |
Lorsque le TYPE d’utilisateur est SNOWFLAKE_SERVICE, il spécifie le nom de la base de données du service ; sinon, il est NULL. |
DATABASE_ID |
NUMBER |
Lorsque le TYPE d’utilisateur est SNOWFLAKE_SERVICE, il spécifie l’identificateur interne généré par Snowflake pour la base de données du service ; sinon, c’est NULL. |
SCHEMA_NAME |
VARCHAR |
Lorsque le type d’utilisateur est SNOWFLAKE_SERVICE, il spécifie le nom du schéma du service ; sinon, il est NULL. |
SCHEMA_ID |
NUMBER |
Lorsque le type d’utilisateur est SNOWFLAKE_SERVICE, il spécifie l’identificateur interne généré par Snowflake pour le schéma du service ; sinon, c’est NULL. |
Vue QUERY_HISTORY (ACCOUNT_USAGE)¶
Lorsque QUERY_HISTORY USER_TYPE est SNOWFLAKE_SERVICE, indiquant que la requête est exécutée par un service Snowpark Container Services, les autres colonnes fournissent les informations de base de données et de schéma du service.
Nom de la colonne |
Type |
Description |
---|---|---|
USER_TYPE |
VARCHAR |
Spécifie le type d’utilisateur exécutant la requête. C’est la même chose que le champ |
USER_DATABASE_NAME |
VARCHAR |
Lorsque la valeur dans la colonne |
USER_DATABASE_ID |
NUMBER |
Lorsque la valeur dans la colonne |
USER_SCHEMA_NAME |
VARCHAR |
Lorsque la valeur dans la colonne |
USER_SCHEMA_ID |
NUMBER |
Lorsque la valeur dans la colonne |
Fonction QUERY_HISTORY¶
Les nouvelles colonnes suivantes sont ajoutées à la sortie (voir Fonction QUERY_HISTORY). Elles identifient le type d’utilisateur (USER_TYPE). Lorsque le USER_TYPE est SNOWFLAKE_SERVICE, les autres colonnes identifient la base de données et le schéma du service.
Nom de la colonne |
Type |
Description |
---|---|---|
USER_TYPE |
VARCHAR |
Spécifie le type d’utilisateur exécutant la requête. C’est la même chose que le champ |
USER_DATABASE_NAME |
VARCHAR |
Lorsque la valeur dans la colonne |
USER_SCHEMA_NAME |
VARCHAR |
Lorsque la valeur dans la colonne |
Exemples¶
Les informations de base de données et de schéma du service, ainsi que le nom d’utilisateur (qui, pour le type
d’utilisateur SNOWFLAKE_SERVICE, est également le nom du service) peuvent aider pendant le débogage. Par exemple, vous pouvez écrire une requête pour récupérer des informations sur le service qui a exécuté les requêtes. Voici quelques exemples de requêtes :
Exemple 1 : récupérer les requêtes exécutées par un service.
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;
Dans la clause WHERE :
user_name = '<service-name>'
car un service exécute des requêtes en tant qu’utilisateur de service et le nom de l’utilisateur de service est le même que le nom du service.user_type = 'SNOWFLAKE_SERVICE'
etuser_name = '<service-name>'
récupèrent uniquement les requêtes exécutées par un service.Les noms
user_database_name
etuser_schema_name
, pour un utilisateur de service, sont la base de données et le schéma du service.
Vous pouvez obtenir les mêmes résultats en interrogeant la fonction 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;
Dans la clause WHERE :
user_type = 'SNOWFLAKE_SERVICE'
etuser_name = '<service-name>'
récupèrent uniquement les requêtes exécutées par un service.Les noms
user_database_name
etuser_schema_name
, pour un utilisateur de service, sont la base de données et le schéma du service.
Exemple 2 : récupérer les requêtes exécutées par les services et les informations de service correspondantes.
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'
La requête rejoint les vues QUERY_HISTORY et SERVICES pour récupérer des informations sur les requêtes et les services qui ont exécuté les requêtes. Remarques :
Pour les requêtes exécutées par les services, le
query_history.user_name
est le nom de l’utilisateur du service, qui est le même que le nom du service.La requête joint les vues à l’aide des IDs de schémas (pas le nom des schémas) pour vous assurer que vous faites référence au même schéma, car si vous supprimez et recréez un schéma, l’ID du schéma change, mais le nom reste le même.
Vous pouvez ajouter des filtres facultatifs à la requête. Par exemple :
Filtre
query_history
pour récupérer uniquement les services qui ont exécuté des requêtes spécifiques.Filtre
services
pour récupérer uniquement les requêtes exécutées par des services spécifiques.
Exemple 3 : pour chaque service, récupérer les informations sur l’utilisateur du service.
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'
La requête joint les vues SERVICES et USERS dans le schéma ACCOUNT_USAGE permettant de récupérer les services et les informations sur les utilisateurs des services. Remarques :
Lorsqu’un service exécute des requêtes, il exécute les requêtes en tant qu’utilisateur du service et le nom de l’utilisateur du service est le même que le nom du service. Par conséquent, vous spécifiez la condition de jointure :
users.name = services.service_name
.Les noms de service ne sont uniques qu’au sein d’un schéma. Par conséquent, la requête spécifie la condition de jointure (
users.schema_id = services.service_schema_id
) pour garantir que chaque utilisateur de service est associé au service spécifique auquel il appartient (et non à un autre service du même nom exécuté dans des schémas différents).
Réf : 1771