집계 정책¶
집계 정책은 테이블이나 뷰의 데이터에 액세스할 수 있는 쿼리 유형을 제어하는 스키마 수준 오브젝트입니다. 집계 정책이 테이블에 적용되면 해당 테이블에 대한 쿼리는 결과를 반환하기 위해 데이터를 최소 크기의 그룹으로 집계해야 하므로 쿼리가 개별 레코드의 정보를 반환하지 못하게 됩니다. 집계 정책이 할당된 테이블이나 뷰를 집계 제한된 상태라고 합니다.
개요¶
Snowflake의 핵심 기능은 데이터 세트를 다른 엔터티와 공유하는 기능입니다. 집계 정책을 통해 공급자(데이터 소유자)는 데이터가 컨슈머와 공유된 후에도 데이터로 수행할 수 있는 작업에 대한 제어권을 실행할 수 있습니다. 특히 공급자는 테이블 컨슈머에게 개별 레코드를 검색하는 대신 데이터를 집계하도록 요구할 수 있습니다.
집계 정책을 생성할 때 공급자의 정책 관리자는 최소 그룹 크기(즉, 그룹으로 함께 집계해야 하는 행 수)를 지정합니다. 최소 그룹 크기가 클수록 컨슈머가 쿼리 결과를 사용하여 단일 레코드의 내용을 추론할 가능성이 줄어듭니다.
집계 정책이 테이블이나 뷰에 적용되면 이에 대한 쿼리는 다음 두 가지 요구 사항을 준수해야 합니다.
쿼리는 데이터를 집계해야 합니다. 쿼리에서 집계 함수를 사용하는 경우 해당 함수는 허용되는 집계 함수 중 하나여야 합니다.
쿼리로 생성된 각 그룹은 최소 X개 이상 레코드의 집계를 포함해야 하며, 여기서 X는 집계 정책의 최소 그룹 크기입니다.
쿼리가 정책의 최소 그룹 크기보다 적은 수의 레코드를 포함하는 그룹을 반환하는 경우 Snowflake는 해당 그룹을 나머지 그룹 으로 결합합니다. Snowflake는 알맞은 열에 집계 함수를 적용하여 나머지 그룹의 값을 반환합니다. 그러나 해당 값은 2개 이상의 그룹에 속한 행에서 계산되므로 GROUP BY 키 열의 값은 NULL입니다. 예를 들어 쿼리에 GROUP BY state
절이 포함된 경우 나머지 그룹에서 state
의 값은 NULL입니다.
나머지 그룹을 채울 만큼 충분한 결과를 반환하지 않는 쿼리도 여전히 작동하지만 결과의 모든 필드에 NULL 값을 반환합니다.
제한 사항¶
이 미리 보기의 경우 다음 사항이 적용됩니다.
쿼리가 명시적인 그룹화 구문을 사용하는 경우 GROUP BY 절이어야 합니다. 쿼리는 GROUP BY ROLLUP, GROUP BY CUBE 또는 GROUP BY GROUPING SETS 와 같은 관련 구문을 사용할 수 없습니다.
쿼리 중 하나가 집계 제한 테이블에서 작동하는 경우 대부분의 집합 연산자 는 허용되지 않습니다. 예외적으로 UNION ALL이 지원되지만 각 결과 그룹은 쿼리되는 집계 제한 테이블의 최소 그룹 크기를 충족해야 합니다(자세한 내용은 쿼리 요구 사항 참조).
집계 제한 테이블의 열이 프로젝션 정책 으로 보호되는 경우 해당 테이블에 대한 쿼리는 해당 열을 COUNT 함수의 인자로 사용할 수 없습니다.
집계 제한 테이블 또는 뷰에 대한 쿼리에서는 재귀적 CTE 가 허용되지 않습니다.
집계 제한 테이블 또는 뷰에 대한 쿼리에서는 윈도우 함수 가 허용되지 않습니다.
집계 제한 테이블에 대한 쿼리는 집계 정책의 요구 사항을 충족하는 쿼리 부분과의 사이에서 참조가 있는 경우 상관 하위 쿼리 또는 측면 조인 을 사용할 수 없습니다. 다음 예에서는 금지되는 쿼리 유형을 보여줍니다.
- 예 1
protected_table
이 집계 제한되어 있다고 가정하면 데이터를 집계하는 쿼리 부분이 하위 쿼리 외부에 있는 쿼리의 다른 부분을 참조하므로 다음 쿼리는 허용되지 않습니다.SELECT c1, c2 FROM open_table WHERE c1 = (SELECT x FROM protected_table WHERE y = open_table.c2);
- 예 2
protected_table
이 집계 제한되어 있다고 가정하면 하위 쿼리가 하위 쿼리 외부에 있는 데이터를 집계하는 쿼리 부분을 참조하므로 다음 쿼리는 허용되지 않습니다.SELECT SUM(SELECT COUNT(*) FROM open_table ot WHERE pt.id = ot.id) FROM protected_table pt;
고려 사항¶
민감한 데이터를 보호하기 위해 집계 정책을 사용할 때 다음 사항을 고려하십시오.
집계 정책은 엔터티가 아닌 개별 레코드의 데이터를 보호합니다. 데이터 세트에 동일한 엔터티에 속한 여러 레코드가 포함된 경우 집계 정책은 전체 엔터티가 아닌 해당 엔터티와 관련된 특정 레코드의 개인정보 보호만 보호합니다.
집계 정책은 개별 레코드에 대한 액세스를 제한하지만 악의적인 행위자가 집계 제한 테이블에서 잠재적으로 민감한 데이터를 얻기 위한 의도적인 쿼리를 사용할 수 없다고는 보장하지 않습니다. 쿼리 시도 횟수가 충분하면 악의적인 행위자가 집계 요구 사항을 우회하여 개별 행의 값을 확인할 가능성도 있습니다. 집계 정책은 기존 수준의 신뢰를 가진 파트너 및 고객과 함께 사용하는 데 가장 적합합니다. 또한 공급자는 데이터의 오용 가능성에 대해 경계해야 합니다(예: 목록에 대한 액세스 기록 검토).
집계 정책 만들기¶
집계 정책을 생성하는 구문은 다음과 같습니다.
CREATE [ OR REPLACE ] AGGREGATION POLICY <name> AS () RETURNS AGGREGATION_CONSTRAINT -> <body> [ COMMENT = '<string_literal>' ];
여기서
name
은 정책의 이름을 지정합니다.AS () RETURNS AGGREGATION_CONSTRAINT
는 정책의 서명 및 반환 유형입니다. 서명은 어떠한 인자도 허용하지 않으며 반환 유형은 내부 데이터 타입인 AGGREGATION_CONSTRAINT입니다. 모든 집계 정책의 서명 및 반환 유형은 동일합니다.body
집계 정책의 제한 사항을 결정하는 SQL 식입니다.
본문에서 내부 함수 호출하기¶
집계 정책의 본문은 두 가지 내부 함수인 NO_AGGREGATION_CONSTRAINT 및 AGGREGATION_CONSTRAINT 를 사용하여 정책의 제약 조건을 정의합니다. 본문의 조건이 이러한 함수 중 하나를 호출하는 경우 함수의 반환 값에 따라 결과를 반환하기 위해 집계 제한 테이블 또는 뷰에 대한 쿼리를 어떻게 공식화해야 하는지 결정됩니다.
- NO_AGGREGATION_CONSTRAINT
정책 본문이 이 함수에서 값을 반환하면 쿼리는 집계 제한 테이블이나 뷰에서 제한 없이 데이터를 반환할 수 있습니다. 예를 들어, 관리자가 집계 제한 테이블이나 뷰에서 집계되지 않은 결과를 얻어야 할 경우 정책 본문에서 이 함수를 호출할 수 있습니다.
인자 없이 NO_AGGREGATION_CONSTRAINT를 호출합니다.
- AGGREGATION_CONSTRAINT
정책 본문이 이 함수에서 값을 반환하면 쿼리는 데이터를 집계하여 결과를 반환해야 합니다. 각 집계 그룹에 포함해야 하는 레코드 수를 지정하려면 MIN_GROUP_SIZE 인자를 사용하십시오.
AGGREGATION_CONSTRAINT 함수의 구문은 다음과 같습니다.
AGGREGATION_CONSTRAINT ( MIN_GROUP_SIZE => <integer_expression> )
여기서
integer_expression
은 정책의 최소 그룹 크기 로 확인됩니다.함수에 대한 인자로
1
과0
을 전달하는 것은 차이가 있습니다. 둘 다 결과를 집계해야 합니다.또한
1
을 전달하려면 각 집계 그룹에 집계 제한 테이블의 레코드가 하나 이상 포함되어 있어야 합니다. 따라서 외부 조인의 경우 집계 제한 테이블의 레코드가 하나 이상 보호되지 않는 테이블의 레코드와 일치해야 합니다.0
을 전달하면 쿼리가 다른 테이블의 레코드로만 구성된 그룹을 반환할 수 있습니다. 따라서 집계 제한 테이블과 보호되지 않는 테이블 사이에서 외부 조인의 경우 그룹은 집계 제한 테이블의 어떤 레코드와도 일치하지 않는 보호되지 않는 테이블의 레코드로 구성될 수 있습니다.
참고
집계 정책의 본문은 사용자 정의 함수, 테이블 또는 뷰를 참조할 수 없습니다.
정책 예시¶
- 고정된 최소 그룹 크기
가장 간단한 집계 정책은 AGGREGATION_CONSTRAINT 함수를 직접 호출하고 테이블에 대한 모든 쿼리에 적용되는 일정한 최소 그룹 크기를 정의합니다. 예를 들어 다음 명령은 최소 그룹 크기가 5인 집계 정책을 만듭니다.
CREATE AGGREGATION POLICY my_agg_policy AS () RETURNS AGGREGATION_CONSTRAINT -> AGGREGATION_CONSTRAINT(MIN_GROUP_SIZE => 5);
- 조건부 정책
정책 관리자는 쿼리를 실행하는 사용자의 역할과 같은 요인에 따라 쿼리마다 다른 제한 사항이 있도록 집계 정책의 SQL 식을 정의할 수 있습니다. 이 전략을 사용하면 한 사용자는 제한 없이 테이블을 쿼리하고 다른 사용자는 결과를 집계하도록 요구할 수 있습니다.
예를 들어 다음 집계 정책에서는
ADMIN
역할을 가진 사용자에게 테이블에 대한 무제한적인 액세스 권한을 부여하는 동시에 다른 모든 쿼리에서는 데이터를 최소 5개 행의 그룹으로 집계하도록 요구합니다.CREATE AGGREGATION POLICY my_agg_policy AS () RETURNS AGGREGATION_CONSTRAINT -> CASE WHEN CURRENT_ROLE() = 'ADMIN' THEN NO_AGGREGATION_CONSTRAINT() ELSE AGGREGATION_CONSTRAINT(MIN_GROUP_SIZE => 5) END;
집계 정책 수정하기¶
ALTER AGGREGATION POLICY 명령을 사용하여 집계 정책의 최소 그룹 크기를 결정하는 SQL 식을 수정할 수 있습니다. 정책 이름을 바꾸거나 설명을 변경할 수도 있습니다.
집계 정책을 수정하기 전에 DESCRIBE AGGREGATION POLICY 명령 또는 GET_DDL 함수를 실행하여 정책의 현재 SQL 식을 검토할 수 있습니다. 최소 그룹 크기를 결정하는 SQL 식은 BODY
열에 나타납니다.
예를 들어, 다음 명령을 실행하여 모든 상황에서 2행의 최소 그룹 크기를 요구하도록 집계 정책 my_policy
의 SQL 식을 변경할 수 있습니다.
ALTER AGGREGATION POLICY my_policy SET BODY -> AGGREGATION_CONSTRAINT(MIN_GROUP_SIZE=>2);
집계 정책 할당하기¶
집계 정책이 일단 생성되면 하나 이상의 테이블이나 뷰에 정책을 적용하여 집계를 제한할 수 있습니다. 테이블이나 뷰에는 하나의 집계 정책만 연결할 수 있습니다.
기존 테이블이나 뷰에 집계 정책을 할당하려면 ALTER TABLE 또는 ALTER VIEW 명령의 SET AGGREGATION POLICY 절을 사용하십시오.
ALTER { TABLE | VIEW } <name> SET AGGREGATION POLICY <policy_name> [ FORCE ]
여기서
name
은 테이블 또는 뷰의 이름을 지정합니다.policy_name
은 집계 정책의 이름을 지정합니다.FORCE
는 명령이 이미 집계 정책이 할당된 테이블이나 뷰에 집계 정책을 할당할 수 있도록 하는 선택적 매개 변수입니다. 새 집계 정책은 기존 정책을 원자적으로 대체합니다.
예를 들어 my_agg_policy
정책을 t1
테이블에 할당하려면 다음을 실행하십시오.
ALTER TABLE t1 SET AGGREGATION POLICY my_agg_policy;
또한 CREATE TABLE 및 CREATE VIEW 명령의 WITH 절을 사용하여 생성 시 테이블이나 뷰에 집계 정책을 할당할 수도 있습니다. 예를 들어 my_agg_policy
정책을 새 테이블에 할당하려면 다음을 실행하십시오.
CREATE TABLE t1 WITH AGGREGATION POLICY my_agg_policy;
집계 정책 바꾸기¶
집계 정책을 바꾸는 권장 방법은 FORCE
매개 변수를 사용하여 기존 집계 정책을 분리하고 단일 명령으로 새 집계 정책을 할당하는 것입니다. 이를 통해 이전 정책을 원자적으로 바꾸어 보호에 공백이 생기지 않도록 할 수 있습니다.
예를 들어 이미 집계 제한이 있는 테이블에 새 집계 정책을 할당하려면 다음을 수행하십시오.
ALTER TABLE privacy SET AGGREGATION POLICY agg_policy_2 FORCE;
또한 하나의 문(… UNSET AGGREGATION POLICY)으로 테이블이나 뷰에서 집계 정책을 분리한 다음, 다른 문(… SET AGGREGATION POLICY <name>)으로 테이블이나 뷰에 새 정책을 설정할 수도 있습니다. 이 방법을 선택하면 한 정책을 분리하고 다른 정책을 할당하는 사이에 집계 정책으로 테이블이 보호되지 않습니다. 이 시간 동안 쿼리는 잠재적으로 민감한 데이터에 액세스할 수 있습니다.
집계 정책 분리하기¶
데이터를 집계할 필요성을 없애기 위해 테이블이나 뷰에서 집계 정책을 분리하려면 ALTER TABLE 또는 ALTER VIEW 명령의 UNSET AGGREGATION POLICY 절을 사용합니다. 테이블이나 뷰에는 둘 이상의 집계 정책을 연결할 수 없으므로 집계 정책의 이름이 필요하지 않습니다.
ALTER {TABLE | VIEW} <name> UNSET AGGREGATION POLICY
여기서
name
은 테이블 또는 뷰의 이름을 지정합니다.
예를 들어 v1
뷰에서 집계 정책을 분리하려면 다음을 실행하십시오.
ALTER VIEW v1 UNSET AGGREGATION POLICY;
집계 정책 모니터링하기¶
집계 정책 사용을 모니터링하는 방법을 결정하는 두 가지 일반적인 접근 방식을 생각해보면 도움이 될 수 있습니다.
집계 정책 검색하기¶
공유 SNOWFLAKE 데이터베이스의 Account Usage 스키마에서 AGGREGATION_POLICIES 뷰를 사용할 수 있습니다. 이 뷰는 Snowflake 계정의 모든 집계 정책에 대한 카탈로그 입니다. 예:
SELECT * FROM SNOWFLAKE.ACCOUNT_USAGE.AGGREGATION_POLICIES ORDER BY POLICY_NAME;
집계 정책 참조 식별하기¶
POLICY_REFERENCES Information Schema 테이블 함수는 집계 정책 참조를 식별할 수 있습니다. 다음과 같이 두 가지 다른 구문 옵션이 있습니다.
지정된 집계 정책이 설정된 각 오브젝트(즉, 테이블 또는 뷰)의 행을 반환합니다.
USE DATABASE my_db; USE SCHEMA information_schema; SELECT policy_name, policy_kind, ref_entity_name, ref_entity_domain, ref_column_name, ref_arg_column_names, policy_status FROM TABLE(information_schema.policy_references(policy_name => 'my_db.my_schema.aggpolicy'));
my_table
이라는 테이블에 할당된 각 정책에 대한 행을 반환합니다.USE DATABASE my_db; USE SCHEMA information_schema; SELECT policy_name, policy_kind, ref_entity_name, ref_entity_domain, ref_column_name, ref_arg_column_names, policy_status FROM TABLE(information_schema.policy_references(ref_entity_name => 'my_db.my_schema.my_table', ref_entity_domain => 'table'));
쿼리 요구 사항¶
집계 정책이 테이블이나 뷰에 적용된 후 해당 테이블이나 뷰에 대한 쿼리는 특정 요구 사항을 준수해야 합니다. 이 섹션에서는 집계 제한 테이블 또는 뷰에 대한 쿼리에서 허용되는 것과 허용되지 않는 것에 대해 설명합니다.
참고
쿼리의 일부가 집계 정책의 요구 사항을 충족하기 위해 데이터를 적절하게 집계하면 이러한 쿼리 제한 사항이 적용되지 않으며, 그렇지 않으면 금지되는 항목이 쿼리의 다른 부분에 포함될 수 있습니다.
예를 들어 다음 쿼리는 쿼리의 다른 부분이 protected_table
에 할당된 정책의 집계 요구 사항을 이미 충족했으므로 결과를 집계하지 않는 SELECT 문을 사용할 수 있습니다.
SELECT * FROM open_table ot WHERE ot.a > (SELECT SUM(id) FROM protected_table pt)
쿼리에 포함할 수 있는 내용에 대한 추가 제한 사항은 제한 사항 섹션을 참조하십시오.
- 집계 함수
집계 제한 테이블에 대한 쿼리에서는 다음 집계 함수가 허용됩니다.
쿼리에는 이처럼 허용된 집계 함수가 두 개 이상 포함될 수 있습니다. 허용되지 않는 집계 함수를 사용하려고 하면 쿼리가 실패합니다.
- 그룹화 문
집계 제한 테이블에 대한 쿼리는 데이터를 최소 크기의 그룹으로 집계해야 합니다. 이 쿼리는 명시적인 그룹화 문(즉, GROUP BY 절) 또는 전체 데이터 세트를 집계하는 스칼라 집계 함수(예:
COUNT(*)
)를 사용할 수 있습니다.- 필터
일반적으로, Snowflake는 필터로 선택된 행을 집계하는 한 쿼리가 WHERE 및 ON 절을 사용하여 집계 제한 테이블을 필터링하는 방법을 제한하지 않습니다.
- 조인
쿼리는 집계 제한 테이블을 다른 집계 제한 테이블을 포함한 다른 테이블과 조인할 수 있습니다.
Snowflake는 각 집계 그룹을 검사하여 집계 제한 테이블에서 가져온 행 수가 해당 테이블의 최소 그룹 크기를 충족하거나 초과하는지 확인합니다. 예를 들어, 최소 그룹 크기가 5인 집계 제한 테이블
table_a
가 최소 그룹 크기가 3인table_b
와 조인된 경우 최소한table_a
의 5개 행,table_b
의 3개 행을 사용하여 쿼리에서 반환된 각 그룹을 만들어야 합니다.조인을 사용한 쿼리가 집계 제한 테이블의 요구 사항을 충족하는지 여부는 그룹 크기가 아니라 테이블에서 가져온 행 수에 따라 결정됩니다. 결과적으로 조인된 데이터에서 생성된 그룹의 크기는 집계 제한 테이블의 최소 그룹 크기보다 클 수 있지만 여전히 데이터가 필터링됩니다. 예를 들어 다음과 같이 가정하겠습니다.
agg_t
는 최소 그룹 크기가 2로 제한된 집계입니다. 이 테이블에는 {1
,2
,2
}라는 내용이 있는 단일 정수 열c
가 포함되어 있습니다.open_t
는 제한이 없으며 {1
,1
,1
,2
}라는 내용이 있는 정수 열c
를 포함합니다.
사용자는 두 테이블을 조인하는 다음 쿼리를 실행합니다.
SELECT c, COUNT(*) FROM agg_t, open_t WHERE agg_t.c = open_t.c GROUP BY agg_t.c;
이 쿼리는 다음을 반환합니다.
+-----------------+ | c | COUNT(*) | |------+----------| | 2 | 2 | |------+----------| | null | 3 | +-----------------+
두 번째 그룹에 최소 그룹 크기보다 큰 3개의 레코드가 있더라도, 해당 레코드는 모두 집계 제한 테이블의 단일 레코드에 대응되므로 값이 필터링됩니다.
- UNION ALL
쿼리된 테이블 중 하나 이상에 집계 제한이 있는 경우에도 쿼리는 UNION ALL 을 사용하여 두 하위 쿼리의 결과를 결합할 수 있습니다. 조인과 마찬가지로, 결과의 각 그룹은 쿼리되는 모든 집계 제한 테이블의 최소 그룹 크기를 충족해야 합니다. 예를 들어 다음과 같이 가정하겠습니다.
테이블
protected_table1
의 최소 그룹 크기는 2입니다.테이블
protected_table2
의 최소 그룹 크기는 5입니다.
쿼리를 실행하는 경우:
SELECT a, COUNT(*) FROM ( SELECT a, b FROM protected_table1 UNION ALL SELECT a, b FROM protected_table2 ) GROUP BY a;
키
a
로 형성된 각 그룹은protected_table1
의 레코드 2개와protected_table2
의 레코드 5게를 포함해야 하며, 그렇지 않으면 레코드가 나머지 그룹에 배치됩니다.- 외부 함수
쿼리의 다른 부분이 집계 제한 테이블의 요구 사항을 충족하기 위해 결과를 적절하게 집계하지 않을 경우 쿼리는 외부 함수 를 호출할 수 없습니다.
- 로깅 및 메트릭
쿼리는 UDF 로깅 또는 메트릭을 통해 집계 제한 테이블의 열을 로깅할 수 없습니다.
- 데이터 타입 변환
SELECT 문에 데이터 타입 변환 함수가 포함된 쿼리는 함수의 TRY 버전을 사용해야 합니다. 예를 들어, TRY_CAST 함수는 허용되지만 CAST 함수는 금지됩니다. 숫자 타입에는 다음과 같은 데이터 타입 변환 함수가 허용됩니다.
- PIVOT
쿼리는 집계 제한 테이블의 열에 대해 PIVOT 연산자를 사용할 수 없습니다.
확장된 예¶
집계 정책을 만들고 테이블에 집계 정책을 할당하는 작업은 마스킹 및 프로젝션 정책 등 다른 정책을 만들고 할당하는 것과 동일한 일반 절차를 따릅니다.
중앙 집중식 관리 접근 방식을 사용하는 경우 정책을 관리하려면 사용자 지정 역할(예:
agg_policy_admin
)을 만드십시오. 또는 기존 역할을 사용할 수 있습니다.이 역할에 집계 정책을 만들고 할당할 수 있는 권한을 부여합니다.
집계 정책을 만듭니다.
테이블에 집계 정책을 할당합니다.
집계 정책이 테이블에 할당되면 테이블에 대한 성공적인 쿼리는 해당 데이터를 집계해야 합니다.
다음의 확장된 예에서는 사용자 지정 역할을 생성하는 공급자의 액세스 제어 관리자부터 집계된 결과를 반환하는 쿼리를 실행하는 데이터 컨슈머까지, 이 프로세스의 각 단계에 대한 인사이트를 제공합니다.
- 액세스 제어 관리자 작업
집계 정책을 관리하기 위한 사용자 지정 역할을 만듭니다. 기존 역할을 재사용할 수도 있습니다.
USE ROLE USERADMIN; CREATE ROLE AGG_POLICY_ADMIN;
agg_policy_admin
사용자 지정 역할에 스키마에서 집계 정책을 만들고 Snowflake 계정의 테이블 또는 뷰에 집계 정책을 할당할 수 있는 권한을 부여합니다.이 단계에서는 집계 정책이
privacy.agg_policies
라는 데이터베이스와 스키마에 저장되고 이 데이터베이스와 스키마가 이미 존재한다고 가정합니다.GRANT USAGE ON DATABASE privacy TO ROLE agg_policy_admin; GRANT USAGE ON SCHEMA privacy.agg_policies TO ROLE agg_policy_admin; GRANT CREATE AGGREGATION POLICY ON SCHEMA privacy.agg_policies TO ROLE agg_policy_admin; GRANT APPLY AGGREGATION POLICY ON ACCOUNT TO ROLE agg_policy_admin;
이제 한 명 이상의 사용자에게
agg_policy_admin
역할을 할당할 수 있습니다.집계 정책 작업에 필요한 권한에 대한 자세한 내용은 (이 항목의) 권한과 명령 섹션을 참조하십시오.
- 집계 정책 관리자 작업
집계를 요구하는 집계 정책을 만들고 최소 그룹 크기를 3으로 정의합니다.
USE ROLE agg_policy_admin; USE SCHEMA privacy.aggpolicies; CREATE AGGREGATION POLICY my_policy AS () RETURNS AGGREGATION_CONSTRAINT -> AGGREGATION_CONSTRAINT(MIN_GROUP_SIZE => 3);
테이블
t1
에 집계 정책을 할당합니다.ALTER TABLE t1 SET AGGREGATION POLICY my_policy;
- 컨슈머 쿼리
공급자가 집계 제한 테이블을 공유하면 데이터 컨슈머가 이에 대해 쿼리를 실행할 수 있습니다. 이 예에서는 집계 제한 테이블
t1
에 다음 행이 있다고 가정합니다.peak
상태
elevation
washington
NH
6288
cannon
NH
4080
kearsarge
NH
2937
mansfield
VT
4395
killington
VT
4229
wachusett
MA
2006
이제 컨슈머가
t1
에 대해 다음 쿼리를 실행한다고 가정합니다.SELECT state, AVG(elevation) AS avg_elevation FROM t1 GROUP BY state;
결과는 다음과 같습니다.
+----------+-----------------+ | STATE | AVG_ELEVATION | |----------+-----------------+ | NH | 4435 | | NULL | 3543 | +----------+-----------------+
두 번째 그룹의
state
값은VT
와MA
모두에서 봉우리 고도의 평균을 구하는 나머지 그룹이므로NULL
입니다.
Snowflake 기능을 사용한 집계 정책¶
다음 하위 섹션에서는 집계 정책이 다양한 Snowflake 기능 및 서비스와 상호 작용하는 방식을 간략하게 요약합니다.
기타 정책¶
이 섹션에서는 집계 정책이 마스킹 정책, 행 액세스 정책, 프로젝션 정책 을 비롯한 다른 정책과 상호 작용하는 방식을 설명합니다.
집계 제한 테이블에 다른 정책을 연결할 수 있습니다. 테이블에 대한 성공적인 쿼리는 모든 정책의 요구 사항을 충족해야 합니다.
집계 제한 테이블에 행 액세스 정책이 할당된 경우, 행 액세스 정책에 따라 쿼리 결과에서 제외된 행은 집계 결과 계산 시 포함되지 않습니다.
마스킹 정책, 행 액세스 정책 또는 프로젝션 정책의 본문은 해당 열을 포함하여 집계 제한 테이블을 참조할 수 없습니다. 마찬가지로, 다른 정책의 본문에는 집계 제한 테이블을 참조하는 UDF가 포함될 수 없습니다.
뷰 및 구체화된 뷰¶
뷰와 구체화된 뷰 모두에 집계 정책을 할당할 수 있습니다. 집계 정책이 뷰에 적용되면 기본 테이블은 집계 제한을 받지 않게 됩니다. 이 기본 테이블은 여전히 제한 없이 쿼리할 수 있습니다.
민감한 정보가 노출될 가능성을 방지하기 위해 집계 제한 뷰가 모두 보안 뷰 는 아니더라도 마치 보안 뷰인 것처럼 처리됩니다.
집계 제한 테이블에서 뷰를 생성할 수 있는지 여부는 뷰 유형에 따라 다릅니다.
하나 이상의 집계 제한 테이블에서 일반 뷰를 생성할 수 있지만, 해당 뷰에 대한 쿼리는 해당 기본 테이블의 제한 사항을 충족하는 방식으로 데이터를 집계해야 합니다.
집계 제한 테이블이나 뷰를 기반으로 구체화된 뷰를 생성할 수 없고, 구체화된 뷰의 기반이 되는 테이블이나 뷰에 집계 정책을 할당할 수도 없습니다.
복제된 오브젝트¶
다음 접근 방식은 복제된 데이터베이스 또는 스키마에 저장된 복제된 테이블 또는 뷰에 대한 SELECT 권한이 있는 사용자의 데이터를 보호하는 데 도움이 됩니다.
개별 집계 정책 오브젝트를 복제하는 기능은 지원되지 않습니다.
데이터베이스를 복제하면 데이터베이스 내의 모든 집계 정책이 복제됩니다.
스키마를 복제하면 스키마 내의 모든 집계 정책이 복제됩니다.
복제된 테이블은 원본 테이블과 동일한 집계 정책에 매핑됩니다.
테이블이 상위 스키마 복제 컨텍스트에서 복제되는 경우, 원본 테이블에 동일한 상위 스키마의 집계 정책에 대한 참조(즉, 로컬 참조)가 있으면 복제된 테이블도 복제된 집계 정책에 대한 참조를 갖습니다.
원본 테이블이 다른 스키마(즉, 외부 참조)의 집계 정책을 참조하는 경우 복제된 테이블에도 외부 참조가 유지합니다.
자세한 내용은 CREATE <오브젝트> … CLONE 섹션을 참조하십시오.
복제¶
집계 정책 및 해당 할당은 데이터베이스 복제 및 복제 그룹을 사용하여 복제할 수 있습니다.
데이터베이스 복제 의 경우, 다음 조건 중 하나가 참이면 복제 작업이 실패합니다.
기본 데이터베이스가 Enterprise 이상 계정에 있고 정책이 포함되어 있지만, 복제가 승인된 1개 이상의 계정이 하위 에디션에 있습니다.
기본 데이터베이스에 포함된 테이블 또는 뷰에 다른 데이터베이스의 집계 정책에 대한 허상 참조 가 있습니다.
복제 그룹 에서 여러 데이터베이스를 복제할 때 데이터베이스 복제에 대한 현수 참조 동작을 피할 수 있습니다.
권한과 명령¶
다음 하위 섹션에서는 집계 정책을 관리하는 데 도움이 되는 정보를 제공합니다.
집계 정책 권한¶
Snowflake는 집계 정책 오브젝트에 대해 다음 권한을 지원합니다.
스키마의 모든 오브젝트에 대해 작업하려면 상위 데이터베이스 및 스키마에 대한 USAGE 권한도 필요합니다.
권한 |
사용법 |
---|---|
APPLY |
테이블의 집계 정책에 대한 설정 및 설정 해제 작업을 활성화합니다. |
OWNERSHIP |
집계 정책에 대한 모든 제어권을 부여하는 집계 정책의 소유권을 이전합니다. 집계 정책의 대부분 속성을 변경하려면 필요합니다. |
자세한 내용은 이 항목의 DDL 명령, 작업 및 권한 요약 섹션을 참조하십시오.
집계 정책 DDL 참조¶
Snowflake는 집계 정책 생성과 관리를 위해 다음 DDL을 지원합니다.
DDL 명령, 작업 및 권한 요약¶
다음 테이블은 집계 정책 권한과 DDL 작업 사이의 관계를 요약하여 보여줍니다.
스키마의 모든 오브젝트에 대해 작업하려면 상위 데이터베이스 및 스키마에 대한 USAGE 권한도 필요합니다.
작업 |
필요한 권한 |
---|---|
집계 정책 만들기. |
동일한 스키마에서 CREATE AGGREGATION POLICY 권한이 있는 역할. |
집계 정책 변경. |
집계 정책에 대한 OWNERSHIP 권한이 있는 역할: |
집계 정책 설명 |
다음 중 하나:
|
집계 정책 삭제. |
집계 정책에 대한 OWNERSHIP 권한이 있는 역할. |
집계 정책 표시. |
다음 중 하나:
|
테이블에 대한 집계 정책 설정 또는 설정 해제. |
다음 중 하나:
|
Snowflake는 오브젝트에 대한 집계 정책을 만들고 설정할 수 있는 다양한 권한을 지원합니다.
aggregation_policy_admin
사용자 지정 역할이 모든 테이블에 대한 집계 정책을 만들고 설정하는 중앙 집중식 집계 정책 관리 접근 방식의 경우, 다음 권한이 필요합니다.USE ROLE securityadmin; GRANT USAGE ON DATABASE mydb TO ROLE agg_policy_admin; GRANT USAGE ON SCHEMA mydb.schema TO ROLE proj_policy_admin; GRANT CREATE AGGREGATION POLICY ON SCHEMA mydb.schema TO ROLE aggregation_policy_admin; GRANT APPLY ON AGGREGATION POLICY ON ACCOUNT TO ROLE aggregation_policy_admin;
하이브리드 관리 접근 방식에서는, 집계 정책이 일관되게 명명되고 개별 팀 또는 역할이 특정 집계 정책에 대한 APPLY 권한을 갖도록 보장하기 위해 단일 역할에 CREATE AGGREGATION POLICY 권한이 주어집니다.
예를 들어, 사용자 지정 역할
finance_role
이 소유한 테이블과 뷰에 집계 정책cost_center
를 설정할 권한을 이 역할에 부여할 수 있습니다(즉, 역할이 테이블 또는 뷰에 대해 OWNERSHIP 권한을 가짐).USE ROLE securityadmin; GRANT CREATE AGGREGATION POLICY ON SCHEMA mydb.schema TO ROLE aggregation_policy_admin; GRANT APPLY ON AGGREGATION POLICY cost_center TO ROLE finance_role;