Referenz für benutzerdefinierte Clean Room-Vorlagen¶
Über Clean Room-Vorlagen¶
Clean Room-Vorlagen werden in JinjaSQL geschrieben. JinjaSQL ist eine Erweiterung der Jinja-Vorlagensprache, die eine SQL-Abfrage als Ausgabe generiert. Dadurch können Vorlagen logische Anweisungen und die Auflösung von Laufzeitvariablen verwenden, damit der Benutzer Tabellennamen, Tabellenspalten und benutzerdefinierte Werte angeben kann, die zur Laufzeit in der Abfrage verwendet werden.
Snowflake bietet eine Auswahl an vorgefertigten Vorlagen für gängige Anwendungsfälle. Die meisten Benutzer ziehen es jedoch vor, kundenspezifische Abfragevorlagen für ihre Clean Rooms zu erstellen. Kundenspezifische Vorlagen werden mit der Clean Rooms-API erstellt, können aber entweder im Code oder über die Clean Rooms-UI ausgeführt werden.
Es gibt zwei allgemeine Vorlagentypen:
Analysevorlagen, die eine SELECT-Anweisung (oder eine Menge von SELECT-Operationen) ergeben, die dem Vorlage-Runner die Ergebnisse anzeigen.
Aktivierungsvorlagen, die verwendet werden, um Ergebnisse für ein Snowflake-Konto oder einen Dritten zu aktivieren, anstatt die Ergebnisse in der unmittelbaren Umgebung anzuzeigen. Eine Aktivierungsvorlage ist einer Analysevorlage sehr ähnlich, mit einigen zusätzlichen Anforderungen.
In der Clean Rooms-UI kann eine Analysevorlage mit einer Aktivierungsvorlage verknüpft werden, damit der Aufrufer eine Analyse ausführen, die Ergebnisse anzeigen und dann Daten für sich selbst oder einen Dritten aktivieren kann. Die Aktivierungsvorlage muss nicht zur gleichen Abfrage aufgelöst werden wie die zugehörige Analysevorlage.
Erstellen und Ausführen einer kundenspezifischen Vorlage¶
In einem Clean Room mit Standardeinstellungen fügt der Anbieter eine Vorlage zu einem Clean Room hinzu und der Verbraucher führt die Vorlage aus, wie in der Dokumentation zur Verwendung von kundenspezifischen Vorlagen beschrieben.
Ein kurzes Beispiel¶
Hier ist ein einfaches SQL-Beispiel, das eine Anbieter- und eine Verbrauchertabelle per E-Mail verknüpft und die Überlappungszahl pro Stadt anzeigt:
So würde diese Abfrage als JinjaSQL-Vorlage aussehen, die es dem Aufrufer ermöglicht, die Spalten JOIN und GROUP BY sowie die verwendeten Tabellen auszuwählen:
Anmerkungen zur Vorlage:
Werte innerhalb von {{ double bracket pairs }} sind benutzerdefinierte Variablen.
group_by_col,my_table,source_table,consumer_join_col,provider_join_colundgroup_by_colsind alle benutzerdefinierten Variablen, die vom Aufrufer eingegeben werden.source_tableundmy_tablesind von Snowflake definierte Zeichenfolgen-Array-Variablen, die vom Aufrufer aufgefüllt werden. Array-Mitglieder sind vollqualifizierte Namen von Anbieter- und Verbrauchertabellen, die mit dem Clean Room verknüpft sind. Der Aufrufer gibt an, welche Tabellen in jedes Array aufgenommen werden sollen.Anbietertabellen müssen mit dem Kleinbuchstaben
pund Verbrauchertabellen mit dem Kleinbuchstabencals Alias in einer Vorlage verwendet werden. Wenn Sie mehrere Tabellen haben, können Sie diese alsp1,p2,c1,c2und so weiter indizieren.IDENTIFIER wird für alle Spalten- und Tabellennamen benötigt, da Variablen in {{ double brackets }} als Zeichenfolgenliterale ausgewertet werden, die keine gültigen Bezeichner sind.
JinjaSQL-Filter können auf Variablen angewendet werden, um beliebige, von einer der beiden Seiten festgelegte Join- oder Spaltenrichtlinien zu erzwingen. Snowflake implementiert die kundenspezifischen Filter
join_policyundcolumn_policy, die überprüfen, ob eine Spalte den Verknüpfungs- bzw. Spaltenrichtlinien im Clean Room entspricht, und die Abfrage fehlschlagen lässt, wenn dies nicht der Fall ist. Ein Filter wird auf einen Spaltennamen als{{ column_name | filter_name }}angewendet.
All diese Punkte werden wir später im Detail besprechen.
Hier wird gezeigt, wie ein Verbrauchender diese Vorlage im Code ausführen könnte. Beachten Sie, wie Spaltennamen durch die in der Vorlage deklarierten Tabellenaliasse qualifiziert werden.
Um diese Vorlage in der Clean Rooms-UI zu verwenden, muss der Anbieter ein kundenspezifisches UI-Formular für die Vorlage erstellen. Das UI-Formular hat benannte Formularelemente, die den Namen der Vorlagenvariablen entsprechen, und die im Formular angegebenen Werte werden an die Vorlage übergeben.
Entwickeln einer benutzerdefinierten Vorlage¶
Clean Room-Vorlagen sind JinjaSQL-Vorlagen. Um eine -Vorlage zu erstellen, sollten Sie mit den folgenden Themen vertraut sein:
Verwenden Sie die Prozedur consumer.get_jinja_sql, um die Gültigkeit Ihrer Vorlage zu testen, und führen Sie dann die gerenderte Vorlage aus, um zu sehen, ob sie die erwarteten Ergebnisse liefert. Beachten Sie, dass diese Prozedur keine Clean Room-Filtererweiterungen unterstützt, wie z. B. join_policy, sodass Sie Ihre Vorlage ohne diese Filter testen müssen und diese später hinzufügen müssen.
Beispiel:
Die gerenderte Vorlage sieht wie folgt aus:
Versuchen Sie, die obige SQL-Anweisung in Ihrer Umgebung auszuführen, um zu sehen, ob sie funktioniert und die erwarteten Ergebnisse liefert.
Dann testen Sie Ihre Vorlage ohne WHERE-Klausel:
Gerenderte Vorlage:
Fügen Sie die Richtlinienfilter zur Vorlage hinzu, und fügen Sie die Vorlage zu Ihrem Clean Room hinzu:
Datenschutz¶
Vorlagen können nur auf Datensets zugreifen, die vom Anbietenden und Verbrauchenden mit dem Clean Room verknüpft sind.
Sowohl Anbieter als auch Verbraucher können Verknüpfungs-, Spalten- und Aktivierungsrichtlinien für ihre Daten festlegen, um zu definieren, welche Spalten verknüpft, projiziert oder aktiviert werden können. Die Vorlage muss aber den entsprechenden JinjaSQL-Richtlinienfilter auf einer Spalte enthalten, damit die Richtlinie angewendet wird.
Syntax einer benutzerdefinierten Vorlage¶
Snowflake Data Clean Rooms unterstützt V3 JinjaSQL, mit einigen Erweiterungen (wie angegeben).
Dieser Abschnitt enthält die folgenden Themen:
Regeln für die Benennung von Vorlagen¶
Beim Erstellen einer Vorlage dürfen Namen nur aus Kleinbuchstaben, Zahlen, Leerzeichen oder Unterstrichen bestehen. Aktivierungsvorlagen (mit Ausnahme der vom Verbraucher ausgeführten Anbieteraktivierungen) müssen einen Namen haben, der mit activation_ beginnt. Die Namen der Vorlagen werden zugewiesen, wenn Sie provider.add_custom_sql_template oder consumer.create_template_request aufrufen.
Beispiel für gültige Namen:
my_templateactivation_template_1
Beispiel für ungültige Namen:
my template- Leerzeichen nicht erlaubtMy_Template- Nur Vorlagen mit Kleinschreibung erlaubt
Vorlagenvariablen¶
Vorlagenaufrufer können Werte an Vorlagenvariablen übergeben. Die JinjaSQL-Syntax ermöglicht die Variablenbindung für jeden Variablennamen innerhalb von {{ double_brackets }}, aber Snowflake reserviert einige Variablennamen, die Sie nicht überschreiben sollten, wie unten beschrieben.
Vorsicht
Alle Variablen, ob von Snowflake definiert oder kundenspezifisch, werden vom Benutzenden befüllt und sollten mit der entsprechenden Vorsicht behandelt werden. Snowflake Data Clean Rooms-Vorlagen müssen in eine einzelne SELECT-Anweisung aufgelöst werden, aber Sie sollten trotzdem daran denken, dass alle Variablen vom Aufrufenden übergeben werden.
Snowflake-definierte Variablen¶
Alle Clean Room-Vorlagen haben Zugriff auf die folgenden globalen Variablen, die von Snowflake definiert, aber vom Aufrufenden übergeben werden:
source_table:Ein nullbasiertes Zeichenfolgen-Array von mit Anbietern verknüpften Tabellen und Ansichten im Clean Room, die von der Vorlage verwendet werden können. Tabellennamen sind voll qualifiziert, zum Beispiel:
my_db.my_sch.provider_customersBeispiel:
SELECT col1 FROM IDENTIFIER({{ source_table[0] }}) AS p;my_table:Ein nullbasiertes Zeichenfolgen-Array von Verbrauchertabellen und -ansichten im Clean Room, die von der Vorlage verwendet werden können. Tabellennamen sind voll qualifiziert, zum Beispiel:
my_db.my_sch.consumer_customersBeispiel:
SELECT col1 FROM IDENTIFIER({{ my_table[0] }}) AS c;privacy:Eine Reihe von datenschutzbezogenen Werten, die mit Benutzern und Vorlagen verbunden sind. Siehe die Liste der verfügbaren untergeordneten Felder. Sie können diese Werte für den Benutzer explizit festlegen, aber möglicherweise möchten Sie Standardwerte in der Vorlage einrichten. Greifen Sie auf die untergeordneten Felder direkt in Ihrer Vorlage zu, z. B.
privacy.threshold.Beispiel: Hier ist ein Beispiel für eine Vorlage, die
threshold_valueverwendet, um eine Mindestgruppengröße in einer Aggregationsklausel zu erzwingen.measure_column:dimensions:where_clause:Ältere globale Clean Room-Variablen (Legacy). Sie werden nicht mehr für die Verwendung empfohlen, sind aber immer noch definiert und erscheinen in einigen älteren Vorlagen und der Dokumentation. Sie sollten also einen dieser Namen nicht als Alias für Tabellen oder Spalten verwenden, um Namenskonflikte zu vermeiden.
Wenn Ihre Vorlage
measure_columnoderdimensionsverwendet, wird die Spaltenrichtlinie mit allen Spalten überprüft, die an diese Variablen übergeben werden.Wenn Ihre Vorlage eine
where_clauseverwendet, die eine Verknüpfungsbedingung hat (z. B.table1.column1 = table2.column2), wird die Verknüpfungsrichtlinie für alle dort benannten Spalten geprüft. Andernfalls wird die Spaltenrichtlinie für alle dort benannten Spalten geprüft.
Benutzerdefinierte Variablen¶
Vorlagenersteller können beliebige Variablen in eine Vorlage aufnehmen, die vom Aufrufer befüllt werden können. Diese Variablen, außer die von Snowflake definierten Variablen oder Tabellen-Aliasnamen, können einen beliebigen Jinja-kompatiblen Namen haben. Wenn Sie möchten, dass Ihre Vorlage in der Clean Rooms-UI verwendet werden kann, müssen Sie auch ein UI-Formular für Clean Rooms-UI-Benutzer angeben. Für API-Benutzer sollten Sie eine gute Dokumentation für die erforderlichen und optionalen Variablen bereitstellen.
Auf benutzerdefinierte Variablen kann von Ihrer Vorlage aus zugegriffen werden, wie hier für die benutzerdefinierte Variable max_income gezeigt:
Benutzer können Variablen auf zwei verschiedene Arten an eine Vorlage übergeben:
In der Clean Rooms-UI durch Auswahl oder Bereitstellung von Werten über einUI-Formular, das vom Entwickler der Vorlage erstellt wurde. Dieses UI-Formular enthält Formularelemente, in denen der Benutzer Werte für Ihre Vorlage bereitstellen kann. Der Name des Formularelements ist der Name der Variablen. Die Vorlage verwendet einfach den Namen des Formularelements, um auf den Wert zuzugreifen. Erstellen Sie das UI-Formular mit provider.add_ui_form_customizations.
Im Code ruft ein Verbraucher consumer.run_analysis auf und übergibt Tabellennamen als Argument-Arrays und benutzerdefinierte Variablen als Name-Wert-Paare an das Argument
analysis_arguments.
Bemerkung
Wenn Sie in einem benutzerdefinierten Python-Code, der in den Clean Room hochgeladen wurde, auf vom Benutzer bereitgestellte Werte zugreifen müssen, ist die explizite Übergabe von Variablenwerten an den Code über Python-Funktionsargumente notwendig. Vorlagenvariablen sind innerhalb des Python-Codes mit {{jinja variable binding syntax}} nicht direkt zugänglich.
Variablen richtig auflösen¶
In die Vorlage übergebene Zeichenfolgenwerte werden in der endgültigen Vorlage in ein Zeichenfolgenliteral aufgelöst. Dies kann zu SQL-Parsing- oder logischen Fehlern führen, wenn Sie gebundene Variablen nicht angemessen behandeln:
SELECT {{ my_col }} FROM P;wird zuSELECT 'my_col' from P;aufgelöst, sodass einfach die Zeichenfolge „my_col“ zurückgegeben wird, was wahrscheinlich nicht Ihr Ziel war.SELECT age FROM {{ my_table[0] }} AS P;wird zuSELECT age FROM 'somedb.somesch.my_table' AS P;aufgelöst, was einen Parsing-Fehler verursacht, da eine Tabelle ein Bezeichner und keine literale Zeichenfolge sein muss.Die Übergabe von
SELECT age FROM IDENTIFIER({{ my_table[0] }}) AS P {{ where_clause }};in „WHERE Alter < 50“ ergibtSELECT age FROM mytable AS P 'WHERE age < 50';, was aufgrund der WHERE-Klausel der literalen Zeichenfolge ein Parsing-Fehler ist.
Daher müssen Sie, wo es angebracht ist, Variablen auflösen. Hier erfahren Sie, wie Sie Variablen in Ihrer Vorlage richtig auflösen:
- Auflösen von Tabellen- und Spaltennamen
Variablen, die Tabellen- oder Spaltennamen enthalten, müssen auf eine der beiden folgenden Arten in Bezeichner in Ihrer Vorlage umgewandelt werden:
IDENTIFIER: Beispiel:
SELECT IDENTIFIER({{ my_column }}) FROM P;sqlsafe: Dieser JinjaSQL-Filter löst Bezeichnerzeichenfolgen in SQL-Text auf. Eine gleichwertige Anweisung zum vorherigen Punkt ist
SELECT {{ my_column | sqlsafe }} FROM P;
Ihre spezielle Nutzung bestimmt, wann IDENTIFIER oder
sqlsafeverwendet werden. Beispiel:c.{{ my_column | sqlsafe }}kann nicht einfach mit IDENTIFIER umgeschrieben werden.- Auflösen von dynamischem SQL
Wenn Sie eine Zeichenfolgenvariable haben, die als Literal-SQL verwendet werden soll, wie z. B. eine WHERE Klausel, verwenden Sie den
sqlsafe-Filter in Ihrer Vorlage. Beispiel:Wenn ein Benutzender „Alter < 50“ an
where_clauseübergibt, würde die Abfrage inSELECT Alter FROM sometable AS C WHERE „Alter < 50“;aufgelöst werden, was ungültige SQL aufgrund der WHERE-Bedingung der literalen Zeichenfolge ist. In diesem Fall sollten Sie densqlsafe-Filter verwenden:
Erforderliche Tabellen-Aliasse¶
Auf der obersten Ebene Ihrer Abfrage müssen alle Tabellen oder Unterabfragen mit dem Alias p (für Anbietertabellen) oder c (für Verbrauchertabellen) versehen werden, damit Snowflake die Verknüpfungs- und Spaltenrichtlinien in der Abfrage korrekt überprüfen kann. Jede Spalte, die anhand von Verknüpfungs- oder Spaltenrichtlinien verifiziert werden soll, muss mit dem Tabellenalias kleines p oder c qualifiziert sein. (Die Angabe von p oder c teilt dem Backend mit, ob eine Spalte anhand der Anbieter- oder der Verbraucherrichtlinie validiert werden soll).
Wenn Sie in Ihrer Abfrage mehrere Anbieter- oder Verbrauchertabellen verwenden, fügen Sie jedem Tabellenalias nach der ersten ein numerisches, fortlaufendes 1-basiertes Suffix hinzu. Also: p, p1, p2``usw. für die erste, zweite und dritte Anbietertabelle oder ``c, c1, c2 usw. für die erste, zweite und dritte Verbrauchertabelle. Der p- oder c-Index sollte ohne Lücken sequenziell sein (d. h. nutzen Sie die Aliasnamen p, p1 und p2, nicht p, p2 und p4).
Beispiel
Kundenspezifische Clean Room-Filter¶
Snowflake unterstützt alle Standard-Jinja-Filter und die meisten der Standard-JinjaSQL-Filter sowie einige Erweiterungen:
join_policy: Erfolgreich, wenn die Spalte in der Verknüpfungsrichtlinie des Dateneigentümers enthalten ist; schlägt andernfalls fehl.column_policy: Erfolgreich, wenn die Spalte in der Spaltenrichtlinie des Dateneigentümers enthalten ist; schlägt andernfalls fehl.activation_policy: Erfolgreich, wenn die Spalte in der Aktivierungsrichtlinie des Dateneigentümers enthalten ist; schlägt andernfalls fehl.join_and_column_policy: Erfolgreich, wenn die Spalte in der Verknüpfungs- oder Spaltenrichtlinie des Dateneigentümers enthalten ist; schlägt andernfalls fehl.Der
identifierJinjaSQL-Filter wird von Snowflake-Vorlagen nicht unterstützt.
Tipp
JinjaSQL-Anweisungen werden von links nach rechts ausgewertet:
{{ my_col | column_policy }}Richtig{{ my_col | sqlsafe | column_policy }}Richtig{{ column_policy | my_col }}Falsch{{ my_col | column_policy | sqlsafe }}Falsch:column_policywird mit demmy_col-Wert als Zeichenfolge abgeglichen, was ein Fehler ist.
Clean Room-Richtlinien durchsetzen¶
Clean Rooms überprüfen nicht automatisch Clean Room-Richtlinien für die Spalten, die in einer Vorlage verwendet werden. Wenn Sie eine Richtlinie für eine Spalte erzwingen möchten:
Sie müssen den entsprechenden Richtlinienfilter auf diese Spalte in der Vorlage anwenden. Beispiel:
Sie müssen für die Tabelle den Alias mit kleinem p oder c verwenden. Siehe Erforderliche Tabellen-Aliasse.
Richtlinien werden nur für Spalten geprüft, die anderen Teilnehmern gehören. Richtlinien werden nicht auf Ihre eigenen Daten geprüft.
Beachten Sie beim Testen von Richtlinien, dass Spaltennamen nicht mehrdeutig sein dürfen. Wenn Sie also Spalten mit demselben Namen in zwei Tabellen haben, müssen Sie den Spaltennamen qualifizieren, um die Richtlinie für diese Spalte testen zu können.
Benutzerdefinierten Python-Code ausführen¶
Vorlagen können Python-Code ausführen, der in den Clean Room hochgeladen wurde. Die Vorlage kann eine Python-Funktion aufrufen, die Werte aus einer Datenzeile entgegennimmt und Werte zurückgibt, die in der Abfrage verwendet oder projiziert werden können.
Wenn ein Anbieter benutzerdefinierten Python-Code in einen Clean Room hochlädt, ruft die Vorlage Python-Funktionen mit der Syntax
cleanroom.function_nameauf. Weitere Details dazu finden Sie hier.Wenn ein Verbraucher benutzerdefinierten Python-Code in einen Clean Room hochlädt, ruft die Vorlage die Funktion mit dem leeren
function_name-Wert auf, der anconsumer.generate_python_request_templateübergeben wird (nicht wie der Anbietercode aufClean Roombeschränkt). Weitere Details dazu finden Sie hier.
Beispiel für einen Anbietercode:
Sicherheitshinweise¶
Eine Clean Room-Vorlage wird nicht mit der Identität des aktuellen Benutzers ausgeführt.
Der Benutzende hat keinen direkten Zugriff auf Daten innerhalb des Clean Rooms. Der gesamte Zugriff erfolgt über die native Anwendung über die Ergebnisse der Vorlage.
Wenden Sie jedes Mal, wenn eine Spalte in Ihrer Vorlage verwendet wird, einen Richtlinienfilter an, um sicherzustellen, dass Ihre Richtlinien und die Richtlinien aller Teilnehmer beachtet werden.
Schließen Sie vom Benutzer bereitgestellte Variablen wenn möglich mit IDENTIFIER() ein, um Ihre Vorlagen gegen SQL-Einschleusungsangriffe auszurüsten.
Aktivierungsvorlagen¶
Eine Vorlage kann auch verwendet werden, um Abfrageergebnisse in einer Tabelle außerhalb des Clean Room zu speichern; dies wird Aktivierung genannt. Derzeit werden für benutzerdefinierte Vorlagen nur die Anbieteraktivierung und die Verbraucheraktivierung (Speicherung der Ergebnisse im Snowflake-Konto des Anbieters bzw. Verbrauchers) unterstützt. Erfahren Sie, wie Sie die Aktivierung implementieren.
Eine Aktivierungsvorlage ist eine Analysevorlage mit den folgenden zusätzlichen Anforderungen:
Aktivierungsvorlagen sind JinjaSQL-Anweisungen, die einen SQL-Skriptblock ergeben, im Gegensatz zu Analysevorlagen, die einfache SELECT-Anweisungen sein können.
Aktivierungsvorlagen erstellen eine Tabelle im Clean Room, in der die Ergebnisse gespeichert werden, und geben den Tabellennamen (oder ein Fragment des Namens) an den Aufrufer der Vorlage zurück.
Der Skriptblock sollte mit einer RETURN-Anweisung enden, die den Namen der generierten Tabelle abzüglich des Präfix
cleanroom.odercleanroom.activation_data_zurückgibt.Der Name der Vorlage, der Name der internen Tabelle, die die Vorlage erstellt, und der Tabellenname, den die Vorlage zurückgibt, folgen diesen Mustern:
Aktivierungstyp |
Namenspräfix für die Vorlage |
Namenspräfix für die Tabelle |
Zurückgegebener Tabellenname |
|---|---|---|---|
Vom Verbraucher ausgeführte |
|
|
Tabellenname ohne Präfix |
Vom Verbraucher ausgeführter Anbieter |
Kein Präfix erforderlich |
|
Tabellenname ohne Präfix |
Vom Anbieter ausgeführte |
|
|
|
Alle Spalten, die aktiviert werden, müssen in der Aktivierungsrichtlinie des Anbieters oder Verbrauchers, der die Daten verknüpft hat, aufgelistet sein. Zudem sollte der
activation_policy-Filter darauf angewendet worden sein. Beachten Sie, dass eine Spalte sowohl eine Aktivierungs- als auch eine Verknüpfungsspalte sein kann.Wenn die Vorlage von der Clean Rooms-UI ausgeführt werden soll , sollten Sie ein Webformular bereitstellen, das den
activation_template_nameundenabled_activations-Felder enthält. Vorlagen zur Verwendung in der UI müssen sowohl eine Analysevorlage als auch eine zugehörige Aktivierungsvorlage haben.Alle berechneten Spalten müssen explizit mit einem Alias versehen werden und dürfen keine abgeleiteten Namen haben, da eine Tabelle erzeugt wird. Das heißt:
SELECT COUNT(*), p.status from T AS P;FAILS, weil der Spaltenname COUNT abgeleitet ist.SELECT COUNT(*) AS COUNT_OF_ITEMS, p.status from T AS P;SUCCEEDS, da dies explizit ein Alias für die Spalte COUNT verwendet.
Hier finden Sie zwei Beispiele für grundlegende Aktivierungsvorlagen. Eine ist für die vom Anbieter durchgeführte Serveraktivierung, die andere für andere Aktivierungstypen. Sie unterscheiden sich durch die beiden hervorgehobenen Zeilen, die den Namen der Ergebnistabelle enthalten.
Tabelle muss heißen cleanroom.temp_result_data:
Tabellenname benötigt das Präfix cleanroom.activation_data:
Nächste Schritte¶
Nachdem Sie das Vorlagensystem gemeistert haben, lesen Sie sich die Einzelheiten zur Implementierung eines Clean Room mit Ihrem Vorlagentyp durch:
Anbietervorlagen sind Vorlagen, die vom Anbieter geschrieben wurden. Dies ist der Standardanwendungsfall.
Verbrauchervorlagen sind vom Verbraucher geschriebene Vorlagen. In manchen Fällen möchte ein Ersteller von Clean Rooms es dem Verbraucher ermöglichen, seine eigenen Vorlagen im Clean Room zu erstellen, hochzuladen und auszuführen.
Aktivierungsvorlagen erstellen eine Ergebnistabelle nach einer erfolgreichen Ausführung. Je nach Aktivierungsvorlage kann die Ergebnistabelle entweder im Konto des Anbietenden oder des Verbrauchenden außerhalb des Clean Rooms gespeichert oder an einen im Activation Hub aufgeführten Dritt-Aktivierungsanbieter gesendet werden.
Verkettete Vorlagen ermöglichen es Ihnen, mehrere Vorlagen miteinander zu verketten, wobei die Ausgabe jeder Vorlage von der nächsten Vorlage in der Kette verwendet wird.