マルチステップワークフローでの内部テーブルの使用

概要

多くのクリーンルームのユースケースには、クリーンルームの1つ以上のテーブルに対する単一の SQL クエリの実行、応答での結果の表示などがあります。ただし、マルチステップワークフローをサポートするために、後続のテンプレート内で使用できる内部テーブルを作成する必要があるユースケースがあります。たとえば、機械学習フローがそうです。モデルはデータセットに対して1回トレーニングされ、その後、単一またはバッチで、さまざまな入力データに対して複数回実行されます。

内部テーブルの作成

中間結果を格納するためにクリーンルーム内に内部テーブルを作成したり、下流で使用するための永続的なストレージとして(たとえば、複数の実行に使用されるトレーニングデータを保存するために)作成したりできます。以下の内部テーブルのプロパティとガイダンスをご参照ください。

  • 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;
  $$
  );