使用开发者 APIs 按顺序执行模板¶
复杂的分析可能需要按特定顺序执行多个模板,有时使用一个模板的输出作为另一个模板的输入。提供商可以创建 模板链 来定义一系列需要按特定顺序执行的模板。在定义此模板链时,提供商可以指定特定模板的结果是否可供链中的后续模板使用。
Clean Room 用户执行模板链来开展分析,该分析以预定义的顺序运行链中的模板。
关于中间结果¶
如果提供商希望一个模板的结果可供模板链中的后续模板可用,他们可以为模板的结果创建缓存。每个具有缓存的模板也有该缓存的过期时间。
如果提供商指定模板具有缓存,则用户首次执行模板链时,该模板的结果将存储在 Clean Room 内的表中。此基础表仅供 Clean Room 本身访问。下次用户执行模板链时,Snowflake Data Clean Rooms 会在执行模板之前检查缓存是否已过期。具有缓存结果的模板不会再次执行,除非缓存已过期。
模板链中的后续模板可以在模板中包含适当的 Jinja 参数,以使用缓存作为输入。
定义模板链¶
提供商使用 provider.add_template_chain
命令创建模板链。提供商要添加到新模板链的模板必须存在,才能创建模板链。
provider.add_template_chain
命令接受以下实参:
Clean Room 的名称(字符串)。
模板链的名称(字符串)。
模板链中的模板(JSON 对象的数组)。
有关使用 provider.add_template_chain
命令创建模板链的示例,请参阅 示例。
将模板添加到模板链¶
提供商将 JSON 对象数组传递到 provider.add_template_chain
,其中每个 JSON 对象代表一个模板,从而定义哪些模板是模板链的一部分。JSON 对象的顺序决定了模板的执行顺序。
模板的 JSON 对象可以包括以下字段:
- :code:`template_name`(字符串)
指定要添加到模板链的模板。模板必须已存在。
此字段为必填字段。
- :code:`cache_results`(布尔值)
确定模板的结果是否 已缓存,以便模板链中的其他模板可以访问它们。要缓存结果,请指定 TRUE。
此字段为必填字段。如果为 TRUE,则
output_table_name
和cache_expiration_hours
字段也是必填字段。- :code:`output_table_name`(字符串)
如果
cache_results = TRUE
,则指定已存储模板结果的 Snowflake 表的名称。如果
cache_results = TRUE
,则此字段为必填字段。- :code:`jinja_output_table_param`(字符串)
如果
cache_results = TRUE
,则指定其他模板必须包括的 Jinja 参数的名称,以接受output_table_name
中存储的结果。此字段是可选字段。
- :code:`cache_expiration_hours`(整数)
如果
cache_results = TRUE
,则指定删除缓存中结果之前的小时数。当缓存过期时,那么下次执行模板链时,缓存会使用模板的结果刷新。如果
cache_results = TRUE
,则此字段为必填字段。
示例¶
在此示例中,提供商希望:
在 Clean Room
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 对象的更多信息,请参阅 将模板添加到模板链。
执行模板链¶
Clean Room 用户运行 consumer.run_analysis
命令来执行模板链,该命令与用于执行单个模板的命令相同。执行模板链会按照预定义的顺序运行链中的每个模板,以获得最终结果。
consumer.run_analysis
命令接受传递到模板链中 Jinja 模板的实参。您可以执行 consumer.get_arguments_from_template_chain
命令,确定链中的模板期望的实参。
传递到 consumer.run_analysis
的实参可能是链中特定模板的特定实参,也可能是针对链中每个模板的实参。
- 通用实参
如果您要将实参传递到模板链中的每个模板,句法类似于使用
consumer.run_analysis
运行单个模板。例如,以下命令将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'] ) ) );
模板链命令¶
您可以使用以下命令处理模板链:
命令 |
描述 |
---|---|
|
创建新的模板链。 |
|
返回已添加到 Clean Room 的所有模板链。 |
|
返回模板链的定义。 |
|
从 Clean Room 中删除一个模板链。 |
|
从 Clean Room 中删除所有模板链。 |
|
返回模板链中所有模板的预期实参。 |
有关这些命令的更多信息,请参阅: