開発者 APIs を使用してテンプレートを順次実行する

複雑な分析では、複数のテンプレートを特定の順序で実行する必要があり、あるテンプレートの出力を別のテンプレートの入力として使用することもあります。プロバイダーは、特定の順序で実行されるテンプレートのシーケンスを定義するために、 テンプレートチェーン を作成することができます。このテンプレートチェーンを定義するとき、プロバイダーは、特定のテンプレートの結果をチェーン内の後続のテンプレートで利用できるかどうかを指定できます。

クリーンルームユーザーは、テンプレートチェーンを実行し、チェーン内のテンプレートを事前に定義された順序で実行する解析を実行します。

中間結果について

プロバイダーが、あるテンプレートの結果をテンプレートチェーン内の後続のテンプレートでも利用できるようにしたい場合、テンプレートの結果のキャッシュを作成することができます。キャッシュを持つ各テンプレートには、そのキャッシュの有効期限もあります。

プロバイダーがテンプレートにキャッシュがあることを指定した場合、ユーザーがテンプレートチェーンを初めて実行すると、そのテンプレートの結果がクリーンルーム内のテーブルに格納されます。この基礎テーブルは、クリーンルーム自体からのみアクセス可能です。次にユーザーがテンプレートチェーンを実行するとき、 Snowflake Data Clean Rooms はテンプレートを実行する前にキャッシュの有効期限が切れていないか確認します。キャッシュされた結果を持つテンプレートは、キャッシュが期限切れにならない限り再実行されません。

テンプレートチェーンの後続のテンプレートは、テンプレートに適切なJinjaパラメーターを含めることで、キャッシュを入力として使用できます。

テンプレートチェーンの定義

プロバイダーは、 provider.add_template_chain コマンドを使ってテンプレートチェーンを作成します。プロバイダーが新しいテンプレートチェーンに追加したいテンプレートは、テンプレートチェーンを作成する前に存在している必要があります。

provider.add_template_chain コマンドは以下の引数を受け付けます。

  • クリーンルームの名前(string)

  • テンプレートチェーンの名前(string)

  • テンプレートチェーンのテンプレート(JSON オブジェクトの配列)

provider.add_template_chain コマンドを使用してテンプレートチェーンを作成する例については、 をご参照ください。

テンプレートチェーンにテンプレートを追加する

JSON プロバイダーは、各JASONオブジェクトがテンプレートを表す provider.add_template_chain に JSON オブジェクトの配列を渡すことによって、どのテンプレートがテンプレートチェーンの一部であるかを定義します。JSON オブジェクトの順序は、テンプレートの実行順序を決定します。

テンプレートの JSON オブジェクトは、以下のフィールドを含むことができます。

template_name (string)

テンプレートチェーンに追加するテンプレートを指定します。テンプレートはすでに存在していなければなりません。

このフィールドは必須です。

cache_results (boolean)

テンプレートの結果を キャッシュ して、テンプレートチェーン内の他のテンプレートがアクセスできるようにするかどうかを決定します。結果をキャッシュするには、 TRUE を指定します。

このフィールドは必須です。TRUE の場合、 output_table_namecache_expiration_hours フィールドも必須です。

output_table_name (string)

cache_results = TRUE の場合、テンプレート結果が格納されるSnowflakeテーブルの名前を指定します。

cache_results = TRUE の場合、このフィールドは必須です。

jinja_output_table_param (string)

cache_results = TRUE の場合、 output_table_name に格納された結果を受け入れるために、他のテンプレートが含める必要のあるJinjaパラメーターの名前を指定します。

このフィールドはオプションです。

cache_expiration_hours (整数)

cache_results = TRUE の場合、キャッシュ内の結果が削除されるまでの時間数を指定します。キャッシュの有効期限が切れると、次にテンプレートチェーンが実行されたときに、テンプレートの結果でキャッシュがリフレッシュされます。

cache_results = TRUE の場合、このフィールドは必須です。

この例では、プロバイダーは次のことを望んでいます。

  • クリーンルーム collab_clean_room でテンプレートチェーン insights_chain を作成します。

  • crosswalk テンプレートが transaction_insights テンプレートの前に実行されるように、テンプレートチェーンを定義します。

  • crosswalk テンプレートの結果をキャッシュし、 transaction_insights テンプレートの入力として使用できるようにします。

CALL samooha_by_snowflake_local_db.provider.add_template_chain(
  'collab_clean_room',
  'insights_chain',
  [
    {
      'template_name': 'crosswalk',
      'cache_results': True,
      'output_table_name': 'crosswalk',
      'jinja_output_table_param': 'crosswalk_table_name',
      'cache_expiration_hours': 2190
    },
    {
      'template_name': 'transaction_insights',
      'cache_results': False
    }
  ]
);
Copy

各 JSON オブジェクトの詳細については、 テンプレートチェーンにテンプレートを追加する をご参照ください。

テンプレートチェーンの実行

クリーンルームユーザーは、 consumer.run_analysis コマンドを実行してテンプレートチェーンを実行します。テンプレートチェーンを実行すると、チェーン内の各テンプレートがあらかじめ定義された順序で実行され、最終的な結果が得られます。

consumer.run_analysis コマンドは、テンプレートチェーン内のJinjaテンプレートに渡す引数を受け取ります。 consumer.get_arguments_from_template_chain コマンドを実行することで、チェーン内のテンプレートがどのような引数を期待しているかを判断することができます。

consumer.run_analysis に渡される引数は、チェーン内の特定のテンプレートに固有のものであることも、チェーン内のすべてのテンプレートに対する引数であることもできます。

(ユニバーサル引数)

テンプレートチェーン内のすべてのテンプレートに引数を渡したい場合、構文は consumer.run_analysis を使って1つのテンプレートを実行するのと同様です。例えば、以下のコマンドは、 where_clause 引数の値をテンプレートチェーン内のすべてのテンプレートに渡します。

CALL samooha_by_snowflake_local_db.consumer.run_analysis(
  'collab_clean_room',
  'insights_chain',
  ['MY_CONSUMER_DB.C_SCHEMA.CONVERSIONS'],
  ['PROVIDER_DB.P_SCHEMA.EXPOSURES'],
  object_construct(
    'where_clause', 'p.EMAIL=c.EMAIL'
  )
);
Copy
テンプレート固有の引数

特定のテンプレートに引数を渡したい場合は、トップレベル object_construct の子として、テンプレート名をフィールド名とした別の object_construct を追加します。例えば、以下のコマンドは dimensions 引数の値を crosswalk_template テンプレートにのみ渡します。

CALL samooha_by_snowflake_local_db.consumer.run_analysis(
  'collab_clean_room',
  'insights_chain',
  ['MY_CONSUMER_DB.C_SCHEMA.CONVERSIONS'],
  ['PROVIDER_DB.P_SCHEMA.EXPOSURES'],
  object_construct(
    'where_clause', 'p.EMAIL=c.EMAIL',
    'crosswalk_template', object_construct(
      'dimensions', ['p.CAMPAIGN']
    )
  )
);
Copy

テンプレートチェーンコマンド

テンプレートチェーンを操作するには、以下のコマンドを使用できます。

コマンド

説明

provider.add_template_chain

新しいテンプレートチェーンを作成します。

provider.view_added_template_chains

consumer.view_added_template_chains

クリーンルームに追加された全てのテンプレートチェーンを返します。

provider.view_template_chain_definition

consumer.view_template_chain_definition

テンプレートチェーンの定義を返します。

provider.clear_template_chain

クリーンルームからテンプレートチェーンをドロップします。

provider.clear_all_template_chains

クリーンルームからすべてのテンプレートチェーンをドロップします。

consumer.get_arguments_from_template_chain

テンプレートチェーン内の全てのテンプレートに対して期待される引数を返します。

これらのコマンドの詳細については、以下をご参照ください。