開発者 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_nameとcache_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
}
]
);
各 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' ) );
- テンプレート固有の引数
特定のテンプレートに引数を渡したい場合は、トップレベル
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'] ) ) );
テンプレートチェーンコマンド¶
テンプレートチェーンを操作するには、以下のコマンドを使用できます。
コマンド |
説明 |
|---|---|
|
新しいテンプレートチェーンを作成します。 |
|
クリーンルームに追加された全てのテンプレートチェーンを返します。 |
|
テンプレートチェーンの定義を返します。 |
|
クリーンルームからテンプレートチェーンをドロップします。 |
|
クリーンルームからすべてのテンプレートチェーンをドロップします。 |
|
テンプレートチェーン内の全てのテンプレートに対して期待される引数を返します。 |
これらのコマンドの詳細については、以下をご参照ください。