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 type na entidade do usuário (consulte a exibição USERS). Se um serviço do Snowpark Container Services executar a consulta, o tipo de usuário será SNOWFLAKE_SERVICE.

USER_DATABASE_NAME

VARCHAR

Quando o valor na coluna user_type é SNOWFLAKE_SERVICE, ele especifica o nome do banco de dados do serviço; caso contrário, é NULL.

USER_DATABASE_ID

NUMBER

Quando o valor na coluna user_type é SNOWFLAKE_SERVICE, ele especifica o identificador interno gerado pelo Snowflake para o banco de dados do serviço; caso contrário, é NULL.

USER_SCHEMA_NAME

VARCHAR

Quando o valor na coluna user_type é SNOWFLAKE_SERVICE, ele especifica o nome do esquema do serviço; caso contrário, é NULL.

USER_SCHEMA_ID

NUMBER

Quando o valor na coluna user_type é SNOWFLAKE_SERVICE, ele especifica o identificador interno gerado pelo Snowflake para o esquema do serviço, caso contrário, é NULL.

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 type na entidade do usuário (consulte a exibição USERS). Se um serviço do Snowpark Container Services executar a consulta, o tipo de usuário será SNOWFLAKE_SERVICE.

USER_DATABASE_NAME

VARCHAR

Quando o valor na coluna user_type é SNOWFLAKE_SERVICE, ele especifica o nome do banco de dados do serviço; caso contrário, é NULL.

USER_SCHEMA_NAME

VARCHAR

Quando o valor na coluna user_type é SNOWFLAKE_SERVICE, ele especifica o nome do esquema do serviço; caso contrário, é NULL.

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;
Copy

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' e user_name = '<service-name>' recuperam apenas consultas executadas por um serviço.

  • Os nomes user_database_name e user_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;
Copy

Na cláusula WHERE:

  • user_type = 'SNOWFLAKE_SERVICE' e user_name = '<service-name>' recuperam apenas consultas executadas por um serviço.

  • Os nomes user_database_name e user_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'
Copy

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'
Copy

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