사용자 정의 태그를 이용한 자동 태그 전파
사용자 정의 태그를 이용한 자동 태그 전파
Enterprise Edition 기능 — 이 기능은 Enterprise Edition 이상이 필요해요. 업그레이드 문의는 Snowflake 지원에 문의하세요.
태그 전파는 객체 태그가 소스 객체에 적용되면 대상 객체에 자동으로 할당해요. 예를 들어 테이블과 그 열 같은 소스 객체에 태그를 정의하면, 이 태그는 뷰나 소스 객체에서 만든 다른 테이블 같은 대상 객체로 자동으로 전파돼요.
자동 태그 전파의 장점은 다음과 같아요:
- 특히 발견과 데이터 보호를 위해 소스 객체나 열에 태그를 적용할 때 객체 전반의 태그 관리를 간소화해요.
- 태그와 연결된 모든 정책이 대상 객체에 자동으로 적용되도록 보장해요.
계정 수준 APPLY TAG 권한이 있는 태그 소유자만 자동 태그 전파를 구현할 수 있어요.
본문
전파 유형
객체 종속성, 데이터 이동, 또는 둘 다 있을 때 태그를 전파하도록 선택할 수 있어요.
객체 종속성에 대한 태그 전파
객체 종속성에 대해 태그 전파가 구성되면 태그는 소스 객체에서 이를 기반으로 하는 모든 대상 객체로 전파돼요. 예를 들어 테이블 t1에 data_sensitivity 태그에 대한 전파를 설정한 다음 t1을 기반으로 두 개의 뷰를 만들면, data_sensitivity 태그가 두 뷰 모두에 전파돼요.
소스 객체에서 뷰, 보안 뷰, 구체화된 뷰 또는 동적 테이블을 만드는 것은 객체 종속성으로 간주돼요.
객체 종속성에 대한 연속 전파
태그가 객체 종속성에 대해 구성되면 다음 중 하나가 발생할 때 Snowflake는 대상 객체를 연속적으로 업데이트해요:
- 태그가 소스 객체나 열에 추가됨.
- 태그의 값이 업데이트됨.
- 태그가 소스 객체나 열에서 제거됨. 이 경우 Snowflake는 대상 객체나 열에서 태그를 제거해요.
예를 들어 CREATE VIEW 문을 실행한 후 data_sensitivity 태그가 테이블 t1에서 뷰 v2로 전파됐다고 가정하세요. t1에서 data_sensitivity의 값을 변경하면 v2의 태그 값도 업데이트돼요.
자동 태그 전파는 소스 객체의 존재에 의존해요. 태그가 있는 소스 객체가 삭제되면 태그는 대상 객체로 전파되지 않아요. 뷰는 기본 테이블이나 다른 뷰 같은 소스에 의존하므로, 소스 객체가 존재할 때만 태그가 전파돼요.
데이터 이동에 대한 태그 전파
데이터 이동에 대해 태그 전파가 구성되면 다음 중 하나를 수행해 데이터를 소스 객체에서 다른 객체로 이동할 때 태그가 전파돼요:
- CREATE TABLE … AS SELECT (CTAS) 문을 실행해 테이블 만들기.
- CREATE DYNAMIC TABLE 문 실행.
- 데이터 조작 언어(DML) 명령 실행. 태그 전파는 다음 DML 명령에 대해 발생해요: INSERT, MERGE, UPDATE, COPY INTO.
CREATE TABLE … CLONE과 CREATE TABLE … LIKE는 태그 전파에 PROPAGATE 태그 속성에 의존하지 않아요. 이 문을 실행하면 소스의 태그가 항상 대상 객체에 할당돼요.
객체 종속성에 대한 태그 전파와 달리, 데이터 이동이 있을 때 대상 객체에 적용된 태그는 소스 객체에서 태그가 변경돼도 연속적으로 업데이트되지 않아요.
태그 전파 설정
자동 태그 전파를 활성화하려면 CREATE TAG 또는 ALTER TAG 명령을 사용해 PROPAGATE 속성을 설정하세요. 태그가 객체 종속성, 데이터 이동, 또는 둘 다에 대해 전파되도록 속성을 구성할 수 있어요.
태그 전파 설정 지침은 자동으로 전파될 태그 정의를 참조하세요.
태그 전파 충돌
태그가 서로 다른 소스 객체에서 같은 대상 객체로 전파될 때 충돌이 발생할 수 있어요. 각 소스 객체에서 태그가 다른 값을 가지면, 해당 태그가 소스 객체에서 대상 객체로 전파될 때 충돌이 있어요.
대상 객체에 수동으로 적용된 태그가 있다면 기존 태그 값이 전파된 값보다 우선하므로 충돌이 없어요.
대상 객체가 Snowflake 객체 계층 구조에서 더 높은 객체의 값을 상속받는다면 전파된 값이 우선하며 충돌이 없어요.
태그의 ON_CONFLICT 속성은 충돌이 있을 때 어떻게 될지 결정해요. 태그 전파 충돌을 처리하는 옵션은 다음과 같아요:
- 옵션 1: 태그의 값을 문자열
CONFLICT로 대체해요. 태그의 ON_CONFLICT 매개변수를 설정하지 않으면 기본값이에요. - 옵션 2: 태그의 값을 사용자 정의 문자열로 대체해요. ON_CONFLICT 매개변수를 이 문자열로 설정해요. 예를 들어 값에 충돌이 있을 때 태그 값이
HIGHLY CONFIDENTIAL이 되길 원한다면 다음 SQL로 태그를 만들어요:
CREATE TAG data_sensitivity
PROPAGATE = ON_DEPENDENCY_AND_DATA_MOVEMENT
ON_CONFLICT = 'HIGHLY CONFIDENTIAL';
- 옵션 3: 태그의 ALLOWED_VALUES 매개변수 값의 순서를 사용해 어떤 값을 사용할지 결정해요. 이 전략을 구현하려면
ON_CONFLICT = ALLOWED_VALUES_SEQUENCE를 설정하세요. 예를 들어 다음 SQL 문으로 태그를 만들었다고 가정하세요:
CREATE TAG data_sensitivity
ALLOWED_VALUES 'confidential', 'internal', 'public'
PROPAGATE = ON_DEPENDENCY
ON_CONFLICT = ALLOWED_VALUES_SEQUENCE;
이 태그에 대해 internal과 public 값 사이에 충돌이 있으면, internal이 허용 값 목록에서 public보다 앞에 오므로 data_sensitivity 태그의 값은 internal이 돼요.
ON_CONFLICT = ALLOWED_VALUES_SEQUENCE를 사용하기로 선택하면 ALLOWED_VALUES 매개변수의 변경이 충돌 해결 방식에 영향을 준다는 점을 유의하세요. 예를 들어 허용 목록의 값 순서를 바꾸면 향후 충돌로 인해 다른 값이 태그에 할당될 수 있어요.
- 옵션 4: 충돌하는 값을 대상 객체의 값 집합으로 결합해요.
ON_CONFLICT = MERGE를 설정하세요. 이 옵션은 태그에MULTI_VALUE = TRUE가 있을 때만 유효해요. 자세한 내용은 다중 값 태그를 참조하세요.
태그 전파와 관련된 충돌을 추적하려면 이벤트 테이블을 사용한 태그 전파 모니터링을 참조하세요.
이벤트 테이블을 사용한 태그 전파 모니터링
이벤트 테이블을 사용해 태그 전파와 관련된 텔레메트리 데이터를 수집할 수 있어요. Snowflake가 이벤트 테이블에서 데이터 수집을 시작한 후 테이블을 쿼리하고, 변경 사항을 추적하는 스트림을 만들거나, 특정 이벤트가 발생할 때 알림을 보내는 알림을 설정할 수 있어요.
태그 전파에 대한 텔레메트리 데이터를 수집하려면 ENABLE_TAG_PROPAGATION_EVENT_LOGGING 계정 매개변수를 활성화해야 해요. 데이터 수집을 시작하려면 다음 명령을 실행하세요:
ALTER ACCOUNT SET ENABLE_TAG_PROPAGATION_EVENT_LOGGING = TRUE;
태그의 데이터베이스에 설정된 이벤트 테이블이 있으면 이벤트가 그 테이블에 기록돼요. 그렇지 않으면 이벤트가 기본 이벤트 테이블에 기록돼요.
이벤트 이해
다음 표는 태그 전파에 해당하는 이벤트 테이블의 값을 설명해 적절한 이벤트에 집중할 수 있게 해요. 이벤트 테이블 구조에 대한 자세한 내용은 이벤트 테이블 열을 참조하세요.
| 이벤트 테이블 열 | 열 필드 | 필드 값 | 설명 |
|---|---|---|---|
scope |
name |
snow.automatic_tag_propagation |
레코드가 자동 태그 전파와 관련됨을 나타냄. |
record_attributes |
tag_name |
*tag_name* |
전파 중 이벤트가 있었던 태그의 이름. |
record_attributes |
event_type |
CONFLICT |
태그를 전파할 때 충돌이 발생했음을 나타냄. |
record_attributes |
event_type |
PROPAGATION_SKIPPED_MANUAL_TAG |
대상에 이미 같은 이름의 수동 적용 태그가 있고 수동 적용 태그 값이 유지되므로 Snowflake가 전파를 건너뛰었음을 나타냄. |
record_attributes |
event_type |
TAG_PROPAGATION_LIMIT_EXCEEDED |
대상 객체가 10,000개가 넘어 Snowflake가 태그를 전파하지 않았음을 나타냄. |
value |
conflict_values |
[ *tag_value* , *tag_value* ] |
충돌했던 태그 값의 배열. |
value |
resolution_type |
DEFAULT, STRING_OVERRIDE, ALLOWED_VALUES_SEQUENCE 또는 MERGE |
충돌이 발생했을 때 Snowflake가 취한 조치를 나타냄. 충돌이 특정 방식으로 해결된 이유를 이해하려면 태그 전파 충돌 참조. |
value |
resolution_type |
SAME_VALUE 또는 DIFFERENT_VALUE |
PROPAGATION_SKIPPED_MANUAL_TAG 이벤트의 경우 수동 적용 값이 전파됐을 값과 일치하는지 나타냄. |
value |
resolved_values |
*tag_value* |
Snowflake가 충돌을 해결한 후 태그의 최종 값. |
다음 예제를 사용해 이벤트 테이블에서 태그 전파 이벤트를 식별하는 방법을 더 잘 이해하세요.
쿼리: 태그 TAG1의 전파와 관련된 모든 이벤트 찾기
SELECT
TIMESTAMP as time,
RECORD_ATTRIBUTES['event_type'] as event_type,
VALUE as event_details
FROM tagging_db.tagging_schema.my_event_table
WHERE
SCOPE['name'] = 'snow.automatic_tag_propagation'
AND RECORD_ATTRIBUTES['tag_name'] = 'TAGGING_DB.TAGGING_SCHEMA.TAG1';
쿼리: 전파될 때 충돌이 있었던 모든 태그 찾기
SELECT
DISTINCT RECORD_ATTRIBUTES['tag_name'] as tags,
VALUE['conflict_values'] as conflicting_tag_values,
VALUE['resolution_type'] as resolution_type,
VALUE['resolved_value'] as resolved_value,
FROM tagging_db.tagging_schema.my_event_table
WHERE
SCOPE['name'] = 'snow.automatic_tag_propagation'
AND RECORD_ATTRIBUTES['event_type'] = 'CONFLICT';
쿼리: 태그 TAG1가 전파될 때 충돌이 있었던 엔터티 찾기
SELECT
TIMESTAMP as time,
RECORD_ATTRIBUTES['entity_name'] as entity_name,
RECORD_ATTRIBUTES['entity_domain'] as entity_domain,
FROM tagging_db.tagging_schema.my_event_table
WHERE
SCOPE['name'] = 'snow.automatic_tag_propagation'
AND RECORD_ATTRIBUTES['tag_name'] = 'TAGGING_DB.TAGGING_SCHEMA.TAG1'
AND RECORD_ATTRIBUTES['event_type'] = 'CONFLICT';
이벤트의 심각도
태그 전파 이벤트는 테이블을 관리하는 LOG_EVENT_LEVEL 매개변수가 해당 심각도 수준의 이벤트를 표시하도록 구성된 경우에만 기록돼요. 태그 전파 이벤트의 심각도 수준을 결정하려면 다음 표를 사용하세요.
| 이벤트 유형 | 해결 유형 | 심각도 |
|---|---|---|
CONFLICT |
default |
WARN |
string_override |
INFO | |
allowed_values_sequence |
INFO | |
merge |
INFO | |
PROPAGATION_SKIPPED_MANUAL_TAG |
same_value |
INFO |
different_value |
WARN | |
TAG_PROPAGATION_LIMIT_EXCEEDED |
해당 없음 | ERROR |
지원되는 객체
소스에서 대상으로의 태그 전파는 다음 객체 유형에 대해 지원돼요:
- 열
- 다음 유형의 테이블: 테이블, 동적 테이블(동적 테이블 만들기는 태그 전파 측면에서 객체 종속성과 데이터 이동 모두로 간주됨), 외부 테이블, Iceberg 테이블, 임시/일시적 테이블
- 다음 유형의 뷰: 뷰, 보안 뷰, 구체화된 뷰
향후 태그 전파 일시 중지
이미 전파된 태그를 제거하지 않고 객체에 대한 모든 향후 자동 태그 전파를 일시 중지하려면 객체에 SKIP_TAG_PROPAGATION을 설정하세요. 이 태그는 Enterprise Edition 이상이 필요해요.
제한 사항 및 고려 사항
- 시스템 태그는 전파되지 않아요.
- 상속된 태그는 전파되지 않아요.
- 태그는 공유에서 로컬 객체로 전파되지 않아요.
- 객체의 태그 수는 표준 제한을 초과할 수 없어요.
- 태그 전파를 촉발하는 단일 트랜잭션에서 태그는 최대 10,000개의 다운스트림 객체로만 전파될 수 있어요. 종속성 체인에 10,000개가 넘는 객체가 있으면(예: 10,000개가 넘는 뷰가 참조하는 테이블) 전파가 실패해요. 이벤트 테이블을 사용해 이 이유로 전파가 실패했는지 확인할 수 있어요.
- 객체 종속성에 대한 태그 전파에서 태그는 소스 테이블과 대상 뷰 모두에 적용될 수 있어요. 태그가 마스킹 정책과 연결된 경우 정책이 중복 실행되는 것과 관련된 결과가 있을 수 있어요.