차등 프라이버시로 보호된 데이터 쿼리하기

차등 프라이버시로 보호된 데이터 쿼리하기

이 주제는 분석가가 차등 프라이버시로 보호된 데이터(즉 프라이버시 보호 테이블과 뷰)에 대해 쿼리를 실행하고, 쿼리가 반환한 결과를 이해하고 조정하는 것을 돕기 위한 것이에요.

출처: Snowflake User Guide - Querying privacy-protected data

본문

프라이버시 보호 테이블에 대해 쿼리를 실행하려면 사용자는 그 테이블에 대한 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 } OUTER
    • NATURAL 조인의 양쪽은 같은 쿼리 패턴이어야 해요. 예를 들어 양쪽 모두 식별자이거나 양쪽 모두 서브쿼리여야 해요. 식별자와 서브쿼리를 조인하는 것은 현재 지원되지 않아요.
  • 조인에서 엔터티 키 사용: 엔터티 수준 프라이버시로 보호된 테이블로 작업할 때, 특히 의미상 쿼리를 바꾸지 않는다면 조인 키의 일부로 엔터티 키 컬럼을 포함해 노이즈 양을 최소화할 수 있어요. 예를 들어 엔터티가 고객(customers)인 다음 테이블을 고려해요: customers(각 행이 고객이고 customer_id를 가진 고객 디렉터리), transactions(각 고객이 여러 트랜잭션을 가질 수 있는 고객 트랜잭션), transaction_lines(트랜잭션에서 구매한 고유 품목). 모범 사례를 따른다면 데이터 프로바이더가 각 테이블에 엔터티 키 customer_id가 있도록 데이터를 구조화했을 거예요. 이 데이터 스키마에서 각 트랜잭션 라인은 한 트랜잭션에만, 각 트랜잭션은 한 고객에만 속할 수 있어요.

쿼리 결과 이해하기

차등 프라이버시 쿼리 결과가 노이즈가 있다는 것을 이해하고, 노이즈 구간(noise interval)과 DP_INTERVAL_LOW/DP_INTERVAL_HIGH 메타데이터를 사용해 결과를 해석하는 방법을 다뤄요.

프라이버시 예산 사용 추적하기

쿼리를 실행할 때 얼마나 많은 프라이버시 예산이 소비되는지 이해하고 추적하는 방법을 다뤄요.

더 알아보기