CREATE JOIN POLICY
CREATE JOIN POLICY
현재/지정한 스키마에 새 조인 정책(join policy)을 만들거나 기존 조인 정책을 교체하는 명령이에요. 조인 정책은 쿼리가 데이터를 조회할 때 반드시 조인(join)을 사용하도록 강제할 수 있어요.
출처: 문서
본문
현재/지정한 스키마에 새 조인 정책을 만들거나 기존 조인 정책을 교체해요.
조인 정책을 만든 뒤에는 ALTER TABLE 명령으로 테이블에, 또는 ALTER VIEW 명령으로 뷰에 정책을 할당해요. 또는 테이블을 만들 때 조인 정책을 할당할 수도 있어요.
함께 보기: 조인 정책 DDL 참조 (Join policy DDL reference)
구문 (Syntax)
CREATE [ OR REPLACE ] JOIN POLICY [ IF NOT EXISTS ] <name>
AS () RETURNS JOIN_CONSTRAINT -> <body>
[ COMMENT = '<string_literal>' ]
매개변수 (Parameters)
name
조인 정책의 식별자로, 스키마 안에서 고유해야 해요.
또한 식별자는 반드시 알파벳 문자로 시작해야 하며, 전체 식별자 문자열이 큰따옴표로 묶이지 않는 한 공백이나 특수 문자를 포함할 수 없어요 (예: "My object"). 큰따옴표로 묶인 식별자는 대소문자를 구분해요.
자세한 내용은 식별자 요구 사항(Identifier requirements)을 참고해요.
AS () RETURNS JOIN_CONSTRAINT
정책의 시그니처와 반환 유형이에요. 시그니처는 인자를 받지 않고, 반환 유형은 내부 데이터 유형인 JOIN_CONSTRAINT예요. 모든 조인 정책은 동일한 시그니처와 반환 유형을 가져요.
body
조인 정책의 제한을 결정하는 SQL 표현식이에요.
조인 정책의 본문을 정의하려면 TRUE 또는 FALSE를 반환하는 JOIN_CONSTRAINT 함수를 호출해요. 함수가 TRUE를 반환하면 쿼리는 결과를 반환하기 위해 조인을 사용해야 해요.
JOIN_CONSTRAINT 함수의 구문은 다음과 같아요.
JOIN_CONSTRAINT (
{ JOIN_REQUIRED => <boolean_expression> }
)
여기서:
JOIN_REQUIRED => boolean_expression
조인 정책이 할당된 테이블이나 뷰에서 데이터를 선택할 때 쿼리에 조인이 필요한지 여부를 지정해요.
정책의 본문은 사용자 정의 함수·테이블·뷰를 참조할 수 없어요.
허용되는 조인 컬럼(join columns)은 정책이 적용되는 테이블이나 뷰의 CREATE 또는 ALTER 문에서 지정되며, CREATE JOIN POLICY 문에서는 지정하지 않아요.
COMMENT = 'string_literal'
조인 정책에 대한 설명(comment)을 추가하거나 기존 설명을 덮어써요.
접근 제어 요구 사항 (Access control requirements)
이 작업을 실행하는 데 사용하는 역할(role)은 최소한 다음 권한을 가져야 해요.
| 권한 (Privilege) | 객체 (Object) | 비고 |
|---|---|---|
| CREATE JOIN POLICY | Schema |
스키마 안의 객체를 작업하려면 상위 데이터베이스에 대한 권한이 최소 하나, 상위 스키마에 대한 권한이 최소 하나 필요해요.
지정된 권한 집합으로 사용자 지정 역할을 만드는 방법은 사용자 지정 역할 만들기(Creating custom roles)를 참고해요. 보호 가능한 객체에 대해 SQL 작업을 수행하기 위한 역할과 권한 부여의 일반적인 내용은 접근 제어 개요(Overview of Access Control)를 참고해요.
조인 정책 DDL과 권한에 대한 자세한 내용은 조인 정책 관리(Managing join policies)를 참고해요.
사용 메모 (Usage notes)
기존 조인 정책을 수정해야 하고 현재 정책의 본문을 확인해야 한다면 DESCRIBE JOIN POLICY 명령이나 GET_DDL 함수를 실행해요.
OR REPLACE와 IF NOT EXISTS 절은 서로 배타적이에요. 같은 문에서 둘 다 사용할 수 없어요.
CREATE OR REPLACE <object> 문은 원자적(atomic)으로 동작해요. 즉, 객체를 교체할 때 기존 객체는 삭제되고 새 객체는 단일 트랜잭션 안에서 생성돼요.
메타데이터에 관해서는 다음 사항에 주의해요.
⚠️ 주의: 고객은 Snowflake 서비스를 사용할 때 (User 객체를 제외하고) 개인 데이터·민감 데이터·수출 통제 데이터·기타 규제 데이터를 메타데이터로 입력하지 않도록 해야 해요. 자세한 내용은 Snowflake의 메타데이터 필드를 참고해요.
예시 (Examples)
(정책이 해당 쿼리에 나타나는 테이블과 뷰에 적용될 때) 쿼리에 조인을 포함하도록 요구하는 조인 정책을 만들어요.
CREATE JOIN POLICY jp1 AS ()
RETURNS JOIN_CONSTRAINT -> JOIN_CONSTRAINT(JOIN_REQUIRED => TRUE);
ACCOUNTADMIN 역할을 가진 사용자는 조인 없이 쿼리를 실행할 수 있게 하고, 다른 사용자는 조인 쿼리를 실행하도록 하는 조인 정책을 만들어요.
CREATE JOIN POLICY jp2 AS ()
RETURNS JOIN_CONSTRAINT ->
CASE
WHEN CURRENT_ROLE() = 'ACCOUNTADMIN'
THEN JOIN_CONSTRAINT(JOIN_REQUIRED => FALSE)
ELSE JOIN_CONSTRAINT(JOIN_REQUIRED => TRUE)
END;
더 알아보기 (Learn more)
- 조인 정책 DDL 참조 — 조인 정책 관련 DDL 문서
- 조인 정책 관리 — 정책 할당 및 권한