USERS 및 QUERY_HISTORY 뷰(ACCOUNT_USAGE), QUERY_HISTORY 함수: 새로운 열(보류 중)

주의

이 동작 변경 사항은 2024_08 번들에 있습니다.

번들의 현재 상태는 번들 기록 섹션을 참조하십시오.

이 동작 변경 번들이 활성화되면 USERSQUERY_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

쿼리를 실행하는 사용자의 유형을 지정합니다. 사용자 엔터티의 type 필드와 동일합니다(USERS 뷰 참조). Snowpark Container Services 서비스가 쿼리를 실행하는 경우 사용자 유형은 SNOWFLAKE_SERVICE입니다.

USER_DATABASE_NAME

VARCHAR

user_type 열의 값이 SNOWFLAKE_SERVICE이면 서비스의 데이터베이스 이름을 지정하고, 그렇지 않으면 NULL입니다.

USER_DATABASE_ID

NUMBER

user_type 열의 값이 SNOWFLAKE_SERVICE이면 서비스의 데이터베이스에 대해 Snowflake 내부 생성 식별자를 지정하고, 그렇지 않으면 NULL입니다.

USER_SCHEMA_NAME

VARCHAR

user_type 열의 값이 SNOWFLAKE_SERVICE이면 서비스의 스키마 이름을 지정하고, 그렇지 않으면 NULL입니다.

USER_SCHEMA_ID

NUMBER

user_type 열의 값이 SNOWFLAKE_SERVICE이면 서비스의 스키마에 대해 내부적 Snowflake 생성 식별자를 지정하고, 그렇지 않으면 NULL입니다.

QUERY_HISTORY 함수

다음과 같은 새 열이 출력에 추가됩니다(QUERY_HISTORY 함수 참조). 새로운 열은 사용자 유형(USER_TYPE)을 식별합니다. USER_TYPE이 SNOWFLAKE_SERVICE인 경우 다른 열은 서비스의 데이터베이스와 스키마를 식별합니다.

열 이름

타입

설명

USER_TYPE

VARCHAR

쿼리를 실행하는 사용자의 유형을 지정합니다. 사용자 엔터티의 type 필드와 동일합니다(USERS 뷰 참조). Snowpark Container Services 서비스가 쿼리를 실행하는 경우 사용자 유형은 SNOWFLAKE_SERVICE입니다.

USER_DATABASE_NAME

VARCHAR

user_type 열의 값이 SNOWFLAKE_SERVICE이면 서비스의 데이터베이스 이름을 지정하고, 그렇지 않으면 NULL입니다.

USER_SCHEMA_NAME

VARCHAR

user_type 열의 값이 SNOWFLAKE_SERVICE이면 서비스의 스키마 이름을 지정하고, 그렇지 않으면 NULL입니다.

서비스의 데이터베이스 및 스키마 정보와 사용자 이름(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;
Copy

WHERE 절에서:

  • user_name = '<service-name>'. 서비스가 서비스 사용자 로 쿼리를 실행하고 서비스 사용자의 이름이 서비스 이름과 동일하기 때문입니다.

  • user_type = 'SNOWFLAKE_SERVICE'user_name = '<service-name>' 은 서비스에서 실행된 쿼리만 검색합니다.

  • 서비스 사용자의 경우 user_database_nameuser_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;
Copy

WHERE 절에서:

  • user_type = 'SNOWFLAKE_SERVICE'user_name = '<service-name>' 은 서비스에서 실행된 쿼리만 검색합니다.

  • 서비스 사용자의 경우 user_database_nameuser_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'
Copy

쿼리는 QUERY_HISTORY 및 SERVICES 뷰를 결합하여 쿼리를 실행한 쿼리 및 서비스에 대한 정보를 검색합니다. 다음 사항을 참고하십시오.

  • 서비스에서 실행되는 쿼리의 경우 query_history.user_name 은 서비스 사용자의 이름이며, 이는 서비스 이름과 동일합니다.

  • 스키마를 삭제한 후 다시 생성하면 스키마 ID는 변경되지만 이름은 그대로 유지되므로, 쿼리는 스키마 이름이 아닌 스키마 IDs를 사용하여 뷰를 조인해 동일한 스키마를 참조하도록 합니다.

쿼리에 선택적 필터를 추가할 수 있습니다. 예:

  • 특정 쿼리를 실행한 서비스만 검색하려면 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'
Copy

쿼리는 ACCOUNT_USAGE 스키마에서 SERVICES 및 USERS 뷰를 조인하여 서비스 및 서비스 사용자 정보를 검색합니다. 다음 사항을 참고하십시오.

  • 서비스가 쿼리를 실행할 때 서비스 사용자 권한으로 쿼리를 실행하고 서비스 사용자의 이름은 서비스 이름과 동일합니다. 따라서 조인 조건 users.name = services.service_name 을 지정합니다.

  • 서비스 이름은 스키마 내에서만 고유합니다. 따라서 쿼리는 각 서비스 사용자가 속한 특정 서비스(다른 스키마에서 실행되는 다른 동일한 이름의 서비스가 아닌)에 대해 일치하도록 조인 조건(users.schema_id = services.service_schema_id)을 지정합니다.

참조: 1771