웹 앱에서 SQL Query 템플릿 사용하기¶
클린룸에 SQL Query 템플릿을 포함하면 컨슈머는 자유 형식의 SQL을 작성하여 클린룸의 데이터를 쿼리할 수 있습니다. SQL Query 템플릿을 사용할 때 소비자 쿼리가 특정 요건을 충족해야 결과를 성공적으로 반환할 수 있습니다. 이러한 요구 사항은 데이터 공급자가 데이터 개인정보 보호 정책을 통해 테이블을 보호하는 방법에 따라 결정됩니다.
템플릿 정책¶
다음 정책은 SQL Query 템플릿에 적용되어 소비자가 데이터를 쿼리할 수 있는 방법을 제어합니다.
정책 |
설명 |
---|---|
프로젝션 정책 |
쿼리에서 열을 프로젝션할 수 있는지, 즉 SELECT 문에 열을 포함할 수 있는지 여부를 제어합니다. 클린룸에서 컨슈머는 프로젝션 정책으로 열을 투사할 수 없습니다. |
집계 정책 |
결과를 반환하려면 쿼리에서 데이터를 집계해야 합니다. SQL Query 템플릿으로 액세스하는 모든 테이블에는 집계 정책이 있습니다. 집계 정책은 각 집계 그룹에 최소한의 엔터티가 포함되어야 함을 요구하여 엔터티의 개인정보를 보호합니다. 엔터티는 열의 고유한 값으로 식별됩니다. 예를 들어, 클린룸에서는 집계 정책을 사용하여 테이블의 여러 엔터티를 보호할 수 있습니다. 예를 들어, 정책에서는 집계 그룹에 최소 5가구와 10명의 사용자가 포함되어야 하며, 가구와 사용자가 모두 오브젝트여야 한다고 요구할 수 있습니다. |
중요
생성 프로세스 2단계에서 클린룸에 추가되는 조인 정책은 SQL Query 템플릿을 사용할 때 조인을 제어하지 않습니다. 대신 클린룸은 조인 열로 선택된 각 열에 프로젝션 정책과 집계 정책을 적용합니다. SQL 쿼리는 Join Columns 드롭다운 목록으로 선택한 열뿐만 아니라 모든 열에 조인할 수 있습니다.
클린룸에 SQL Query 템플릿 추가¶
컨슈머가 SQL Query 템플릿을 사용하여 분석을 실행할 수 있도록 클린룸을 구성하는 일반적인 프로세스는 다음과 같습니다.
클린룸 생성 프로세스 를 시작합니다.
2단계에서 Join Columns 드롭다운 목록을 사용하여 집계 및 프로젝션 정책으로 보호할 열을 선택합니다. 선택한 내용은 조인 키로 사용할 수 있는 열에 아무런 영향을 미치지 않습니다.
3단계에서는 템플릿 목록에서 Horizontal » SQL Query 를 선택한 다음 SQL Query 템플릿을 구성 합니다.
공동 작업자와 클린룸을 공유합니다.
SQL Query 템플릿 구성¶
클린룸에 SQL Query 템플릿을 추가한 후 다음 작업을 수행하여 구성할 수 있습니다.
- 컨슈머가 SELECT 문에서 조인 열 사용 허용
Aggregation Policy Columns 드롭다운 목록을 사용하여 Join Policy 으로 레이블이 지정된 열의 이름을 선택합니다.
- 컨슈머의 SELECT 허용 및 조인되지 않은 열에 대한 필터링 허용
드롭다운 목록에서 Fully Permitted Columns 를 사용하여 열의 이름을 선택합니다.
- 추가 엔터티 정의
조인 정책이 있는 각 열은 테이블의 집계 정책으로 보호되는 엔터티를 식별합니다. 즉, 모든 집계 그룹에는 모든 조인 열에서 최소한 1개의 고유 값이 포함되어야 합니다.
추가 열을 식별 엔터티로 지정하여 각 집계 그룹에 해당 열의 고유한 값이 최소한 몇 개나 포함되도록 할 수 있습니다. 예를 들어,
HEM
이 조인 정책이라고 가정해 보겠습니다. 집계 정책의 기본 구성은 쿼리가HEM
열에서 일정량의 고유 값을 포함하는 그룹으로 데이터를 집계하도록 강제 적용합니다. 이제FIRST_NAME
열을 집계 정책 열로 추가한다고 가정해 보겠습니다. 이제 각 집계 그룹에는HEM
열의 고유 값에 대한 특정 수 및FIRST_NAME
열의 고유 값에 대한 특정 수가 포함되어야 합니다.엔터티를 식별하는 열을 추가하려면 Aggregation Policy Columns 드롭다운 목록을 사용하여 열의 이름을 선택합니다.
참고
열이 엔터티를 식별한다는 것을 지정하면 컨슈머가 해당 열을 필터링하고 예측할 수도 있습니다.
- 최소 엔터티 수 변경
열이 엔터티를 식별하는 경우 각 집계 그룹에는 열의 고유 값이 몇 개나 포함되어야 합니다. 엔터티의 고유 값 수를 조정하려면:
Privacy Settings » Aggregation Policies 섹션을 찾습니다.
열을 찾은 다음 Threshold 를 늘리거나 줄입니다. 임계값이 높을수록 각 집계 그룹에서 반환해야 하는 고유 값이 많아지며, 이를 통해 엔터티의 개인정보 보호가 강화됩니다.
SQL Query 템플릿을 사용하여 분석 실행하기¶
SQL Query 템플릿을 사용하여 분석 실행하기
어떤 열을 조인할 수 있나요?¶
어느 열에나 조인할 수 있습니다.
집계 요구 사항¶
SQL Query 템플릿을 사용하는 클린룸의 모든 테이블에는 집계 정책이 있습니다. 따라서 SQL Query 템플릿을 사용하여 실행되는 모든 쿼리는 집계된 결과를 반환해야 합니다.
집계 정책으로 보호되는 데이터에 대한 성공적인 쿼리를 작성하는 방법에 대한 지침은 다음을 참조하십시오.
집계 정책에 대한 쿼리 요구 사항. 예를 들어, 이 섹션을 사용하여 MIN 및 MAX 집계 함수가 쿼리 요구 사항을 충족하지 않으므로 사용할 수 없는지 확인할 수 있습니다.
어떤 열을 프로젝션할 수 있나요?¶
SQL Query 템플릿을 사용하여 실행되는 쿼리에는 프로젝션할 수 있는 열에 제한이 있습니다(SELECT 문에 사용됨).
쿼리가 열을 프로젝션할 수 있는지 확인하려면:
Query Configurations 섹션에서 Tables 타일을 찾습니다.
드롭다운 목록을 사용하여 테이블을 선택합니다.
프로젝션 정책 레이블이 있는 열을 찾습니다. 프로젝션 정책이 있는 열을 제외한 나열된 모든 열을 프로젝션할 수 있습니다.
어떤 열을 필터링할 수 있나요?¶
쿼리에서 필터링할 수 있는 열을 확인하려면 다음을 수행합니다.
Query Configurations 섹션에서 Tables 타일을 찾습니다.
드롭다운 목록을 사용하여 테이블을 선택하고 열을 검토합니다. 나열된 모든 열에 대해 필터링할 수 있습니다.
결과 표시¶
웹 앱에서 쿼리를 실행하려면 Run 을 선택한 다음 선택적으로 쿼리 실행의 이름을 지정하고 예약합니다. Analyses and Queries 목록에서 쿼리 상태를 확인하여 쿼리가 완료된 시점을 확인합니다. 완료된 쿼리를 선택하면 결과를 볼 수 있습니다. 성공적인 쿼리는 결과 테이블을 표시합니다. 결과 테이블이 다음에 자세히 설명된 특정 요구 사항을 복제하는 경우 결과를 그래프로 표시할 수도 있습니다. Snowflake는 막대 그래프, 선 그래프, 원형 그래프 등 여러 가지 그래프 유형을 제공합니다. 결과 섹션에서 적절한 버튼을 선택하여 출력 형식을 선택합니다.
그래프 작성 요구 사항¶
Snowflake가 그래프를 생성하려면 다음이 필요합니다.
결과 테이블에는 최소한 1개의 측정값(숫자) 열과 1개의 차원(카테고리) 열이 포함되어야 합니다.
측정값 열 이름에는 다음 접두사 또는 접미사가 있어야 합니다(대/소문자 구분 안 함).
열 이름 접두사:
COUNT
SUM
AVG
MIN
MAX
OUTPUT
OVERLAP
열 이름 접미사:
_OVERLAP
Snowflake는 결과 테이블에서 첫 번째 적격 측정값 열과 첫 번째 차원 열을 사용하여 차트를 생성합니다.
제한 사항¶
ORDER BY 절은 분석 결과가 표시되는 방식에 영향을 미치지 않습니다.
샘플 쿼리¶
이 섹션을 사용하여 SQL Query 템플릿으로 분석을 실행할 때 쿼리에 포함할 수 있는 항목과 포함할 수 없는 항목을 더 잘 이해할 수 있습니다.
- 집계 함수가 없는 쿼리
어떤 경우에는 집계 함수를 사용하지 않고도 값을 반환할 수 있습니다.
허용됨
허용되지 않음
SELECT gender, regions FROM TABLE sample_db.demo.customer GROUP BY gender, region;
SELECT gender, regions FROM TABLE sample_db.demo.customer;
- 일반 테이블 식(CTEs)
허용됨
허용되지 않음
WITH audience AS (SELECT COUNT(DISTINCT t1.hashed_email), t1.status FROM provider_db.overlap.customers t1 JOIN consumer_db.overlap.customers t2 ON t1.hashed_email = t2.hashed_email GROUP BY t1.status); SELECT * FROM audience;
WITH audience AS (SELECT t1.hashed_email, t1.status FROM provider_db.overlap.customers quoted t1 JOIN consumer_db.overlap.customers t2 ON t1.hashed_email = t2.hashed_email GROUP BY t1.status) SELECT * FROM audience
- CREATE, ALTER, TRUNCATE
쿼리에서는 CREATE, ALTER 또는 TRUNCATE를 사용할 수 없습니다.
- 조인을 사용한 쿼리
허용됨
SELECT p.education_level, c.status, AVG(p.days_active), COUNT(DISTINCT p.age_band) FROM sample_database_preprod.demo.customers c INNER JOIN sample_database_preprod.demo.customers p ON c.hashed_email = p.hashed_email GROUP BY ALL;
- DATE_TRUNC
허용됨
SELECT COUNT(*), DATE_TRUNC('week', date_joined) AS week FROM consumer_sample_database.audience_overlap.customers GROUP BY week;
- 따옴표가 있는 식별자
허용됨
SELECT COUNT(DISTINCT t1.”hashed_email”) FROM provider_sample_database.audience_overlap."customers quoted" t1 INNER JOIN consumer_sample_database.audience_overlap.customers t2 ON t1."hashed_email" = t2.hashed_email;