차등 프라이버시로 보호된 데이터 쿼리하기
차등 프라이버시로 보호된 데이터 쿼리하기
이 주제는 분석가가 차등 프라이버시로 보호된 데이터(즉 프라이버시 보호 테이블과 뷰)에 대해 쿼리를 실행하고, 쿼리가 반환한 결과를 이해하고 조정하는 것을 돕기 위한 것이에요.
본문
프라이버시 보호 테이블에 대해 쿼리를 실행하려면 사용자는 그 테이블에 대한 SELECT 권한이 있어야 해요.
제한 사항:
- 차등 프라이버시는 Snowflake 데이터 타입, 연산자, 쿼리 문법, 함수의 부분집합을 지원해요. 쿼리에서 사용할 수 있는 지원 SQL 목록은 차등 프라이버시 SQL 레퍼런스를 참고해요.
- 프라이버시 보호 테이블에 대한 쿼리는 Snowflake가 얼마나 많은 노이즈를 추가할지 결정하기 위해 추가 계산을 실행해야 하므로 더 오래 걸려요. 기본 쿼리의 경우 이 지연 시간은 최소 7초예요. 다음 같은 복잡한 쿼리는 훨씬 더 오래 걸릴 수 있어요.
- 조인과 서브쿼리가 많은 쿼리
- 수백 또는 수천 개의 그룹을 만드는 GROUP BY 절을 사용하는 것처럼 결과에 여러 행을 출력하는 쿼리
프라이버시로 보호된 테이블에서 최외곽 SELECT 절의 필드에는 집계, GROUP BY, 또는 DP_INTERVAL_LOW/HIGH만 적용할 수 있어요. 수학이나 연결(concatenation) 같은 다른 작업은 허용되지 않아요. 예시:
SELECT key, COUNT(*) AS 'c', DP_INTERVAL_LOW('c') FROM T GROUP BY key— 성공SELECT key, 1 + COUNT(*) AS 'c', DP_INTERVAL_LOW('c') FROM T GROUP BY key— 실패 (최외곽 SELECT 절의 필드에1 + COUNT(*)를 지정)SELECT key, COUNT(1 + x) AS 'cnt', DP_INTERVAL_LOW('cnt') FROM T GROUP BY key— 성공 (허용된 집계인 COUNT가 최외곽 SELECT 절에서1 + x뒤에 일어남)SELECT key, COUNT(x) AS 'c', DP_INTERVAL_LOW('c') FROM (SELECT key, 1 + income AS x FROM table) GROUP BY key— 성공 (중첩 SELECT 절에서 허용됨)
쿼리 기본 사항
이 섹션은 프라이버시 보호 테이블에 대해 실행할 때 성공할 쿼리의 기본 구성 요소를 다뤄요.
- 데이터 집계
- 조인 사용
- 엔터티 수준 프라이버시로 보호된 데이터 쿼리
데이터 집계:
프라이버시 보호 테이블에 대한 모든 쿼리는 개별 레코드를 검색하는 대신 결과를 집계해야 해요. 최종 결과가 집계되는 한 쿼리의 모든 부분이 집계 함수를 사용할 필요는 없어요. COUNT 함수를 제외하고, 컬럼에 프라이버시 도메인이 없으면 컬럼을 집계할 수 없어요. 지원되는 집계 목록은 함수 섹션을 참고해요.
조인 사용:
차등 프라이버시 쿼리에서 조인 사용에 대한 지침:
- 조인 연산자: 각 조인은 단일 연산자를 사용하는 등가 조인(equi join)이어야 해요. 예를 들어
t1.c1 == t2.c1은 지원되지만,col1 > col2와col1 + 10 = col2는 지원되지 않아요. 조건 없는 조인은 지원되지 않아요. 조인은JOIN연산자를 사용해야 해요. 조인을 위한 WHERE 문법은 지원되지 않아요. - 지원되는 조인: 차등 프라이버시 쿼리의 조인은 다음 중 하나여야 해요.
INNER{ LEFT | RIGHT | FULL } OUTERNATURAL조인의 양쪽은 같은 쿼리 패턴이어야 해요. 예를 들어 양쪽 모두 식별자이거나 양쪽 모두 서브쿼리여야 해요. 식별자와 서브쿼리를 조인하는 것은 현재 지원되지 않아요.
- 조인에서 엔터티 키 사용: 엔터티 수준 프라이버시로 보호된 테이블로 작업할 때, 특히 의미상 쿼리를 바꾸지 않는다면 조인 키의 일부로 엔터티 키 컬럼을 포함해 노이즈 양을 최소화할 수 있어요. 예를 들어 엔터티가 고객(customers)인 다음 테이블을 고려해요:
customers(각 행이 고객이고customer_id를 가진 고객 디렉터리),transactions(각 고객이 여러 트랜잭션을 가질 수 있는 고객 트랜잭션),transaction_lines(트랜잭션에서 구매한 고유 품목). 모범 사례를 따른다면 데이터 프로바이더가 각 테이블에 엔터티 키customer_id가 있도록 데이터를 구조화했을 거예요. 이 데이터 스키마에서 각 트랜잭션 라인은 한 트랜잭션에만, 각 트랜잭션은 한 고객에만 속할 수 있어요.
쿼리 결과 이해하기
차등 프라이버시 쿼리 결과가 노이즈가 있다는 것을 이해하고, 노이즈 구간(noise interval)과 DP_INTERVAL_LOW/DP_INTERVAL_HIGH 메타데이터를 사용해 결과를 해석하는 방법을 다뤄요.
프라이버시 예산 사용 추적하기
쿼리를 실행할 때 얼마나 많은 프라이버시 예산이 소비되는지 이해하고 추적하는 방법을 다뤄요.