쿼리 템플릿 사용
BigQuery 데이터 클린룸 쿼리 템플릿은 통찰력을 얻는 시간을 단축하고 데이터 유출 우려를 최소화하기 위한 추가 보안 및 제어 계층을 제공합니다. 데이터 클린룸에서 실행할 수 있는 쿼리를 미리 정의하고 제한하면 다음 작업을 할 수 있습니다.
민감한 정보의 유출 방지 클린룸에서 쿼리를 실행하는 구독자에게 탐색의 유연성이 더 많이 부여되면 데이터 소유자는 민감한 정보가 실수로 또는 의도적으로 노출될 위험이 더 높다고 생각합니다.
기술에 능숙하지 않은 사용자의 온보딩 및 채택 간소화 많은 데이터 제공업체는 클린룸 구독자가 특히 개인 정보 보호 중심 SQL 쿼리를 작성하고 개인 정보 보호 예산을 적절하게 할당하는 방법을 이해하는 데 있어 기술적 숙련도가 낮을 것으로 예상합니다.
데이터 구독자의 일관된 분석 결과 보장 데이터 클린룸에서 실행되는 쿼리를 제어할 방법이 없으면 특정 데이터 분석 규칙을 적용하고 개인 정보 보호 규정 준수를 확인하기가 더 어려워집니다.
쿼리 템플릿을 사용하면 데이터 소유자와 참여자가 데이터 클린룸의 사용 사례에 맞게 특별히 맞춤설정되고 승인된 쿼리를 만들고 구독자가 사용할 수 있도록 이러한 쿼리를 게시할 수 있습니다. 사전 정의된 쿼리는 BigQuery에서 테이블 값 함수 (TVF)를 사용하여 전체 테이블 또는 특정 필드를 입력 매개변수로 전달하고 테이블을 출력으로 반환할 수 있습니다.
제한사항
- 쿼리 템플릿은 최대 2개의 데이터 참조만 지원합니다. 즉, TVF의 쿼리를 정의하는 데 사용되는 데이터와 TVF에서 허용하는 데이터 매개변수 입력입니다.
- TVF의 쿼리 정의 내에서 여러 테이블 또는 뷰를 참조할 수 있지만 모두 동일한 데이터 소유자 또는 당사자에 속해야 합니다.
- 쿼리 템플릿 TVF는
TABLE
및VIEW
고정 유형만 지원합니다. - 쿼리 템플릿 정의에는 TVF와 동일한 제한사항이 적용됩니다.
시작하기 전에
다음 단계에 따라 Google Cloud 프로젝트에 Analytics Hub API를 사용 설정합니다.
콘솔
Analytics Hub API 페이지로 이동합니다.
Google Cloud 콘솔 툴바에서 프로젝트를 선택합니다.
API가 아직 사용 설정되지 않은 경우 사용 설정을 클릭합니다.
bq
gcloud services enable
명령어를 실행합니다.
gcloud services enable analyticshub.googleapis.com
필요한 역할
이 문서의 태스크를 수행하는 데 필요한 권한을 얻으려면 관리자에게 다음의 IAM 역할을 부여해 달라고 요청하세요.
-
데이터 클린룸에서 TVF를 만들거나 삭제합니다.
-
프로젝트에 대한 Analytics Hub 게시자 (
roles/analyticshub.publisher
) -
프로젝트에 대한 Analytics Hub 구독자 (
roles/analyticshub.subscriber
)
-
프로젝트에 대한 Analytics Hub 게시자 (
-
TVF 승인: 프로젝트에 대한 BigQuery 데이터 소유자 (
roles/bigquery.dataOwner
) -
데이터 클린룸에서 TVF 목록 추가, 업데이트 또는 삭제:
-
프로젝트에 대한 Analytics Hub 게시자 (
roles/analyticshub.publisher
) -
프로젝트에 대한 Analytics Hub 구독자 (
roles/analyticshub.subscriber
)
-
프로젝트에 대한 Analytics Hub 게시자 (
-
쿼리 템플릿을 만듭니다.
-
프로젝트에 대한 Analytics Hub 게시자 (
roles/analyticshub.publisher
) -
프로젝트에 대한 Analytics Hub 구독자 (
roles/analyticshub.subscriber
)
-
프로젝트에 대한 Analytics Hub 게시자 (
-
쿼리 템플릿 승인:
-
프로젝트에 대한 Analytics Hub 게시자 (
roles/analyticshub.publisher
) -
프로젝트에 대한 BigQuery 데이터 소유자 (
roles/bigquery.dataOwner
)
-
프로젝트에 대한 Analytics Hub 게시자 (
-
쿼리 템플릿으로 데이터 클린룸을 구독합니다.
-
프로젝트에 대한 Analytics Hub 구독자 (
roles/analyticshub.subscriber
) -
데이터 클린룸을 구독하려는 프로젝트에 대한 Analytics Hub 구독 소유자 (
roles/analyticshub.subscriptionOwner
)
-
프로젝트에 대한 Analytics Hub 구독자 (
-
쿼리 템플릿에 정의된 쿼리를 실행합니다.
-
프로젝트에 대한 BigQuery 데이터 뷰어(
roles/bigquery.dataViewer
) -
프로젝트에 대한 BigQuery 사용자(
roles/bigquery.user
)
-
프로젝트에 대한 BigQuery 데이터 뷰어(
역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.
이러한 사전 정의된 역할에는 이 문서의 작업을 수행하는 데 필요한 권한이 포함되어 있습니다. 필요한 정확한 권한을 보려면 필수 권한 섹션을 펼치세요.
필수 권한
이 문서의 태스크를 수행하려면 다음 권한이 필요합니다.
-
데이터 클린룸에서 TVF를 만들거나 삭제합니다.
- 프로젝트에 대한
bigquery.routines.create
권한 - 프로젝트에 대한
bigquery.routines.update
권한 - 프로젝트에 대한
bigquery.routines.delete
권한
- 프로젝트에 대한
-
TVF 승인:
루틴이 액세스하는 데이터 세트에 대한
bigquery.datasets.update
-
쿼리 템플릿을 만듭니다.
- 프로젝트에 대한
analyticshub.listings.subscribe
권한 - 프로젝트에 대한
analyticshub.queryTemplates.create
권한
- 프로젝트에 대한
-
쿼리 템플릿 승인:
- 프로젝트에 대한
bigquery.routines.create
권한 -
루틴이 액세스하는 데이터 세트에 대한
bigquery.datasets.update
권한 - 프로젝트에 대한
analyticshub.listings.create
권한 - 프로젝트에 대한
analyticshub.queryTemplates.approve
권한
- 프로젝트에 대한
커스텀 역할이나 다른 사전 정의된 역할을 사용하여 이 권한을 부여받을 수도 있습니다.
기존 TVF를 데이터 클린룸에 추가
Analytics Hub API를 사용하여 기존 TVF를 데이터 클린룸에 추가할 수 있습니다.
projects.locations.dataExchanges.listings.create
메서드를 사용합니다.
다음 예시는 curl
명령어를 사용하여 projects.locations.dataExchanges.listings.create
메서드를 호출하는 방법을 보여줍니다.
curl -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" -H 'x-goog-user-project:DCR_PROJECT_ID' -X POST https://analyticshub.googleapis.com/v1/projects/DCR_PROJECT_ID/locations/LOCATION/dataExchanges/CLEAN_ROOM_ID/listings?listingId=LISTING_ID -d '{"bigqueryDataset":{"dataset":"projects/PROJECT_ID/datasets/DATASET_ID","selectedResources":[{"routine":"projects/PROJECT_ID/datasets/DATASET_ID/tables/ROUTINE_ID"}],},"displayName":LISTING_NAME"}'
다음을 바꿉니다.
DCR_PROJECT_ID
: 데이터 클린룸이 생성된 프로젝트의 프로젝트 ID입니다.PROJECT_ID
: 소스 데이터 세트가 포함된 프로젝트의 프로젝트 ID입니다.DATASET_ID
: 소스 데이터 세트 ID입니다.LOCATION
: 데이터 클린룸의 위치입니다.CLEAN_ROOM_ID
: 데이터 클린룸 ID입니다.LISTING_ID
: 목록 IDLISTING_NAME
: 등록정보 이름ROUTINE_ID
: 루틴 ID
쿼리 템플릿 역할
데이터 클린룸 쿼리 템플릿을 사용하는 데는 세 가지 주요 역할이 있습니다. 각 역할에는 특정 워크플로가 있으며, 이는 이 문서의 뒷부분에서 설명합니다.
템플릿 작성자: 클린룸 내에서 실행할 쿼리를 정의하는 사용자입니다. 이 역할은 Analytics Hub 관리자, Analytics Hub 게시자 또는 Analytics Hub 목록 관리자 역할과 유사합니다. 자세한 내용은 템플릿 생성자 워크플로를 참고하세요.
템플릿 승인자: 템플릿을 사용하려면 쿼리 템플릿의 참조를 승인해야 하는 데이터 소유자입니다. 이 역할은 Analytics Hub 관리자, Analytics Hub 게시자 또는 Analytics Hub 목록 관리자 역할과 유사합니다. 자세한 내용은 템플릿 승인자 워크플로를 참고하세요.
템플릿 구독자: 클린룸을 구독하고 템플릿에서 승인된 쿼리만 실행할 수 있는 사용자입니다. 이 역할은 Analytics Hub 구독자 역할과 유사합니다. 자세한 내용은 템플릿 구독자 워크플로를 참고하세요.
템플릿 생성자 워크플로
쿼리 템플릿 생성자는 다음 작업을 할 수 있습니다.
데이터 클린룸에 목록 추가
쿼리 템플릿을 만들기 전에 데이터 클린룸에 데이터를 추가해야 합니다. 데이터 클린룸에서 목록을 만들려면 다음 단계를 따르세요.
Sharing(Analytics Hub) 페이지로 이동합니다.
쿼리 템플릿을 만들려는 데이터 클린룸의 표시 이름을 클릭합니다.
데이터 추가를 클릭하고 단계에 따라 분석 규칙이 구성된 뷰를 만듭니다. 자세한 내용은 등록정보 만들기 (데이터 추가)를 참고하세요.
- 다른 당사자의 데이터를 추가하려면 다른 신뢰할 수 있는 참여자와 데이터 클린룸을 공유하세요. 이 데이터 참여자는 쿼리 템플릿에서 사용할 수 있도록 클린룸에 데이터를 추가해야 합니다.
목록에 대한 데이터 이그레스 제어를 설정합니다.
등록정보의 메타데이터 제어를 설정합니다. 이전 단계에서 추가된 데이터의 스키마와 설명만 공유하고 공유 데이터 자체는 공유하지 않으려면 연결된 데이터 세트의 등록정보 액세스 제외를 선택합니다.
등록정보 세부정보를 검토합니다.
데이터 추가를 클릭합니다. 데이터에 대해 생성된 뷰의 메타데이터가 이제 클린룸에 추가됩니다.
쿼리 템플릿 만들기
다음 옵션 중 하나를 선택합니다.
콘솔
Sharing(Analytics Hub) 페이지로 이동합니다.
쿼리 템플릿을 만들려는 데이터 클린룸의 표시 이름을 클릭합니다.
데이터 클린룸에서 템플릿 탭으로 이동합니다.
템플릿 만들기를 클릭합니다.
템플릿 이름과 설명을 입력합니다.
다음을 클릭합니다.
클린룸에 추가된 뷰의 스키마를 확인할 수 있으며 쿼리 정의를 제안할 수 있습니다.
- 지원되는
CREATE TABLE FUNCTION
구문을 사용하여 쿼리를 정의해야 합니다. 고정된 정의가 있는 전체 테이블 또는 뷰를 전달합니다. 클린룸에 추가된 데이터에서 프로젝트 ID와 데이터 세트 ID를 포함한 전체 테이블 경로 참조를 정의해야 합니다. 예를 들면 다음과 같습니다.
query_template1(t1 TABLE<year INT64>) AS (SELECT * FROM `project_id.dataset_id.table_id` WHERE year = table_id.year)
데이터에 개인 정보 보호 분석 규칙을 적용한 경우 이 TVF에 개인 정보 보호 관련 SQL 구문(예:
SELECT WITH AGGREGATION_THRESHOLD
)이 포함되어 있는지 확인하세요.
- 지원되는
템플릿 세부정보를 검토합니다.
검토를 위해 제출하지 않고 템플릿을 저장하려면 저장을 클릭합니다. 이제 쿼리 템플릿의 상태가 DRAFT입니다.
쿼리 템플릿을 업데이트하거나 검토를 위해 쿼리 템플릿을 제출할 수 있습니다.
API
다음 예에서는 CURL
명령어를 사용하여 쿼리 템플릿을 만드는 방법을 보여줍니다.
curl -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" -H 'x-goog-user-project:DCR_PROJECT_ID' -X POST https://analyticshub.googleapis.com/v1/projects/DCR_PROJECT_ID/locations/LOCATION/dataExchanges/CLEAN_ROOM_ID/queryTemplates?queryTemplateId=QUERY_TEMPLATE_ID -d 'query_template { name: "query_template1", display_name: "query_template1", routine { definition_body: "QUERY_TEMPLATE_ID(TVF arguments) AS (TVF_DEFINITION)" } }'
다음을 바꿉니다.
DCR_PROJECT_ID
: 데이터 클린룸이 생성된 프로젝트의 프로젝트 ID입니다.LOCATION
: 데이터 클린룸의 위치입니다.CLEAN_ROOM_ID
: 데이터 클린룸 ID입니다.QUERY_TEMPLATE_ID
: 쿼리 템플릿 ID입니다.TVF_DEFINITION
: TVF 정의입니다.
다음 코드 샘플은 API 호출의 definition_body
예를 보여줍니다.
클린룸에 추가된 데이터에서 프로젝트 ID와 데이터 세트 ID를 포함한 전체 테이블 경로 참조를 정의해야 합니다.
query_template1(t1 TABLE<year INT64>) AS (SELECT * FROM `project_id.dataset_id.table_id` WHERE year = table_id.year)
definition_body
는 루틴 정의와 유사합니다. 앞의 definition_body
는 다음 루틴으로 변환됩니다.
CREATE OR REPLACE TABLE FUNCTION <approvers_dataset>.query_template1(t1 TABLE, y INT64)
AS (SELECT * FROM t1 WHERE year > y)
쿼리 템플릿을 업데이트하거나 검토를 위해 쿼리 템플릿을 제출할 수 있습니다.
쿼리 템플릿 업데이트
쿼리 템플릿은 DRAFT 상태인 경우에만 업데이트할 수 있습니다. 쿼리 템플릿이 이미 검토를 위해 제출된 경우 더 이상 수정할 수 없습니다.
쿼리 템플릿을 업데이트하려면 다음 옵션 중 하나를 선택합니다.
콘솔
Sharing(Analytics Hub) 페이지로 이동합니다.
쿼리 템플릿이 포함된 데이터 클린룸의 표시 이름을 클릭합니다.
데이터 클린룸에서 템플릿 탭으로 이동합니다.
업데이트할 템플릿의 행에서 작업 > 템플릿 수정을 클릭합니다.
필요에 따라 템플릿 세부정보와 쿼리 정의를 업데이트합니다.
다음을 클릭합니다.
쿼리 템플릿을 검토하고 저장을 클릭하여 템플릿을 검토용으로 제출하지 않고 변경사항을 저장합니다.
API
다음 예시는 CURL
명령어를 사용하여 쿼리 템플릿을 업데이트하는 방법을 보여줍니다.
curl -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" -H 'x-goog-user-project:DCR_PROJECT_ID' -X PATCH https://analyticshub.googleapis.com/v1/projects/DCR_PROJECT_ID/locations/LOCATION/dataExchanges/CLEAN_ROOM_ID/queryTemplates/QUERY_TEMPLATE_ID?updateMask=display_name -d 'query_template { display_name: "query_template1" }'
다음을 바꿉니다.
DCR_PROJECT_ID
: 데이터 클린룸이 생성된 프로젝트의 프로젝트 ID입니다.LOCATION
: 데이터 클린룸의 위치입니다.CLEAN_ROOM_ID
: 데이터 클린룸 ID입니다.QUERY_TEMPLATE_ID
: 쿼리 템플릿 ID입니다.
검토를 위해 쿼리 템플릿 제출
다음 옵션 중 하나를 선택합니다.
콘솔
Sharing(Analytics Hub) 페이지로 이동합니다.
쿼리 템플릿이 포함된 데이터 클린룸의 표시 이름을 클릭합니다.
데이터 클린룸에서 템플릿 탭으로 이동합니다.
검토를 위해 제출할 템플릿의 행에서 작업 > 검토를 위해 제출을 클릭합니다. 이제 템플릿의 상태가 검토 필요로 표시됩니다.
API
다음 예시는 CURL
명령어를 사용하여 검토를 위해 쿼리 템플릿을 제출하는 방법을 보여줍니다.
curl -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" -H 'x-goog-user-project:DCR_PROJECT_ID' -X POST https://analyticshub.googleapis.com/v1/projects/DCR_PROJECT_ID/locations/LOCATION/dataExchanges/CLEAN_ROOM_ID/queryTemplates/QUERY_TEMPLATE_ID:submit
다음을 바꿉니다.
DCR_PROJECT_ID
: 데이터 클린룸이 생성된 프로젝트의 프로젝트 ID입니다.LOCATION
: 데이터 클린룸의 위치입니다.CLEAN_ROOM_ID
: 데이터 클린룸 ID입니다.QUERY_TEMPLATE_ID
: 쿼리 템플릿 ID입니다.
쿼리 템플릿 삭제
쿼리 템플릿이 DRAFT 상태인 경우에만 삭제할 수 있습니다. 쿼리 템플릿이 이미 검토를 위해 제출된 경우 더 이상 삭제할 수 없습니다.
다음 옵션 중 하나를 선택합니다.
콘솔
Sharing(Analytics Hub) 페이지로 이동합니다.
쿼리 템플릿이 포함된 데이터 클린룸의 표시 이름을 클릭합니다.
데이터 클린룸에서 템플릿 탭으로 이동합니다.
삭제하려는 템플릿의 행에서 작업 > 템플릿 삭제를 클릭합니다.
API
다음 예는 CURL
명령어로 쿼리 템플릿을 삭제하는 방법을 보여줍니다.
curl -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" -H 'x-goog-user-project:DCR_PROJECT_ID' -X DELETE https://analyticshub.googleapis.com/v1/projects/DCR_PROJECT_ID/locations/LOCATION/dataExchanges/CLEAN_ROOM_ID/queryTemplates?queryTemplateId=QUERY_TEMPLATE_ID
다음을 바꿉니다.
DCR_PROJECT_ID
: 데이터 클린룸이 생성된 프로젝트의 프로젝트 ID입니다.LOCATION
: 데이터 클린룸의 위치입니다.CLEAN_ROOM_ID
: 데이터 클린룸 ID입니다.QUERY_TEMPLATE_ID
: 쿼리 템플릿 ID입니다.
템플릿 승인자 워크플로
쿼리 템플릿 승인자는 쿼리 템플릿을 승인할 수 있습니다.
TVF가 내가 소유하지 않은 데이터 (예: 다른 참여자의 데이터)를 참조하는 경우 쿼리 템플릿은 해당 데이터의 소유자만 승인할 수 있습니다. 데이터만 참조하는 TVF를 만드는 경우 (단방향 공유) 쿼리 템플릿을 직접 승인할 수 있습니다.
쿼리 템플릿 승인
다음 옵션 중 하나를 선택합니다.
콘솔
Sharing(Analytics Hub) 페이지로 이동합니다.
쿼리 템플릿이 포함된 데이터 클린룸의 표시 이름을 클릭합니다.
데이터 클린룸에서 템플릿 탭으로 이동합니다.
검토가 필요한 템플릿 행에서 승인 상태 > 검토 필요를 클릭합니다.
승인을 클릭합니다.
템플릿 위치를 선택합니다. 이 위치는 공유를 위해 TVF가 생성되는 위치입니다.
제안된 쿼리 템플릿을 검토합니다.
클린룸 내에서 사용할 수 있도록 쿼리 템플릿이 승인된 경우 승인을 클릭합니다.
API
jobserver.query
호출을 사용하여 쿼리 템플릿에서 루틴을 만듭니다.curl -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" -L -X POST https://bigquery.googleapis.com/bigquery/v2/projects/ROUTINE_PROJECT_ID/queries --data '{"query":"ROUTINE_CREATION_QUERY","useLegacySql":false}'
다음을 바꿉니다.
ROUTINE_PROJECT_ID
: 루틴이 생성된 프로젝트의 프로젝트 ID입니다.ROUTINE_CREATION_QUERY
: 루틴을 만드는 쿼리입니다.
만든 루틴을 데이터 클린룸에 추가합니다.
curl -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" -H 'x-goog-user-project:DCR_PROJECT_ID' -X POST https://analyticshub.googleapis.com/v1/projects/DCR_PROJECT_ID/locations/LOCATION/dataExchanges/CLEAN_ROOM_ID/listings?listingId=LISTING_ID -d '{"bigqueryDataset":{"dataset":"projects/PROJECT_ID/datasets/DATASET_ID","selectedResources":[{"routine":"projects/PROJECT_ID/datasets/DATASET_ID/tables/ROUTINE_ID"}],},"displayName":"LISTING_NAME"}'
다음을 바꿉니다.
DCR_PROJECT_ID
: 데이터 클린룸이 생성된 프로젝트의 프로젝트 ID입니다.LOCATION
: 데이터 클린룸의 위치입니다.CLEAN_ROOM_ID
: 데이터 클린룸 ID입니다.LISTING_ID
: 목록 IDPROJECT_ID
: 소스 데이터 세트가 포함된 프로젝트의 프로젝트 ID입니다.DATASET_ID
: 소스 데이터 세트 ID입니다.ROUTINE_ID
: 루틴 IDLISTING_NAME
: 등록정보 이름
쿼리 템플릿 상태를
APPROVED
로 업데이트합니다.curl -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" -L -X POST https://analyticshub.googleapis.com/v1/projects/DCR_PROJECT_ID/locations/LOCATION/dataExchanges/CLEAN_ROOM_ID/queryTemplates/QUERY_TEMPLATE_ID:approve --data '{}'
다음을 바꿉니다.
DCR_PROJECT_ID
: 데이터 클린룸이 생성된 프로젝트의 프로젝트 ID입니다.LOCATION
: 데이터 클린룸의 위치입니다.CLEAN_ROOM_ID
: 데이터 클린룸 ID입니다.QUERY_TEMPLATE_ID
: 쿼리 템플릿 ID입니다.
쿼리 템플릿 거부
Google Cloud 콘솔에서 다음과 같은 방법으로 쿼리 템플릿을 거부할 수 있습니다.
- 제출된 쿼리 템플릿 검토를 승인하지 마세요.
- 쿼리 템플릿을 삭제하여 클린룸에서 삭제합니다.
템플릿 구독자 워크플로
쿼리 템플릿 구독자는 데이터 클린룸을 보고 구독할 수 있습니다. 쿼리 템플릿만 클린룸에 추가된 경우 클린룸을 구독하면 기본 공유 데이터가 아닌 해당 TVF에 대한 액세스 권한만 부여됩니다.
쿼리 템플릿 구독
다음 옵션 중 하나를 선택합니다.
콘솔
데이터 클린룸을 구독하여 쿼리 템플릿을 구독합니다. 연결된 데이터 세트에서 목록에 대한 액세스 제외 설정이 사용 중지된 모든 목록에 액세스 권한이 부여됩니다.
쿼리 템플릿을 구독하려면 다음 단계를 따르세요.
BigQuery 페이지로 이동합니다.
클린룸을 구독할 때 만든 연결된 데이터 세트로 이동합니다.
연결된 데이터 세트에서 공유된 루틴 또는 TVF를 엽니다.
테이블 함수 호출을 클릭합니다.
매개변수를 허용된 입력(테이블 이름 또는 필드)으로 바꿉니다.
실행을 클릭합니다.
탐색기 패널에서 연결된 데이터 세트의 하위 요소로 중첩된 TVF를 볼 수 없는 경우 연결된 데이터 세트에서 TVF를 직접 쿼리할 수 있습니다.
SELECT * FROM `myproject.dcr_linked_dataset.mytvf`(TABLE myTable);
API
projects.locations.dataExchanges.subscribe
메서드를 사용합니다.
다음 예시는 curl
명령어를 사용하여 projects.locations.dataExchanges.subscribe
메서드를 호출하는 방법을 보여줍니다.
curl -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" -L -X POST https://analyticshub.googleapis.com/v1/projects/DCR_PROJECT_ID/locations/LOCATION/dataExchanges/CLEAN_ROOM_ID:subscribe --data '{"destination":"projects/SUBSCRIBER_PROJECT_ID/locations/LOCATION","subscription":"SUBSCRIPTION"}'
다음을 바꿉니다.
DCR_PROJECT_ID
: 데이터 클린룸이 생성된 프로젝트의 프로젝트 ID입니다.LOCATION
: 데이터 클린룸의 위치입니다.CLEAN_ROOM_ID
: 데이터 클린룸 ID입니다.SUBSCRIBER_PROJECT_ID
: 구독자 프로젝트의 프로젝트 ID입니다.SUBSCRIPTION
: 구독 이름입니다.
쿼리 템플릿을 구독한 후 연결된 데이터 세트에서 TVF를 직접 쿼리할 수 있습니다.
SELECT * FROM `myproject.dcr_linked_dataset.mytvf`(TABLE myTable);
시나리오 예시
쿼리 템플릿을 사용하면 데이터 클린룸 내에서 다양한 형태의 데이터 공동작업을 촉진할 수 있습니다. 다음 섹션에서는 시나리오의 예를 설명합니다.
단방향 공유 시나리오
데이터 게시자는 구독 파트너가 게시자가 정의한 쿼리만 실행할 수 있는지 확인하기 위해 쿼리 템플릿을 만듭니다. 클린룸에 다른 참여자가 추가되지 않으므로 쿼리 템플릿 생성자가 궁극적으로 쿼리 템플릿을 자체 승인합니다.
이 시나리오에서 사용자 A는 campaign_analysis
라는 데이터 클린룸을 만들고 campaigns
테이블이 포함된 my_campaign
이라는 데이터 세트를 추가하는 데이터 클린룸 소유자입니다. 사용자 A는 메타데이터 스키마만 표시되고 구독자가 소스 데이터에 액세스할 수 없는지 확인하기 위해 집계 기준 정책과 메타데이터 제어를 구성합니다. 그런 다음 사용자 A는 campaigns
테이블에서 테이블 값 함수를 정의하여 쿼리 템플릿을 만들고 연결된 데이터 세트의 모든 구독자가 TVF만 실행하도록 제한합니다.
TVF 구문은 다음과 같습니다.
campaigns_template(t1 TABLE campaign_ID <STRING> ) AS (
SELECT WITH AGGREGATION_THRESHOLD company_id, company, sum(impressions) FROM myproject.my_campaign.campaigns
group by company_id, company
);
사용자 A는 BigQuery 데이터 소유자 역할이 있는 캠페인 테이블에 대한 적절한 권한이 있으므로 검토를 위해 제출한 후 즉시 쿼리 템플릿을 직접 승인할 수 있습니다.
다자간 공동작업 공유
클린룸 소유자가 신뢰할 수 있는 참여자를 초대하여 서로의 데이터에 대해 실행할 쿼리를 제안합니다. 두 당사자 모두 기본 공유 데이터에 액세스하지 않고 메타데이터 스키마만 확인하여 안전하게 쿼리를 제안할 수 있습니다. 템플릿 제안자의 소유가 아닌 데이터를 쿼리 정의에서 참조하는 경우 해당 데이터의 소유자만 템플릿을 승인할 수 있습니다.
이 시나리오에서 사용자 A는 데이터 클린룸 참여자인 사용자 B를 campaign_analysis
클린룸에 초대합니다. 사용자 B는 테이블의 메타데이터 스키마를 확인하여 자체 데이터를 campaigns
테이블에 조인하는 쿼리 템플릿을 제안하려고 합니다.
TVF 구문은 다음과 같습니다.
campaigns_template(t1 TABLE campaign_ID <STRING> ) AS (
SELECT WITH AGGREGATION_THRESHOLD company_id, company, sum(impressions) FROM my_project.my_campaign.campaigns
group by company_id, company
);
사용자 B는 campaigns
표를 추가하지 않았고 소유하지도 않으므로 쿼리 템플릿이 승인을 위해 제출되면 사용자 A만 승인할 수 있습니다. 쿼리 템플릿을 사용하려면 사용자 B가 데이터 클린룸을 구독하고 TVF를 호출해야 합니다. 사용자 B는 campaign_ID
이라는 필드가 있는 자체 테이블을 테이블 매개변수로 전달하고 쿼리 템플릿에 정의된 비공개 SQL을 실행할 수 있습니다. 여기서 사용자 B는 클린룸에 데이터를 추가할 필요가 없습니다.
사용자 B는 transactions
테이블과 products
테이블이 있는 클린룸에 my_transactions
라는 데이터 세트도 추가합니다. 사용자 B는 집계 기준 정책과 메타데이터 컨트롤을 구성하여 메타데이터 스키마만 표시되고 구독자가 소스 데이터에 액세스할 수 없는지 확인합니다.
이제 사용자 A는 테이블의 메타데이터 스키마를 확인하여 자신의 데이터를 트랜잭션 테이블에 조인하는 다양한 쿼리 템플릿을 제안할 수 있습니다. 다음은 TVF 문법의 예입니다.
transactions_template(t1 TABLE user_ID <STRING> ) AS (
SELECT WITH AGGREGATION_THRESHOLD company_id, company, campaign_id, sku, category, date, sum(amount) FROM my_project.my_transactions.transactions
group by company_id, company, campaign_id, sku, category, date
);
transactions_template_with_join(t1 TABLE user_ID <STRING> ) AS (
SELECT WITH AGGREGATION_THRESHOLD t.company_id, t.company, t.campaign_id, t.sku, t.date, p.product_name, p.product_category, sum(t.amount) FROM myproject.my_transactions.transactions t
left join my_project.my_transactions.products p
on t.product_id = p.product_id
group by t.company_id, t.company, t.campaign_id, t.sku, t.date, p.product_name, p.product_category
);
사용자 A는 transactions
및 products
테이블을 추가하지 않았고 소유하지도 않으므로 승인을 위해 쿼리 템플릿이 제출되면 사용자 B만 승인할 수 있습니다. 쿼리 템플릿을 사용하려면 사용자 A가 클린룸을 구독하고 TVF를 호출해야 합니다. 사용자 A는 user_ID
라는 필드가 있는 자체 테이블을 테이블 매개변수로 전달하고 쿼리 템플릿에 정의된 개인 정보 보호 SQL을 실행할 수 있습니다. 여기서 사용자 A는 클린룸에 데이터를 추가할 필요가 없습니다.
가격 책정
쿼리 템플릿을 사용하는 데이터 참여자에게는 데이터 스토리지에 대한 요금만 청구됩니다.
쿼리 템플릿을 사용하는 구독자에게는 쿼리를 실행할 때의 컴퓨팅 (분석) 요금만 청구됩니다.
다음 단계
- 데이터 클린룸에 대해 자세히 알아보려면 데이터 클린룸에서 민감한 정보 공유를 참고하세요.
- 구독에 대해 자세히 알아보려면 데이터 클린룸 구독을 참고하세요.
- TVF에 대해 자세히 알아보려면 테이블 함수를 참고하세요.
- 데이터 이그레스에 대해 자세히 알아보려면 데이터 이그레스 옵션 (BigQuery 공유 데이터 세트만 해당)을 참고하세요.