데이터 오퍼링(Data offerings)

데이터 오퍼링(Data offerings)

데이터 오퍼링은 콜라보레이션에서 특정 분석 실행자와 공유되는 하나 이상의 뷰(데이터셋) 집합이에요. 데이터 오퍼링은 등록 시점의 스냅샷이 아니라 원본 데이터의 실시간 뷰예요.

출처: Data offerings

본문

기능 — 일반 공개(Generally Available)

현재 지원 리전: 이 리전들에서 사용할 수 있어요.

정부 및 VPS 배포에서는 사용할 수 없어요.

데이터 오퍼링은 데이터셋(datasets)이라고 하는 하나 이상의 뷰 집합으로, 콜라보레이션에서 특정 분석 실행자와 공유돼요. 콜라보레이션 스펙에서 자신이 데이터 제공자로 정의된 분석 실행자에게 데이터를 공유할 수 있어요.

데이터 오퍼링은 데이터 오퍼링이 등록된 시점의 데이터 스냅샷이 아니라 원본 데이터의 실시간 뷰예요. 원본 데이터에 적용된 모든 Snowflake 정책은 데이터 오퍼링에서도 적용돼요.

데이터 오퍼링을 등록하면 Snowflake는 데이터 오퍼링 스펙에 나열된 각 데이터 소스에 대해 뷰를 만들어요. 뷰에는 데이터 오퍼링 스펙에 나열된 컬럼만 포함돼요. 카테고리에 따라 특정 컬럼은 이 단계에서 이름이 바뀔 수 있어요.

또한 데이터 오퍼링을 콜라보레이션에 링크하면 Snowflake는 등록된 뷰의 복사본을 만들고, 콜라보레이션 스펙에 따라 지정된 분석 실행자에게만 뷰 접근을 제한해요.

중요

기본 테이블을 이동·이름 변경·접근 권한 변경하면 데이터 오퍼링은 이전에 등록된 모든 링크를 통해 사용할 수 없게 돼요.

Snowflake Standard Edition을 사용한다면 정책 적용이 포함된 데이터 클린룸을 통해 데이터를 공유할 수 없어요. 따라서 다른 당사자와 데이터를 공유하거나, 오퍼링에 지정된 데이터 클린룸 정책을 자신 계정의 사용자에게조차 활용할 수 없어요. 하지만 다른 콜라보레이터의 데이터 오퍼링에 접근하거나, 정책 없이 자체 데이터를 로컬 데이터 오퍼링으로 사용할 수는 있어요.

데이터 오퍼링 요구 사항:

  • 공유하려는 데이터에 GRANT OPTION이 있는 REFERENCE_USAGE 권한이 있어야 해요. 없으면 등록, 콜라보레이션 참여, 데이터 링크 시도 시 "missing reference usage grant" 오류가 발생해요.
GRANT REFERENCE_USAGE ON DATABASE my_database TO ROLE my_role WITH GRANT OPTION;
  • 콜라보레이션에서 데이터 제공자 콜라보레이션 역할이 있어야 해요.
  • 현재는 콜라보레이션을 만들거나 참여한 계정 역할만 콜라보레이션에 데이터를 링크하거나 언링크할 수 있어요.

계속 읽어서 데이터 오퍼링을 콜라보레이션에 등록하고 링크하는 방법을 확인하세요:

지원되는 객체 유형

데이터 오퍼링은 다음 객체 유형을 데이터 소스로 지원해요:

참고

†외부 테이블과 Iceberg 테이블은 데이터 오퍼링에서 사용되기 전에 활성화되어 있어야 해요. 외부 테이블이나 Iceberg 테이블을 참조하는 데이터 오퍼링은 크로스 클라우드 자동 이행을 사용하는 콜라보레이션에서조차 콜라보레이션 소유자와 같은 클라우드·리전의 콜라보레이터와만 공유할 수 있어요.

데이터 오퍼링 등록

  1. 데이터에 대한 데이터 오퍼링 스펙을 만들어요. 데이터 오퍼링에 대해 다음 세부 사항을 지정해요:
    • 데이터 오퍼링에 있는 각 데이터셋의 소스 객체.
    • 각 데이터셋에 포함할 컬럼.
    • 클린룸 정책을 채우는 데 사용되는 각 컬럼의 유형(조인 또는 기타). 경우에 따라 개별 컬럼의 형식도 지정해요.
    • 데이터 오퍼링의 컬럼에 적용할 Snowflake 데이터 보호 정책.
    • 사용자가 데이터에 어떻게 접근할 수 있는지: 템플릿으로만, 아니면 자유 형식 SQL 쿼리로도.
  2. REGISTER_DATA_OFFERING을 호출해 데이터 오퍼링을 등록해요. 이 호출은 데이터 오퍼링 ID를 반환해요.

이 단계를 거치면 레지스트리에 대해 읽기 접근 권한이 있는 계정의 어떤 역할이든 데이터 오퍼링을 어떤 콜라보레이션에도 링크할 수 있게 돼요. 같은 데이터 오퍼링 ID를 사용해 여러 콜라보레이션에 데이터 오퍼링을 공유할 수 있어요.

데이터 오퍼링 링크

링크 과정은 콜라보레이션이 생성되었는지 여부에 따라 달라져요:

  • 콜라보레이션이 아직 생성되지 않았다면, 데이터 제공자는 데이터 오퍼링 ID를 콜라보레이션 소유자에게 전달해 콜라보레이션 스펙에 포함시킬 수 있어요. 데이터 오퍼링이 콜라보레이션 스펙에 포함되면, 콜라보레이션에 참여하기 전에 데이터 제공자가 검토할 수 있도록 데이터 오퍼링 ID가 콜라보레이션 스펙에 보여요.
  • 콜라보레이션이 이미 생성되었다면, 데이터 제공자는 콜라보레이션에 참여하고 데이터 오퍼링 ID, 콜라보레이션 이름, 데이터를 공유할 대상을 지정해 LINK_DATA_OFFERING을 호출해요. 데이터 오퍼링이 링크된 뒤 사용 가능해지기까지 짧은 지연이 있을 수 있어요. 링크 데이터 오퍼링 요청이 성공적으로 완료되었는지 확인하려면 VIEW_UPDATE_REQUESTS를 호출하세요. 링크가 성공하면 VIEW_DATA_OFFERINGS를 호출할 때 데이터 오퍼링이 보이고 사용할 준비가 돼요.

데이터를 링크할 때 데이터에 접근할 수 있는 분석 실행자를 지정해요.

데이터 제공자는 UNLINK_DATA_OFFERING을 호출해 콜라보레이션 또는 특정 콜라보레이터에서 데이터 오퍼링을 제거할 수 있어요.

계정의 등록된 데이터 오퍼링을 보려면 VIEW_REGISTERED_DATA_OFFERINGS를 호출하세요.

팁

데이터 오퍼링을 등록한 사용자가 콜라보레이션에 참여하기 전까지 데이터 오퍼링은 콜라보레이션에서 보이지 않아요.

분석 실행 방법은 분석 실행을 참고하세요.

소스 컬럼 이름 바꾸기

데이터 오퍼링의 컬럼 이름은 분석 실행자에게 노출되기 전에 바꿀 수 있어요. 이름 변경은 데이터 오퍼링 스펙에서 컬럼을 정의하는 category와 column_type 값에 따라 달라져요.

Column category New column name
join_standard column_type 값
timestamp timestamp
join_custom, passthrough, event_type 원본 컬럼 이름 사용

예를 들어 소스 테이블의 컬럼 이름이 user_email_address라면, 이 컬럼이 분석 실행자에게 어떻게 노출되는지는 데이터 오퍼링 스펙에서 어떻게 정의되는지에 따라 달라져요.

데이터 오퍼링 스펙 컬럼이 참조되는 방식
yaml ... schema_and_template_policies: user_email_address: category: join_standard column_type: hashed_email_sha256 join_standard 컬럼에는 column_type이 사용돼요: sql SELECT HASHED_EMAIL_SHA256 FROM source_table[0];

데이터 오퍼링에 데이터 보호 정책 적용

클린룸에서 공유되는 데이터는 여러 방식으로 보호돼요:

  • 클린룸 환경에 등록된 데이터는 데이터 오퍼링 스펙에 나열되지 않은 컬럼을 생략하는 보안 뷰(secure view)로 생성돼요.
  • 보안 뷰는 콜라보레이션 스펙이 지정한 특정 사용자와 템플릿에게만 공유돼요.
  • 데이터에 Snowflake 정책을 추가해 사용 방식을 더 관리할 수 있어요.
  • 데이터 오퍼링 컬럼 분류에 따라 Data Clean Room 템플릿 정책도 적용돼요.

조인 또는 집계 정책 같은 Snowflake 데이터 보호 정책을 공유 데이터에 적용하는 방법은 두 가지예요:

  • 정책을 원본 데이터에 적용해요. 원본 데이터에 적용된 정책은 콜라보레이션에 노출된 데이터셋에서도 적용돼요. 콜라보레이터에게 정책을 알려주세요.
  • 자유 형식 쿼리에서 사용될 때 정책을 데이터 오퍼링에 적용해요. 데이터 오퍼링에서 자유 형식 쿼리를 허용한다면, 데이터 오퍼링 스펙에서 그 쿼리에 적용할 정책을 지정할 수 있어요. 이 정책들은 소스 테이블의 기존 Snowflake 정책 위에 적용돼요.

원본 데이터에 Snowflake 정책 적용

원본 데이터에 적용된 Snowflake 정책은 콜라보레이션의 데이터 오퍼링 뷰에도 적용돼요.

원본 데이터에 Snowflake 정책을 적용한다면 콜라보레이터에게 그 사실을 알려서, 조인할 수 없는 컬럼으로 조인하거나 집계 요구 사항을 충족하지 못하는 쿼리를 실수로 실행하지 않게 하세요. 데이터 오퍼링의 description 필드에 Snowflake 정책을 언급하세요.

중요

Snowflake 데이터 정책이 적용된 데이터 오퍼링을 등록할 때는 그 정책의 적용을 받지 않는 역할을 사용하거나, 데이터가 등록될 때까지 정책을 일시 중지해야 해요.

Snowflake Data Clean Rooms는 등록 과정의 일부로 소스 테이블에 검증 쿼리를 실행하기 때문이에요. 테스트 쿼리가 의미 있는 결과를 반환하지 못하면 등록이 실패해요. 일부 Snowflake 데이터 정책은 테스트가 실패하게 만들 수 있어요. 예를 들어 테이블에 집계 정책이 있는데, 검증 쿼리가 집계 정책의 최소 그룹 크기 요구 사항을 충족할 만큼 충분한 행을 반환하지 못할 수 있어요.

데이터 오퍼링에 Snowflake 정책 적용(자유 형식 쿼리 사용 전용)

자유 형식 쿼리를 통해 공유 데이터에 접근할 때 Snowflake 정책을, 원본 데이터에 적용하지 않고도 적용할 수 있어요. 이 정책들은 소스 테이블에 직접 적용된 Snowflake 정책에 추가로 적용돼요.

데이터에 자유 형식 SQL 정책을 추가하려면:

  1. Collaboration Data Clean Rooms가 지원하는 유형의 정책을 만들어요.
  2. 데이터 오퍼링 스펙에 다음 정보를 추가해요:
    • allowed_analyses: template_and_freeform_sql로 설정.
    • 데이터셋 항목에 freeform_sql_policies 섹션 추가.
    • freeform_sql_policies 아래에 적절한 정책 유형 섹션을 추가하고, 만든 Snowflake 정책과 적용할 콜라보레이션 컬럼을 나열. 지원되는 정책 유형:
      • aggregation_policy: 선택적 엔티티 키가 있는 단일 집계 정책.
      • projection_policies: 각각 컬럼 바인딩이 있는 프로젝션 정책 배열.
      • join_policy: 선택적 컬럼 바인딩이 있는 단일 조인 정책.
      • masking_policies: 각각 컬럼 바인딩이 있는 마스킹 정책 배열.
      • row_access_policy: 선택적 컬럼 바인딩이 있는 단일 행 접근 정책.

데이터 오퍼링을 등록하는 역할은 정책에 대한 USAGE 권한이 있어야 해요.

콜라보레이터는 COLLABORATION.VIEW_DATA_OFFERINGS를 호출할 때 데이터에 적용된 정책 유형을 볼 수 있어요.

여러 테이블의 여러 컬럼에 정책 하나를 재사용할 수 있어요.

예시:

CREATE OR REPLACE AGGREGATION POLICY my_db.public.my_agg_policy AS ()
  RETURNS AGGREGATION_CONSTRAINT ->
    AGGREGATION_CONSTRAINT(MIN_GROUP_SIZE => 5);
# Tell data clean rooms to set your aggregation policy on the hashed_email column of
# the data offering
api_version: 2.0.0
spec_type: data_offering
version: 1
name: my_favorite_dataset
datasets:
  - alias: test_freeform_restricted_agg
    data_object_fqn: samooha_provider_sample_database.audience_overlap.customers
    allowed_analyses: template_and_freeform_sql
    object_class: custom
    freeform_sql_policies:
      aggregation_policy:
        name: my_db.public.my_agg_policy
        entity_keys:
          - hashed_email
...

Snowflake Data Clean Room 템플릿 정책

Snowflake Data Clean Rooms는 Snowflake 정책 시스템 위에 자체 정책 시스템도 지원해요. 콜라보레이션의 각 데이터 제공자는 자신의 데이터 오퍼링에 다음 정책을 설정할 수 있어요:

  • 조인 정책(join policy): 어떤 컬럼에 조인할 수 있는지 지정.
  • 컬럼 정책(column policy): 어떤 컬럼을 프로젝션할 수 있는지 지정.
  • 활성화 정책(activation policy): 어떤 컬럼을 활성화할 수 있는지 지정.

데이터 제공자는 데이터 오퍼링 스펙에서 이 정책들을 설정할 수 있어요:

  • 컬럼의 category가 join_standard 또는 join_custom이면 그 컬럼은 클린룸의 조인 정책에 추가돼요.
  • 컬럼의 category가 다른 값이면 그 컬럼은 클린룸의 컬럼 정책에 추가돼요.
  • 컬럼의 activation_allowed 값이 TRUE이면 그 컬럼은 클린룸의 활성화 정책에도 추가돼요.

템플릿에 적절한 정책 확인 필터가 있을 때 정책이 적용돼요. 필터는 join_policy, column_policy, activation_policy, join_and_column_policy예요. 템플릿 실행 시 이 필터들은 참조된 컬럼이 데이터 오퍼링 스펙의 해당 정책 집합에 허용되는지 검증해요. 지정된 정책의 일부가 아닌 컬럼에 필터를 적용하면 템플릿은 실패해요.

예를 들어 col1과 col2 모두 데이터 제공자의 조인 정책(category: join_standard 또는 category: join_custom)의 일부여야 합니다. 그렇지 않으면 다음 템플릿 스니펫이 오류를 발생시켜요:

SELECT *
FROM T1
JOIN T2
ON {{ t1_col | sqlsafe | join_policy }} = {{ t2_col | sqlsafe | join_policy }}

네이밍 경로로 데이터 오퍼링 구성

네이밍 경로(naming paths)를 사용해 데이터 오퍼링을 개념적으로 그룹화할 수 있어요. 각 데이터 오퍼링이 하나 이상의 테이블 또는 뷰를 나타내므로 이것은 특히 효과적이에요. 개별 테이블은 {collaborator alias}.{data offering ID}.{dataset alias} 문법으로 접근해요. 여기서 데이터 오퍼링 ID는 사용자가 제공한 이름과 버전 값의 조합이고, 별칭(alias)은 오퍼링의 단일 테이블이에요.

데이터 오퍼링을 등록할 때 이름·버전·별칭을 스코핑 시스템으로 생각하면, 데이터를 오퍼링과 별칭별로 구성할 수 있어요. 예를 들어 각 테이블이 미국 특정 주에 해당하는 다음과 같은 영업 데이터 오퍼링을 등록할 수 있어요:

api_version: 2.0.0
spec_type: data_offering
version: v0
name: examplecorp_sales_by_state
datasets:
 - alias: AL
   data_object_fqn: mydb.mysch.al_data
 - alias: NY
   data_object_fqn: mydb.mysch.ny_data
 - alias: CA
   data_object_fqn: mydb.mysch.ca_data

분석 실행자는 이 테이블들을 user_alias.offering_id.AL, user_alias.offering_id.NY, user_alias.offering_id.CA로 참조해요.

더 알아보기