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
은 서비스 사용자의 이름이며, 이는 서비스 이름과 동일합니다.스키마를 삭제한 후 다시 생성하면 스키마 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'
쿼리는 ACCOUNT_USAGE 스키마에서 SERVICES 및 USERS 뷰를 조인하여 서비스 및 서비스 사용자 정보를 검색합니다. 다음 사항을 참고하십시오.
서비스가 쿼리를 실행할 때 서비스 사용자 권한으로 쿼리를 실행하고 서비스 사용자의 이름은 서비스 이름과 동일합니다. 따라서 조인 조건
users.name = services.service_name
을 지정합니다.서비스 이름은 스키마 내에서만 고유합니다. 따라서 쿼리는 각 서비스 사용자가 속한 특정 서비스(다른 스키마에서 실행되는 다른 동일한 이름의 서비스가 아닌)에 대해 일치하도록 조인 조건(
users.schema_id = services.service_schema_id
)을 지정합니다.
참조: 1771