다단계 워크플로에 내부 테이블 사용하기

개요

많은 클린룸 사용 사례에는 클린룸에 있는 하나 이상의 테이블에 대해 단일 SQL 쿼리를 실행하고 응답에 결과를 표시하는 사례가 포함됩니다. 그러나 다단계 워크플로를 지원하기 위해 후속 템플릿 내에서 사용할 수 있는 내부 테이블을 생성해야 하는 사용 사례가 있습니다. 예를 들어, 모델이 데이터 세트에 대해 한 번 학습된 다음 다양한 입력 데이터에 대해 단독으로 또는 일괄적으로 여러 번 실행되는 머신 러닝 흐름이 있습니다.

내부 테이블 생성

클린룸 내부에 내부 테이블을 생성하여 중간 결과를 저장하거나 다운스트림 사용을 위한 영구 저장소(예: 여러 실행에 사용되는 학습 데이터 저장)로 생성할 수 있습니다. 아래 내부 테이블의 속성 및 지침을 참조하세요.

  • CREATE TABLE을 실행하는 클린룸 템플릿을 사용하거나 Python을 통해 테이블을 생성하는 UDF/UDTF를 실행하여 내부 테이블을 생성할 수 있습니다.

  • 내부 테이블은 기본적으로 제공되는 cleanroom 스키마에서 생성할 수 있습니다. 사용자 지정 스키마를 선호하는 경우 테이블을 생성하기 전에 먼저 스키마를 생성해야 합니다.

  • 기본적으로, 내부 테이블은 클린룸에서 승인된 템플릿을 통해서만 액세스할 수 있습니다. 템플릿 외부에서 액세스를 제공해야 하는 경우 클린룸의 CLEANROOM_PUBLIC_ROLE 애플리케이션 역할에 해당 권한을 부여해야 합니다. 예를 들어, GRANT SELECT ON TABLE CLEANROOM.MY_TABLE TO APPLICATION ROLE CLEANROOM_PUBLIC_ROLE; 권한을 부여할 수 있습니다.

  • 적절한 액세스 권한이 있는 경우 공동 작업에서 내부 테이블을 나열할 수 있습니다. 내부 테이블은 SFDCR_collaboration_name.cleanroom 에서 확인할 수 있으며 다음 SQL 코드를 실행하여 나열할 수 있습니다.

    SHOW TABLES IN SCHEMA SFDCR_collaboration_name.CLEANROOM;.

  • 공동 작업이 제거되면 내부 테이블도 삭제됩니다. 그러나 내부 테이블이 공동 작업보다 수명이 짧도록 설계된 경우 더 이상 필요하지 않을 때 테이블을 삭제하는 것이 좋습니다.

다음은 내부 테이블을 만드는 몇 가지 예입니다.

JinjaSQL 템플릿은 내부 테이블을 만들 수 있는데, 이 작업은 활성화 의 일부 유형에서 수행됩니다.

이 예제 템플릿은 테이블을 생성하고 테이블 이름을 반환하므로 이름을 다른 템플릿에 매개 변수로 전달할 수 있습니다.

CALL SAMOOHA_BY_SNOWFLAKE_LOCAL_DB.REGISTRY.REGISTER_TEMPLATE(
  $$
  api_version: 2.0.0
  spec_type: template
  name: my_test_template
  version: V1
  type: sql_analysis
  description: Simple join example. Saves to table analysis_results
  template:
    BEGIN
    CREATE OR REPLACE TABLE cleanroom.analysis_results AS
      SELECT count(*) AS ITEM_COUNT, p1.status, p1.age_band
      FROM IDENTIFIER({{ source_table[0] }}) AS p1
      JOIN IDENTIFIER({{ source_table[1] }}) AS p2
      ON IDENTIFIER({{ join_col_1 | join_policy }}) = IDENTIFIER({{ join_col_2 | join_policy }})
      GROUP BY p1.status, p1.age_band;
    RETURN 'analysis_results';
    END;
  $$
  );