ALTER VIEW
ALTER VIEW
기존 뷰(view)의 속성을 수정하는 명령이에요. 현재 지원되는 연산은 다음과 같아요:
-
뷰 이름 바꾸기.
-
보안 뷰(secure view)로 변환(또는 되돌리기).
-
뷰에 주석 추가, 덮어쓰기, 제거.
뷰의 정의를 변경하는 데는 이 명령을 사용할 수 없다는 점에 유의하세요. 뷰 정의를 변경하려면 뷰를 삭제한 뒤 다시 만들어야 해요.
출처: 문서
본문
관련 명령: CREATE VIEW, DROP VIEW, SHOW VIEWS, DESCRIBE VIEW
구문 (Syntax)
ALTER VIEW [ IF EXISTS ] <name> RENAME TO <new_name>
ALTER VIEW [ IF EXISTS ] <name> SET
[ SECURE ]
[ CHANGE_TRACKING = { TRUE | FALSE } ]
[ CONTACT <purpose> = <contact_name> [ , <purpose> = <contact_name> ... ] ]
[ COMMENT = '<string_literal>' ]
ALTER VIEW [ IF EXISTS ] <name> UNSET
[ SECURE ]
[ CONTACT <purpose> ]
[ COMMENT = '<string_literal>' ]
[ DCM PROJECT ]
ALTER VIEW <name> dataMetricFunctionAction
ALTER VIEW [ IF EXISTS ] <name> dataGovnPolicyTagAction
여기에서:
dataMetricFunctionAction ::=
SET DATA_METRIC_SCHEDULE = {
'<num> MINUTE'
| 'USING CRON <expr> <time_zone>'
| 'TRIGGER_ON_CHANGES'
}
| UNSET DATA_METRIC_SCHEDULE
| ADD DATA METRIC FUNCTION <metric_name>
ON ( <col_name> [ , ... ] [ , TABLE <table_name>( <col_name> [ , ... ] ) ] )
[ WITHIN GROUP ( <group_col1> [ , <group_col2> ... ] )
[ GROUP LIMIT <integer> ] ]
[ FILTER ( <predicate> ) ]
[ EXPECTATION <expectation_name> ( <expression> )
[, <expectation_name> ( <expression> ) [ , ... ] ] ]
[ EXECUTE AS ROLE <role_name> ]
[ ANOMALY_DETECTION = { TRUE | FALSE } ]
[ SENSITIVITY = { 'LOW' | 'MEDIUM' | 'HIGH' } ]
[ , <metric_name_2> ON ( <col_name> [ , ... ] [ , TABLE <table_name>( <col_name> [ , ... ] ) ] ) ]
[ WITHIN GROUP ( <group_col1> [ , <group_col2> ... ] )
[ GROUP LIMIT <integer> ] ]
[ FILTER ( <predicate> ) ]
[ EXPECTATION <expectation_name> ( <expression> )
[, <expectation_name> ( <expression> ) [ , ... ] ] ]
[ EXECUTE AS ROLE <role_name> ]
[ ANOMALY_DETECTION = { TRUE | FALSE } ]
[ SENSITIVITY = { 'LOW' | 'MEDIUM' | 'HIGH' } ]
| DROP DATA METRIC FUNCTION <metric_name>
ON ( <col_name> [ , ... ] [ , TABLE <table_name>( <col_name> [ , ... ] ) ] )
[ , <metric_name_2> ON ( <col_name> [ , ... ] [ , TABLE <table_name>( <col_name> [ , ... ] ) ] ) ]
| MODIFY DATA METRIC FUNCTION <metric_name>
ON ( <col_name> [ , ... ] [ , TABLE <table_name>( <col_name> [ , ... ] ) ] )
{ SUSPEND | RESUME }
[ , <metric_name_2> ON ( <col_name> [ , ... ] [ , TABLE <table_name>( <col_name> [ , ... ] ) ] )
{ SUSPEND | RESUME } ]
| MODIFY DATA METRIC FUNCTION <metric_name>
ON ( <col_name> [ , ... ] [ , TABLE <table_name>( <col_name> [ , ... ] ) ] )
{ ADD | MODIFY } EXPECTATION <expectation_name> ( <expression> )
[, <expectation_name> ( <expression> ) [ , ... ] ]
| MODIFY DATA METRIC FUNCTION <metric_name>
ON ( <col_name> [ , ... ] [ , TABLE <table_name>( <col_name> [ , ... ] ) ] )
DROP EXPECTATION <expectation_name> [ , <expectation_name> [ , ... ] ]
| MODIFY DATA METRIC FUNCTION <metric_name>
ON ( <col_name> [ , ... ] [ , TABLE <table_name>( <col_name> [ , ... ] ) ] )
FILTER ( [ <predicate> ] )
[ , <metric_name_2> ON ( <col_name> [ , ... ] [ , TABLE <table_name>( <col_name> [ , ... ] ) ] )
FILTER ( [ <predicate> ] ) ]
| MODIFY DATA METRIC FUNCTION <metric_name>
SET <list_of_properties>
dataGovnPolicyTagAction ::=
{
SET TAG <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' ... ]
| UNSET TAG <tag_name> [ , <tag_name> ... ]
}
|
{
ADD ROW ACCESS POLICY <policy_name> ON ( <col_name> [ , ... ] )
| DROP ROW ACCESS POLICY <policy_name>
| DROP ROW ACCESS POLICY <policy_name> ,
ADD ROW ACCESS POLICY <policy_name> ON ( <col_name> [ , ... ] )
| DROP ALL ROW ACCESS POLICIES
}
|
{
SET AGGREGATION POLICY <policy_name>
[ ENTITY KEY ( <col_name> [, ... ] ) ]
[ FORCE ]
| UNSET AGGREGATION POLICY
}
|
{
SET JOIN POLICY <policy_name>
[ FORCE ]
| UNSET JOIN POLICY
}
|
ADD [ COLUMN ] [ IF NOT EXISTS ] <col_name> <col_type>
[ [ WITH ] MASKING POLICY <policy_name>
[ USING ( <col1_name> , <cond_col_1> , ... ) ] ]
[ [ WITH ] PROJECTION POLICY <policy_name> ]
[ [ WITH ] TAG ( <tag_name> = '<tag_value>'
[ , <tag_name> = '<tag_value>' , ... ] ) ]
|
{
{ ALTER | MODIFY } [ COLUMN ] <col1_name>
SET MASKING POLICY <policy_name>
[ USING ( <col1_name> , <cond_col_1> , ... ) ] [ FORCE ]
| UNSET MASKING POLICY
}
|
{
{ ALTER | MODIFY } [ COLUMN ] <col1_name>
SET PROJECTION POLICY <policy_name>
[ FORCE ]
| UNSET PROJECTION POLICY
}
|
{ ALTER | MODIFY } [ COLUMN ] <col1_name> SET TAG
<tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' ... ]
, [ COLUMN ] <col2_name> SET TAG
<tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' ... ]
|
{ ALTER | MODIFY } [ COLUMN ] <col1_name> UNSET TAG <tag_name> [ , <tag_name> ... ]
, [ COLUMN ] <col2_name> UNSET TAG <tag_name> [ , <tag_name> ... ]
파라미터 (Parameters)
*name*
수정할 뷰의 식별자를 지정해요. 식별자에 공백이나 특수 문자가 포함되면 전체 문자열을 큰따옴표로 감싸야 해요. 큰따옴표로 감싼 식별자는 대소문자를 구분해요.
RENAME TO *new_name*
뷰의 새 식별자를 지정해요. 스키마 내에서 고유해야 해요.
자세한 내용은 Identifier requirements를 참고하세요.
객체를 선택적으로 이름을 바꾸면서 다른 데이터베이스 및/또는 스키마로 이동할 수 있어요. 그러려면 새 데이터베이스 및/또는 스키마 이름을 포함한 정규화된 new_name 값을 각각 db_name.schema_name.object_name 또는 schema_name.object_name 형식으로 지정해요.
참고
-
대상 데이터베이스 및/또는 스키마는 이미 존재해야 해요. 또한 새 위치에 같은 이름의 객체가 이미 있으면 안 되며, 그렇지 않으면 문이 오류를 반환해요.
-
객체 소유자(즉 객체에 OWNERSHIP 권한이 있는 역할)가 대상 스키마도 소유하지 않는 한 관리 액세스 스키마로 객체를 이동하는 것은 금지돼요.
객체의 이름이 바뀌면 그것을 참조하는 다른 객체를 새 이름으로 업데이트해야 해요.
SET ...
뷰에 대해 설정할 속성을 지정해요:
SECURE
뷰를 보안 뷰로 지정해요.
CHANGE_TRACKING = { TRUE | FALSE }
테이블에서 변경 추적을 활성화하거나 비활성화하도록 지정해요.
-
TRUE는 뷰에서 변경 추적을 활성화하고 설정을 모든 하위 테이블에 전파해요. -
FALSE는 뷰에서 변경 추적을 비활성화하고 설정을 모든 하위 테이블에 전파해요.
CONTACT purpose = contact [ , purpose = contact ... ]
기존 객체를 하나 이상의 연락처(contacts)와 연결해요. 유효한 목적 목록은 Associate a contact with an object를 참고하세요.
같은 문에서 CONTACT 속성을 다른 속성과 함께 설정할 수 없어요.
COMMENT = '*string_literal*'
뷰에 주석을 추가하거나 기존 주석을 덮어써요.
참고
각 뷰 속성은 개별적으로 설정해야 해요.
UNSET ...
뷰에 대해 설정 해제할 속성을 지정하며, 기본값으로 재설정돼요:
-
SECURE -
CONTACT *purpose* -
COMMENT
속성을 재설정할 때는 이름만 지정해요. 속성에 값을 지정하면 오류가 반환돼요.
참고
각 뷰 속성은 개별적으로 재설정해야 해요.
UNSET DCM PROJECT
뷰를 현재 관리하는 DCM 프로젝트에서 분리해요. 이 명령은 뷰를 삭제하지 않고 뷰와 DCM 프로젝트 사이의 연관을 제거해요. 자세한 내용은 Detach objects from a DCM project를 참고하세요.
데이터 메트릭 함수 작업 (dataMetricFunctionAction)
DATA_METRIC_SCHEDULE ...
데이터 메트릭 함수(data metric function, DMF)를 주기적으로 실행할 스케줄을 지정해요.
'num MINUTE'
데이터 메트릭 함수 실행 사이에 삽입되는 대기 간격(분)을 지정해요. 양의 정수만 허용해요.
num M 구문도 지원해요.
데이터 메트릭 함수에는 다음 값 중 하나를 사용해요: 5, 15, 30, 60, 720, 1440.
객체와 연결된 모든 DMF를 중단하려면 파라미터를 빈 문자열로 설정해요.
기본값: 60 MINUTE
'USING CRON expr time_zone'
데이터 메트릭 함수를 주기적으로 실행하기 위한 cron 표현식과 시간대를 지정해요. 표준 cron 유틸리티 구문의 하위 집합을 지원해요.
시간대 목록은 tz database time zones 목록을 참고하세요.
cron 표현식은 다음 필드로 구성되며, 주기 간격은 최소 5분이어야 해요:
# __________ minute (0-59)
# | ________ hour (0-23)
# | | ______ day of month (1-31, or L)
# | | | ____ month (1-12, JAN-DEC)
# | | | | _ day of week (0-6, SUN-SAT, or L)
# | | | | |
# | | | | |
* * * * *
지원되는 특수 문자는 다음과 같아요:
*
와일드카드. 필드의 임의 발생을 지정해요.
L
"마지막(last)"을 나타내요. 요일(day-of-week) 필드에서 사용하면 주어진 달의 "마지막 금요일"("5L") 같은 구문을 지정할 수 있게 해요. 월중일(day-of-month) 필드에서는 달의 마지막 날을 지정해요.
/{n}
주어진 시간 단위의 n번째 인스턴스를 나타내요. 각 시간 단위는 독립적으로 계산돼요. 예를 들어 month 필드에 4/3을 지정하면 데이터 메트릭 함수는 4월, 7월, 10월(즉 연도의 4번째 달부터 3개월마다)로 예약돼요. 이후 연도에도 같은 스케줄이 유지돼요. 즉 데이터 메트릭 함수는 (10월 실행 3개월 후인) 1월에 실행되도록 예약되지 않아요.
참고
-
cron 표현식은 현재 지정된 시간대에 대해서만 평가돼요. 계정의 TIMEZONE 파라미터 값을 변경하거나 사용자·세션 수준에서 값을 설정해도 데이터 메트릭 함수의 시간대는 바뀌지 않아요.
-
cron 표현식은 데이터 메트릭 함수의 모든 유효 실행 시간을 정의해요. Snowflake는 이 스케줄에 따라 데이터 메트릭 함수 실행을 시도하지만, 이전 실행이 다음 유효 실행 시간이 시작되기 전에 완료되지 않으면 해당 유효 실행 시간은 건너뛰어져요.
-
cron 표현식에 특정 월중일과 요일이 모두 포함되면 데이터 메트릭 함수는 월중일 또는 요일 중 하나를 만족하는 날에 예약돼요. 예를 들어
DATA_METRIC_SCHEDULE = 'USING CRON 0 0 10-20 * TUE,THU UTC'는 매달 10일~20일의 자정(0AM)과 그 날짜 밖의 화요일·목요일에도 데이터 메트릭 함수를 예약해요. -
cron에서 시간의 가장 짧은 단위는 분이에요.
데이터 메트릭 함수가 cron 표현식에 정의된 분 중에 다시 시작되면, 데이터 메트릭 함수의 첫 번째 예약 실행은 cron 표현식 인스턴스의 다음 발생이에요. 예를 들어 매일 자정(USING CRON 0 0 * * *)에 실행되도록 예약된 데이터 메트릭 함수가 자정 + 5초(00:00:05)에 다시 시작되면, 첫 번째 데이터 메트릭 함수 실행은 다음 자정으로 예약돼요.
'TRIGGER_ON_CHANGES'
DML 작업이 테이블을 수정할 때(예: 새 행 삽입 또는 행 삭제) DMF가 실행되도록 지정해요.
'TRIGGER_ON_CHANGES'는 다음 객체에 대해 지정할 수 있어요:
-
동적 테이블(Dynamic tables)
-
외부 테이블(External tables)
-
Apache Iceberg™ 테이블
-
일반 테이블(Regular tables)
-
임시 테이블(Temporary tables)
-
Transient 테이블
뷰에는 'TRIGGER_ON_CHANGES'를 지정할 수 없어요.
재클러스터링(reclustering)의 결과로 생긴 테이블 변경은 DMF 실행을 트리거하지 않아요.
UNSET DATA_METRIC_SCHEDULE
객체와 연결된 DMF의 스케줄을 기본값 60 MINUTE으로 재설정해요.
객체와 연결된 DMF를 중단하려면 대신 SET DATA_METRIC_SCHEDULE = '' 문을 실행해요.
{ ADD | DROP } DATA METRIC FUNCTION metric_name
테이블이나 뷰에 추가하거나 제거할 데이터 메트릭 함수의 식별자예요.
ON ( col_name [ , ... ] [ , TABLE( table_name( col_name [ , ... ] ) ) ] )
데이터 메트릭 함수를 연결할 테이블 또는 뷰 열이에요. 열의 데이터 유형은 데이터 메트릭 함수 정의에 지정된 열의 데이터 유형과 일치해야 해요.
데이터 메트릭 함수가 두 번째 테이블을 인수로 받아들이면 테이블의 정규화된 이름과 그 열을 지정해요.
EXPECTATION expectation_name ( expression ) [, expectation_name ( expression ) [ , ... ] ]
열과 DMF 사이의 연결에 대한 기대치(expectations) 하나 이상을 정의해요.
[ , metric_name_2 ON ( col_name [ , ... ] [ , TABLE( table_name( col_name [ , ... ] ) ) ] ) ]
테이블이나 뷰에 추가할 추가 데이터 메트릭 함수들이에요. 각 데이터 메트릭 함수와 지정된 열을 쉼표로 구분해요.
데이터 메트릭 함수가 두 번째 테이블을 인수로 받아들이면 테이블의 정규화된 이름과 그 열을 지정해요.
ANOMALY_DETECTION = { TRUE | FALSE }
프리뷰 기능 — 공개
Enterprise Edition(이상)의 모든 계정에서 사용할 수 있어요.
업그레이드를 문의하려면 Snowflake Support에 연락하세요.
Snowflake가 DMF를 사용해 테이블의 이상 징후를 자동으로 감지할지 여부를 지정해요.
기본값: FALSE
SENSITIVITY = { LOW | MEDIUM | HIGH }
프리뷰 기능 — 공개
Enterprise Edition(이상)의 모든 계정에서 사용할 수 있어요.
업그레이드를 문의하려면 Snowflake Support에 연락하세요.
이상 감지 알고리즘의 민감도를 지정해요. 자세한 내용은 Adjust the sensitivity level of anomaly detection을 참고하세요.
기본값: 'MEDIUM'
EXECUTE AS ROLE role_name
DMF가 실행되는 역할을 지정해요. 역할은 테이블이나 뷰에 대한 SELECT 권한이 있어야 해요.
자세한 내용은 Required privilege on the table or view를 참고하세요.
MODIFY DATA METRIC FUNCTION metric_name
수정할 데이터 메트릭 함수의 식별자예요.
ON ( col_name [ , ... ] [ , TABLE( table_name( col_name [ , ... ] ) ) ] )
데이터 메트릭 함수와 연결된 열을 지정해요. 데이터 메트릭 함수가 두 번째 테이블을 인수로 받아들이면 테이블의 정규화된 이름과 그 열을 지정해요.
{ SUSPEND | RESUME }
지정된 열에서 데이터 메트릭 함수를 중단하거나 다시 시작해요. 데이터 메트릭 함수가 테이블이나 뷰에 대해 설정되면 스케줄에 자동으로 포함돼요.
-
SUSPEND는 데이터 메트릭 함수를 스케줄에서 제거해요. -
RESUME은 중단된 데이터 메트릭 함수를 스케줄로 다시 가져와요.
{ ADD | MODIFY } EXPECTATION expectation_name ( expression ) [, expectation_name ( expression ) [ , ... ] ]
열과 DMF 사이의 연결에 대한 기대치 하나 이상을 정의하거나 수정해요.
DROP EXPECTATION expectation_name [ , expectation_name [ , ... ] ]
열과 DMF 사이의 연결에서 지정된 기대치를 제거해요.
FILTER ( [ predicate ] )
연결에서 행 필터를 설정, 교체 또는 제거해요. 조건을 만족하는 행에 대해서만 DMF를 평가하도록 Boolean 표현식을 지정해요. 필터를 제거하려면 빈 괄호(FILTER ())를 지정해 DMF가 모든 행을 평가하도록 해요.
같은 MODIFY 문에서 FILTER를 SUSPEND, RESUME, EXPECTATION, SET과 결합할 수 없어요. FILTER는 WITHIN GROUP을 사용하는 연결에서는 지원되지 않아요.
자세한 내용은 Apply data quality checks to a subset of rows을 참고하세요.
[ , metric_name_2 ON ( col_name [ , ... ] [ , TABLE(col_name [ , ... ] ) ] ) ]
수정할 추가 데이터 메트릭 함수들이에요. 각 데이터 메트릭 함수와 지정된 열을 쉼표로 구분해요. 데이터 메트릭 함수가 두 번째 테이블을 인수로 받아들이면 테이블의 정규화된 이름과 그 열을 지정해요.
SET list_of_properties
DMF와 객체 사이의 연결 속성 하나 이상을 설정해요. 둘 이상의 속성을 공백으로 구분된 목록으로 설정해요.
ANOMALY_DETECTION = { TRUE | FALSE }
프리뷰 기능 — 공개
Enterprise Edition(이상)의 모든 계정에서 사용할 수 있어요.
업그레이드를 문의하려면 Snowflake Support에 연락하세요.
Snowflake가 DMF를 사용해 테이블의 이상 징후를 자동으로 감지할지 여부를 제어해요.
SENSITIVITY = { 'LOW' | 'MEDIUM' | 'HIGH' }
프리뷰 기능 — 공개
Enterprise Edition(이상)의 모든 계정에서 사용할 수 있어요.
업그레이드를 문의하려면 Snowflake Support에 연락하세요.
이상 감지 알고리즘의 민감도를 설정해요. 자세한 내용은 Adjust the sensitivity level of anomaly detection을 참고하세요.
DATA_QUALITY_NOTIFICATION = { TRUE | FALSE }
프리뷰 기능 — 공개
Enterprise Edition(이상)의 모든 계정에서 사용할 수 있어요.
업그레이드를 문의하려면 Snowflake Support에 연락하세요.
DMF가 반환한 값이 기대치 위반이거나 이상 징후일 때 알림이 전송되는지 여부를 제어해요.
파라미터가 TRUE로 설정되고 그리고 객체의 데이터베이스에 대해 알림이 켜져 있으면 알림이 전송돼요. 데이터베이스의 다른 연결에 대해 알림이 전송되더라도 이 객체-DMF 연결에 대한 알림을 끄려면 FALSE를 지정해요.
알림 구성에 대한 자세한 내용은 Sending notifications for data quality issues을 참고하세요.
기본값: TRUE
데이터 거버넌스 정책 및 태그 작업 (dataGovnPolicyTagAction)
TAG tag_name = 'tag_value' [ , tag_name = 'tag_value' , ... ]
태그(tag) 이름과 태그 문자열 값을 지정해요.
태그 값은 항상 문자열이고 태그 값의 최대 문자 수는 256이에요.
문에서 태그를 지정하는 방법에 대한 정보는 Tag quotas를 참고하세요.
policy_name
정책의 식별자예요. 스키마 내에서 고유해야 해요.
다음 절은 행 접근 정책을 지원하는 모든 테이블 종류(테이블, 뷰, 이벤트 테이블 등에 국한되지 않음)에 적용돼요. 간단히 하기 위해 절은 "테이블"만 언급해요.
ADD ROW ACCESS POLICY policy_name ON (col_name [ , ... ])
테이블에 행 접근 정책을 추가해요.
최소한 하나의 열 이름을 지정해야 해요. 추가 열은 각 열 이름을 쉼표로 구분해 지정할 수 있어요. 이 표현식을 사용해 이벤트 테이블과 외부 테이블 모두에 행 접근 정책을 추가해요.
DROP ROW ACCESS POLICY policy_name
테이블에서 행 접근 정책을 제거해요.
이 절을 사용해 테이블에서 정책을 제거해요.
DROP ROW ACCESS POLICY policy_name, ADD ROW ACCESS POLICY policy_name ON ( col_name [ , ... ] )
테이블에 설정된 행 접근 정책을 단일 SQL 문에서 같은 테이블에 행 접근 정책을 추가하면서 제거해요.
DROP ALL ROW ACCESS POLICIES
테이블에서 모든 행 접근 정책 연관을 제거해요.
이 표현식은 행 접근 정책이 이벤트 테이블에서 정책을 제거하기 전에 스키마에서 삭제될 때 유용해요. 이 표현식을 사용해 테이블에서 행 접근 정책 연관을 제거해요.
백업이 만들어질 때 테이블에 행 접근 정책이 적용되어 있었고 정책이 나중에 삭제되었다고 가정해요. 백업(backup)에서 테이블을 복원한 뒤에는 DROP ALL ROW ACCESS POLICIES 절이 있는 ALTER TABLE 명령을 실행할 때까지 테이블을 쿼리할 수 없어요.
SET AGGREGATION POLICY policy_name
[ ENTITY KEY (col_name [ , ... ]) ] [ FORCE ]
테이블에 집계 정책(aggregation policy)을 할당해요.
선택 ENTITY KEY 파라미터를 사용해 테이블 내에서 엔티티를 고유하게 식별하는 열을 정의해요. 자세한 내용은 Implementing entity-level privacy with aggregation policies를 참고하세요.
선택 FORCE 파라미터를 사용해 기존 집계 정책을 새 집계 정책으로 원자적으로 교체해요.
UNSET AGGREGATION POLICY
테이블에서 집계 정책을 분리해요.
SET JOIN POLICY policy_name
[ FORCE ]
테이블에 조인 정책(join policy)을 할당해요.
선택 FORCE 파라미터를 사용해 기존 조인 정책을 새 조인 정책으로 원자적으로 교체해요.
UNSET JOIN POLICY
테이블에서 조인 정책을 분리해요.
{ ALTER | MODIFY } [ COLUMN ] ...
USING ( col_name , cond_col_1 ... )
조건부 마스킹 정책 SQL 표현식에 전달할 인수를 지정해요.
목록의 첫 번째 열은 정책 조건이 데이터를 마스킹하거나 토큰화할 열을 지정하며, 마스킹 정책이 설정된 열과 일치해야 해요.
추가 열은 첫 번째 열에 대해 쿼리가 만들어질 때 쿼리 결과의 각 행에서 데이터를 마스킹하거나 토큰화할지 결정하기 위해 평가할 열을 지정해요.
USING 절을 생략하면 Snowflake는 조건부 마스킹 정책을 일반 마스킹 정책으로 취급해요.
FORCE
현재 열에 설정된 마스킹 또는 프로젝션 정책을 단일 문에서 다른 정책으로 교체해요.
마스킹 정책과 함께 FORCE 키워드를 사용하려면 ALTER TABLE 문의 정책 데이터 유형(즉 STRING)이 현재 열에 설정된 마스킹 정책의 데이터 유형(즉 STRING)과 일치해야 한다는 점에 유의하세요.
열에 현재 마스킹 정책이 설정되어 있지 않으면 이 키워드를 지정해도 효과가 없어요.
자세한 내용은 Replace a masking policy on a column 또는 Replace a projection policy를 참고하세요.
사용 참고사항: 일반
-
뷰 소유자(즉 뷰에 OWNERSHIP 권한이 있는 역할)가 대상 스키마도 소유하지 않는 한 관리 액세스 스키마로 뷰를 이동하는 것(ALTER VIEW … RENAME TO 구문 사용)은 금지돼요.
-
마스킹 정책에 관해:
-
USING절과FORCE키워드는 모두 선택사항이며, 열에 마스킹 정책을 설정하는 데 둘 다 필요하지 않아요.USING절과FORCE키워드는 따로 또는 함께 사용할 수 있어요. 자세한 내용은 다음을 참고하세요: -
조건부 열을 사용하는 단일 마스킹 정책은, 테이블의 열 구조가 정책에 지정된 열과 일치한다면 여러 테이블에 적용할 수 있어요.
-
마스킹 정책이 있는 테이블 열 하나 이상 또는 행 접근 정책이 있는 테이블 자체를 수정할 때는 POLICY_CONTEXT 함수를 사용해 마스킹 정책으로 보호된 열과 행 접근 정책으로 보호된 테이블에 대한 쿼리를 시뮬레이션해요.
-
-
조건부 열을 사용하는 단일 마스킹 정책은, 뷰의 열 구조가 정책에 지정된 열과 일치한다면 여러 뷰에 적용할 수 있어요.
-
행 접근 정책에 관해:
-
Snowflake는 단일 SQL 문에서 행 접근 정책의 추가와 제거를 지원해요.
예를 들어 이미 테이블에 설정된 행 접근 정책을 다른 정책으로 교체하려면 먼저 행 접근 정책을 제거하고 새 행 접근 정책을 추가해요.
-
주어진 리소스(테이블 또는 뷰)에 행 접근 정책을
ADD하거나DROP하려면 스키마에 대한 APPLY ROW ACCESS POLICY 권한이 있거나, 리소스에 대한 OWNERSHIP 권한과 행 접근 정책 리소스에 대한 APPLY 권한이 있어야 해요. -
테이블이나 뷰는 한 번에 하나의 행 접근 정책으로만 보호될 수 있어요. 정책 본문이 행 접근 정책으로 보호된 테이블이나 뷰 열, 또는 마스킹 정책으로 보호된 열을 참조하면 정책 추가가 실패해요.
마찬가지로 마스킹 정책 본문이 행 접근 정책이나 다른 마스킹 정책으로 보호된 테이블을 참조하면 테이블 열에 마스킹 정책을 추가하는 것이 실패해요.
-
행 접근 정책은 시스템 뷰나 테이블 함수에는 적용할 수 없어요.
-
다른 DROP 작업과 유사하게, 행 접근 정책이 추가되지 않은 리소스에서 행 접근 정책을 제거하려 하면 Snowflake가 오류를 반환해요.
-
객체에 행 접근 정책과 하나 이상의 마스킹 정책이 모두 있으면 행 접근 정책이 먼저 평가돼요.
-
-
메타데이터에 관해: 고객은 Snowflake 서비스를 사용할 때 메타데이터로 개인 데이터(User 객체 외), 민감 데이터, 수출 통제 데이터 또는 기타 규제 데이터를 입력하지 않도록 해야 해요. 자세한 내용은 Metadata fields in Snowflake를 참고하세요.
사용 참고사항: 데이터 메트릭 함수
테이블에 DMF 추가:
테이블에 데이터 메트릭 함수를 추가하기 전에 다음을 해야 해요:
-
데이터 메트릭 함수가 실행될 스케줄을 설정해요. 자세한 내용은 DATA_METRIC_SCHEDULE을 참고하세요.
-
데이터 메트릭 함수 호출 결과를 저장할 이벤트 테이블을 구성해요. 자세한 내용은 View results of a data metric function을 참고하세요.
-
테이블이나 뷰가 공유(share)에 부여되지 않았는지 확인해요. 공유된 테이블이나 뷰에는 데이터 메트릭 함수를 설정할 수 없기 때문이에요.
추가로:
-
열을 지정하면 Snowflake는 서수 위치를 사용해요. 테이블이나 뷰에 데이터 메트릭 함수를 추가한 뒤 열 이름을 바꾸면 데이터 메트릭 함수와 열 사이의 연결은 유효하게 유지돼요.
-
같은 종류의 데이터 메트릭 함수는 열에 하나만 추가할 수 있어요. 예를 들어 NULL_COUNT 데이터 메트릭 함수는 단일 열에 두 번 추가할 수 없어요.
-
데이터 메트릭 함수가 참조하는 열을 추가한 뒤 삭제하면 Snowflake는 데이터 메트릭 함수를 평가할 수 없어요.
-
가상 열(virtual column) 참조는 지원되지 않아요.
DMF 스케줄
스케줄이 설정되면 스케줄이 적용되는 데 10분이 걸려요.
마찬가지로 DMF가 설정 해제되면 스케줄 변경이 적용되는 데 10분이 걸려요. 자세한 내용은 Adjust the schedule for DMFs을 참고하세요.
예제 (Examples)
뷰 view1을 view2로 이름을 바꾸는 예제예요:
ALTER VIEW view1 RENAME TO view2;
뷰를 보안 뷰로 변환하는 예제예요:
ALTER VIEW view1 SET SECURE;
보안 뷰를 일반 뷰로 되돌리는 예제예요:
ALTER VIEW view1 UNSET SECURE;
뷰 열에 Column-level Security 마스킹 정책을 적용하는 예제예요:
-- single column
ALTER VIEW user_info_v MODIFY COLUMN ssn_number SET MASKING POLICY ssn_mask_v;
-- multiple columns
ALTER VIEW user_info_v MODIFY
COLUMN ssn_number SET MASKING POLICY ssn_mask_v,
COLUMN dob SET MASKING POLICY dob_mask_v
;
뷰 열에서 Column-level Security 마스킹 정책을 해제하는 예제예요:
-- single column
ALTER VIEW user_info_v MODIFY COLUMN ssn_number UNSET MASKING POLICY;
-- multiple columns
ALTER VIEW user_info_v MODIFY
COLUMN ssn_number UNSET MASKING POLICY,
COLUMN dob UNSET MASKING POLICY
;
다음 예제는 뷰에 행 접근 정책을 추가해요. 정책을 설정한 뒤 information schema를 확인해 참조된 객체를 검증할 수 있어요.
ALTER VIEW v1
ADD ROW ACCESS POLICY rap_v1 ON (empl_id);
다음 예제는 뷰에서 행 접근 정책을 제거해요. information schema를 쿼리해 정책이 제거되었는지 확인해요.
ALTER VIEW v1
DROP ROW ACCESS POLICY rap_v1;
다음 예제는 뷰에 대해 단일 SQL 문에서 행 접근 정책 추가와 제거를 결합하는 방법을 보여줘요. information schema를 확인해 결과를 검증해요.
ALTER VIEW v1
DROP ROW ACCESS POLICY rap_v1_version_1,
ADD ROW ACCESS POLICY rap_v1_version_2 ON (empl_id);
다음 예제는 뷰에 조인 정책(join policy)을 설정해요:
ALTER VIEW join_view
SET JOIN POLICY jp1;