Exibições USERS e QUERY_HISTORY (ACCOUNT_USAGE) e função QUERY_HISTORY: Novas colunas (pendente)¶
Atenção
Essa mudança de comportamento está no pacote 2024_08.
Para saber o status atual do pacote, consulte Histórico do pacote.
Quando esse pacote de mudança de comportamento é habilitado, as exibições USERS e QUERY_HISTORY e a saída da função QUERY_HISTORY incluem as seguintes novas colunas.
Exibição USERS (ACCOUNT_USAGE)¶
Quando o usuário TYPE é SNOWFLAKE_SERVICE, indicando que é um usuário do serviço, as novas colunas a seguir fornecem informações do banco de dados e do esquema do serviço. Caso contrário, essas colunas serão nulas.
Nome da coluna |
Tipo |
Descrição |
---|---|---|
DATABASE_NAME |
VARCHAR |
Quando o usuário TYPE é SNOWFLAKE_SERVICE, ele especifica o nome do banco de dados do serviço; caso contrário, é NULL. |
DATABASE_ID |
NUMBER |
Quando o usuário TYPE é SNOWFLAKE_SERVICE, ele especifica o identificador interno gerado pelo Snowflake para o banco de dados do serviço; caso contrário, é NULL. |
SCHEMA_NAME |
VARCHAR |
Quando o tipo de usuário é SNOWFLAKE_SERVICE, ele especifica o nome do esquema do serviço; caso contrário, é NULL. |
SCHEMA_ID |
NUMBER |
Quando o tipo de usuário é SNOWFLAKE_SERVICE, ele especifica o identificador interno gerado pelo Snowflake para o esquema do serviço; caso contrário, é NULL. |
Exibição QUERY_HISTORY (ACCOUNT_USAGE)¶
Quando QUERY_HISTORY USER_TYPE é SNOWFLAKE_SERVICE, indicando que a consulta é executada por um serviço Snowpark Container Services, as outras colunas fornecem informações sobre o esquema e o banco de dados do serviço.
Nome da coluna |
Tipo |
Descrição |
---|---|---|
USER_TYPE |
VARCHAR |
Especifica o tipo de usuário que executa a consulta. É o mesmo que o campo |
USER_DATABASE_NAME |
VARCHAR |
Quando o valor na coluna |
USER_DATABASE_ID |
NUMBER |
Quando o valor na coluna |
USER_SCHEMA_NAME |
VARCHAR |
Quando o valor na coluna |
USER_SCHEMA_ID |
NUMBER |
Quando o valor na coluna |
Função QUERY_HISTORY¶
As seguintes novas colunas são adicionadas à saída (consulte a função QUERY_HISTORY). Eles identificam o tipo de usuário (USER_TYPE). Quando USER_TYPE é SNOWFLAKE_SERVICE, as outras colunas identificam o banco de dados e o esquema do serviço.
Nome da coluna |
Tipo |
Descrição |
---|---|---|
USER_TYPE |
VARCHAR |
Especifica o tipo de usuário que executa a consulta. É o mesmo que o campo |
USER_DATABASE_NAME |
VARCHAR |
Quando o valor na coluna |
USER_SCHEMA_NAME |
VARCHAR |
Quando o valor na coluna |
Exemplos¶
As informações do banco de dados e do esquema do serviço, juntamente com o nome do usuário (que, para o type
do usuário SNOWFLAKE_SERVICE, também é o nome do serviço) podem ajudar durante a depuração. Por exemplo, você pode escrever uma consulta para recuperar informações sobre o serviço que executou as consultas. A seguir estão alguns exemplos de consultas:
Exemplo 1: Busca de consultas executadas por um serviço.
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;
Na cláusula WHERE:
user_name = '<service-name>'
porque um serviço executa consultas como o usuário do serviço, e o nome do usuário do serviço é o mesmo que o nome do serviço.user_type = 'SNOWFLAKE_SERVICE'
euser_name = '<service-name>'
recuperam apenas consultas executadas por um serviço.Os nomes
user_database_name
euser_schema_name
, para um usuário de serviço, são o banco de dados e o esquema do serviço.
É possível obter os mesmos resultados consultando a função 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;
Na cláusula WHERE:
user_type = 'SNOWFLAKE_SERVICE'
euser_name = '<service-name>'
recuperam apenas consultas executadas por um serviço.Os nomes
user_database_name
euser_schema_name
, para um usuário de serviço, são o banco de dados e o esquema do serviço.
Exemplo 2: Busca de consultas executadas por serviços e informações de serviço correspondentes.
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'
A consulta une as exibições QUERY_HISTORY e SERVICES para recuperar informações sobre as consultas e os serviços que as executaram. Observe o seguinte:
Para consultas executadas por serviços,
query_history.user_name
é o nome do usuário do serviço, que é o mesmo que o nome do serviço.A consulta une as exibições usando os IDs de esquema (não o nome do esquema) para garantir que você se refira ao mesmo esquema, porque se você remover e recriar um esquema, o ID do esquema será alterado, mas o nome permanecerá o mesmo.
Você pode adicionar filtros opcionais à consulta. Por exemplo:
Filtre
query_history
para recuperar apenas serviços que executaram consultas específicas.Filtre
services
para recuperar apenas consultas executadas por serviços específicos.
Exemplo 3: Para cada serviço, busque informações do usuário do serviço.
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'
A consulta une as exibições SERVICES e USERS no esquema ACCOUNT_USAGE para recuperar serviços e informações do usuário do serviço. Observe o seguinte:
Quando um serviço executa consultas, ele as executa como usuário do serviço e o nome do usuário do serviço é o mesmo que o nome do serviço. Portanto, você especifica a condição de junção:
users.name = services.service_name
.Os nomes de serviço são exclusivos apenas dentro de um esquema. Portanto, a consulta especifica a condição de junção (
users.schema_id = services.service_schema_id
) para garantir que cada usuário do serviço seja correspondido ao serviço específico ao qual pertence (e não a qualquer outro serviço com o mesmo nome em execução em esquemas diferentes).
Ref.: 1771