Benutzerdefinierte Clean Room-Vorlagen erstellen¶
Über Clean Room-Vorlagen¶
Clean Room-Vorlagen werden in JinjaSQL geschrieben. JinjaSQL ist eine Erweiterung der Jinja-Vorlagensprache, die eine SQL-Abfrage als Ausgabe erzeugt. JinjaSQL unterstützt logische Anweisungen und die Auflösung von Laufzeitvariablen, damit der Benutzer die Abfrage während der Laufzeit anpassen kann. Variablen werden in der Regel in einer Vorlage verwendet, damit ein Benutzer Tabellennamen, Tabellenspalten und benutzerdefinierte Werte für seine Abfrage angeben kann.
Snowflake bietet eine Auswahl an vorgefertigten Vorlagen für gängige Anwendungsfälle. Diese Standardvorlagen können nur in der Webanwendung verwendet werden. Sowohl Anbieter als auch Verbraucher können jedoch benutzerdefinierte Vorlagen für einen Clean Room erstellen. Benutzerdefinierte Vorlagen können nur im Code erstellt werden, können aber entweder im Code oder über die Webanwendung ausgeführt werden.
Es gibt zwei allgemeine Vorlagentypen:
Analysevorlagen, die eine SELECT-Anweisung (oder eine Reihe von SELECT-Operationen) ergeben.
Aktivierungsvorlagen, die eine SELECT-Anweisung ergeben, die in einer CREATE TABLE-Anweisung verschachtelt ist, und den Tabellennamen zurückgeben. Diese Vorlage generiert Daten, die in das Snowflake-Konto des Verbrauchers oder Anbieters oder an einen Dritten exportiert werden, je nachdem, wie der Clean Room konfiguriert ist. Eine Aktivierungsvorlage ist einer Analysevorlage sehr ähnlich, mit ein paar zusätzlichen Anforderungen.
In der Clean Room UI kann eine Analysevorlage mit einer Aktivierungsvorlage verknüpft werden, damit der Aufrufer eine Analyse durchführen und anschließend Daten an sich selbst oder einen Dritten senden kann. Die Aktivierungsvorlage muss nicht in dieselbe Abfrage wie die zugehörige Analysevorlage aufgelöst werden.
Benutzerdefinierte Vorlage erstellen und ausführen¶
Bei einem Clean Room mit Standardeinstellungen fügt der Anbieter eine Vorlage zu einem Clean Room hinzu und der Verbraucher kann diese auswählen, konfigurieren und ausführen:
Der Anbieter entwirft eine benutzerdefinierte Vorlage und fügt sie durch den Aufruf von
provider.add_custom_sql_template
zu einem Clean Room hinzu.Der Verbraucher ruft
consumer.run_analysis
auf, um die Vorlage des Anbieters auszuführen, und übergibt dabei Werte für alle von der Vorlage benötigten Variablen.
Für diesen Ablauf sind keine Genehmigungen der anderen Partei erforderlich, außer dass der Verbraucher vom Anbieter in einen Clean Room eingeladen werden muss. Es gibt verschiedene Varianten dieses Prozesses, z. B. von Verbrauchern bereitgestellte Vorlagen und vom Anbieter ausgeführte Vorlagen, die an anderer Stelle behandelt werden.
Datenschutz¶
Vorlagen können nur auf Datensätze zugreifen, die vom Anbieter und vom Verbraucher mit dem Clean Room verknüpft wurden.
Sowohl der Anbieter als auch der Verbraucher haben die Möglichkeit, für ihre Daten Verknüpfungs-, Spalten- und Aktivierungsrichtlinien festzulegen, um zu schützen, welche Spalten verknüpft, projiziert oder in aktivierte Ergebnisse projiziert werden können.
Ein kurzes Beispiel¶
Hier ist ein einfaches SQL-Beispiel, das eine Anbieter- und eine Verbrauchertabelle nach E-Mail verknüpft und die Anzahl der Überlappungen pro Stadt anzeigt:
SELECT COUNT(*), city FROM consumer_table
INNER JOIN provider_table
ON consumer_table.hashed_email = provider_table.hashed_email
GROUP BY city;
Hier sehen Sie, wie diese Abfrage als Vorlage aussehen würde, die es dem Aufrufer ermöglicht, die Auswahl/Gruppen- und Verknüpfungsspalten sowie die Tabellen auszuwählen:
SELECT COUNT(*), IDENTIFIER({{ group_by_col | column_policy }})
FROM IDENTIFIER({{ my_table[0] }}) AS C
INNER JOIN IDENTIFIER({{ source_table[0] }}) AS P
ON IDENTIFIER({{ consumer_join_col | join_policy }}) = IDENTIFIER({{ provider_join_col | join_policy }})
GROUP BY IDENTIFIER({{ group_by_col | column_policy }});
Anmerkungen zur Vorlage:
Werte innerhalb von {{ double bracket pairs }} sind benutzerdefinierte Variablen.
group_by_col
,my_table
,source_table
,consumer_join_col
,provider_join_col
undgroup_by_col
sind alle benutzerdefinierten Variablen, die vom Aufrufer eingegeben werden.source_table
undmy_table
sind 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 in einer Vorlage dem Alias
P
und Verbrauchertabellen dem AliasC
zugeordnet sein. Wenn Sie mehrere Tabellen haben, können Sie diese alsP1
,P2
,C1
,C2
usw. 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. Snowflake implementiert die benutzerdefinierten Filter
join_policy
undcolumn_policy
, die überprüfen, ob eine Spalte den Verknüpfungs- bzw. Spaltenrichtlinien im Clean Room entspricht, und die Abfrage fehlschlagen lassen, wenn dies nicht der Fall ist. Ein Filter wird auf einen Spaltennamen wie{{ column_name | filter_name }}
angewendet.
All diese Punkte werden wir später im Detail besprechen.
Hier sehen Sie, wie ein Verbraucher diese Vorlage im Code ausführen könnte. Beachten Sie, wie die Spaltennamen durch die in der Vorlage deklarierten Tabellen-Aliasse qualifiziert werden.
CALL SAMOOHA_BY_SNOWFLAKE_LOCAL_DB.CONSUMER.RUN_ANALYSIS(
$cleanroom_name,
$template_name,
['my_db.my_sch.consumer_table], -- Populates the my_table variable
['my_db.my_sch.provider_table'], -- Populates the source_table variable
OBJECT_CONSTRUCT( -- Populates custom named variables
'consumer_join_col','c.age_band',
'provider_join_col','p.age_band',
'group_by_col','p.device_type'
)
);
Um diese Vorlage in der Webanwendung verwenden zu können, muss der Anbieter ein benutzerdefiniertes UI-Formular für die Vorlage erstellen. Das UI-Formular hat benannte Formularelemente, die den Namen von Vorlagenvariablen entsprechen, und die im Formular angegebenen Werte werden an die Vorlage übergeben.
Tipp
In der frühen Entwicklungsphase können Sie die Prozedur consumer.get_sql_jinja verwenden, um zu sehen, wie Ihre Vorlage aussehen wird, wenn sie gerendert wird. Beachten Sie jedoch, dass diese Prozedur keine Clean Room-Filtererweiterungen wie join_policy
unterstützt, sodass Sie diese Filter in jeder Vorlage, die an diese Prozedur gesendet wird, weglassen müssen.
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¶
Wenn Sie eine Vorlage erstellen, müssen die Namen ausschließlich aus Kleinbuchstaben, Zahlen, Leerzeichen oder Unterstrichen bestehen. Aktivierungsvorlagen (außer für die von Verbrauchern durchgeführte Aktivierung von Anbietern) müssen einen Namen haben, der mit „activation“ beginnt. Vorlagennamen werden zugewiesen, wenn Sie provider.add_custom_sql_template
oder consumer.create_template_request
aufrufen.
Beispiel für gültige Namen:
my_template
activation_template_1
Beispiel für ungültige Namen:
my template
- Leerzeichen nicht erlaubtMy_Template
- Nur Vorlagen mit Kleinschreibung erlaubt
Vorlagenvariablen¶
Aufrufer von Vorlagen können Werte an Vorlagenvariablen übergeben. Die JinjaSQL-Syntax ermöglicht die Variablenbindung für jeden Variablennamen innerhalb von {{ double_brackets }}, aber Snowflake behält sich einige Variablennamen vor, die Sie nicht überschreiben sollten, wie unten beschrieben.
Vorsicht
Alle Variablen, ob von Snowflake definiert oder benutzerdefiniert, werden vom Benutzer eingegeben und sollten mit entsprechender Vorsicht behandelt werden. Snowflake Data Clean Rooms-Vorlagen müssen eine einzige SELECT-Anweisung ergeben, aber Sie sollten trotzdem daran denken, dass alle Variablen vom Aufrufer übergeben werden.
Snowflake-definierte Variablen¶
Alle Clean Room-Vorlagen haben Zugriff auf die folgenden globalen Variablen, die von Snowflake definiert, aber vom Aufrufer ü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_customers
Beispiel:
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_customers
Beispiel:
SELECT col1 FROM IDENTIFIER({{ my_table[0] }}) AS c;
privacy
:Eine Reihe von datenschutzbezogenen Werten, die mit Benutzern und Vorlagen verknüpft sind. Siehe die Liste der verfügbaren untergeordneten Felder. Diese Werte können explizit für den Benutzer eingestellt werden, aber Ihre Vorlage sollte immer einen Standardwert bereitstellen, falls sie nicht eingestellt sind. Greifen Sie direkt auf die untergeordneten Felder in Ihrer Vorlage zu, z. B.
privacy.threshold
.Beispiel: Hier ist ein Beispiel für eine Vorlage, die
threshold_value
verwendet, um eine Mindestgruppengröße in einer Aggregationsklausel zu erzwingen.SELECT IFF(a.overlap > ( {{ privacy.threshold_value | default(2) | sqlsafe }} ), a.overlap,1 ) AS overlap, c.total_count AS total_count ...
Bemerkung
Es gibt zwei globale Legacy-Clean Room-Variablen: measure_columns
und dimensions
. Ihre Verwendung wird nicht mehr empfohlen, aber sie sind immer noch definiert und erscheinen in einigen Legacy-Vorlagen und in der Dokumentation. Sie sollten also keine Tabellen oder Spalten mit einem dieser Namen einem Alias zuordnen, um Namenskonflikte zu vermeiden.
Benutzerdefinierte Variablen¶
Vorlagenersteller können beliebige Variablen in eine Vorlage aufnehmen, die vom Aufrufer ausgefüllt werden können. Diese Variablen können jeden beliebigen Jinja-kompatiblen Namen haben, mit Ausnahme der von Snowflake definierten Variablen oder Tabellenaliasnamen. Wenn Sie möchten, dass Ihre Vorlage in der Webanwendung verwendet werden kann, müssen Sie auch ein UI-Formular für Benutzer der Webanwendung bereitstellen. Für Benutzer der API 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:
SELECT income FROM my_db.my_sch.customers WHERE income < {{ max_income }};
Benutzer können Variablen auf zwei verschiedene Arten an eine Vorlage übergeben:
In der Webanwendung durch Auswahl oder Eingabe von Werten über ein vom Vorlagenentwickler erstelltes UI-Formular. Dieses UI-Formular enthält Formularelemente, in denen der Benutzer Werte für Ihre Vorlage eingeben 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 wird, auf vom Benutzer bereitgestellte Werte zugreifen müssen, müssen Sie Variablenwerte explizit über Python-Funktionsargumente an den Code übergeben; auf Vorlagenvariablen kann innerhalb des Python-Codes nicht direkt über {{jinja variable binding syntax}}
zugegriffen werden.
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;
ergibtSELECT 'my_col' from P;
, was einfach die Zeichenfolge „my_col“ zurückgibt - wahrscheinlich nicht das, was Sie wollen.SELECT age FROM {{ my_table[0] }} AS P;
ergibtSELECT age FROM 'somedb.somesch.my_table' AS P;
, was zu einem Parsing-Fehler führt, da eine Tabelle ein Bezeichner sein muss und keine literale Zeichenfolge.SELECT age FROM IDENTIFIER({{ my_table[0] }}) AS P {{ where_clause }};
mit der Übergabe von „WHERE age < 50“ ergibtSELECT age FROM mytable AS P 'WHERE age < 50';
, was ein Parsing-Fehler aufgrund der WHERE-Klausel mit literaler Zeichenfolge ist.
Daher müssen Sie, wo es angebracht ist, Variablen auflösen. Hier erfahren Sie, wie Sie Variablen in Ihrer Vorlage richtig auflösen:
- 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: Zum Beispiel:
SELECT IDENTIFIER({{ my_column }}) FROM P;
sqlsafe: Dieser JinjaSQL-Filter löst Bezeichnerzeichenfolgen in SQL-Text auf. Eine äquivalente Anweisung zum vorherigen Aufzählungspunkt ist
SELECT {{ my_column | sqlsafe }} FROM P;
Ihr spezieller Verwendungszweck bestimmt, wann Sie IDENTIFIER oder
sqlsafe
verwenden sollten. Zum Beispiel kannc.{{ my_column | sqlsafe }}
nicht einfach mit IDENTIFIER umgeschrieben werden.- Dynamisch 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:SELECT age FROM IDENTIFIER({{ my_table[0] }}) AS C WHERE {{ where_clause }};
Wenn ein Benutzer „age < 50“ in
where_clause
eingibt, würde die AbfrageSELECT age FROM sometable AS C WHERE 'age < 50';
ergeben, was aufgrund der Bedingung WHERE mit literaler Zeichenfolge ungültiger SQL-Code ist. In diesem Fall sollten Sie den Filtersqlsafe
verwenden:SELECT age FROM IDENTIFIER( {{ my_table[0] }} ) as C {{ where_clause | sqlsafe }};
Erforderliche Tabellen-Aliasse¶
Auf der obersten Ebene Ihrer Abfrage müssen alle Tabellen oder Unterabfragen entweder 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 validieren kann. Jede Spalte, die anhand von Verknüpfungs- oder Spaltenrichtlinien überprüft werden muss, gehört zu einer Tabelle, die entweder mit dem Alias P
oder C
versehen ist. (Durch die Angabe von P
oder C
wird dem Backend mitgeteilt, ob eine Spalte anhand der Anbieter- oder der Verbraucherrichtlinie validiert werden soll.)
Wenn Sie mehrere Anbieter- oder Verbrauchertabellen in Ihrer Abfrage verwenden, fügen Sie an jeden Tabellenalias nach dem ersten ein numerisches, auf 1 basierendes Suffix an. Also: P
, P1
, P2
und so weiter für die erste, zweite und dritte Anbietertabelle und C
, C1
, C2
und so weiter für die erste, zweite und dritte Verbrauchertabelle. Der Index P
oder C
sollte fortlaufend und lückenlos sein (d. h. Sie müssen die Aliase P
, P1
und P2
erstellen, nicht P
, P2
und P4
).
Beispiel
SELECT col1 FROM IDENTIFIER({{ source_table[0] }}) AS P;
Vorlagenfilter¶
Snowflake unterstützt alle Standard-Jinja-Filter und die meisten der Standard-JinjaSQL-Filter sowie einige Erweiterungen:
join_policy
: Überprüft, ob die Spalte gemäß der Verknüpfungsrichtlinie der Tabelle zulässig ist, und schlägt fehl, wenn dies nicht der Fall ist.column_policy
: Überprüft, ob die Spalte gemäß der Spaltenrichtlinie der Vorlage zulässig ist (projiziert werden darf).activation_policy
: Überprüft, ob die gefilterte Spalte gemäß den Aktivierungsrichtlinien des Clean Room erlaubt ist (provider.set_activation_policy
oderconsumer.set_activation_policy
).join_and_column_policy
: Überprüft, ob die Spalte gemäß den Verknüpfungs-, Aktivierungs- oder Spaltenrichtlinien erlaubt ist. Wird verwendet, um mehr Flexibilität im Clean Room zu bieten, damit die Mitarbeiter Verknüpfungs- und Spaltenrichtlinien aktualisieren können, ohne die Vorlage zu ändern.Der JinjaSQL-Filter
identifier
wird nicht von Snowflake-Vorlagen unterstützt.
JinjaSQL-Filter werden von links nach rechts analysiert:
{{ my_col | column_policy }}
Richtig{{ my_col | sqlsafe | column_policy }}
Richtig{{ column_policy | my_col }}
Falsch{{ my_col | column_policy | sqlsafe }}
Falsch
Clean Room-Richtlinien durchsetzen¶
Clean Room-Richtlinien werden nicht automatisch mit den in einer Vorlage verwendeten Spalten verglichen. Wenn Sie eine Richtlinie für eine Spalte durchsetzen möchten, müssen Sie den entsprechenden Richtlinienfilter auf diese Spalte in der Vorlage anwenden. Beispiel:
JOIN IDENTIFIER({{ source_table[0] }}) AS p
ON {{ c_join_col | sqlsafe | join_policy }} = {{ p_join_col | sqlsafe }}
Dadurch wird die Verknüpfungsrichtlinie anhand der an c_join_col
übergebenen Spalte getestet, aber nicht anhand von p_join_col
.
Beachten Sie, dass Spaltennamen beim Testen von Richtlinien nicht mehrdeutig sein dürfen, genau wie bei jeder anderen Verwendung von SQL. Wenn Sie also Spalten mit demselben Namen in zwei Tabellen haben, müssen Sie den Spaltennamen qualifizieren, um die Richtlinie anhand dieser Spalte zu testen.
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_name
auf. Weitere Einzelheiten finden Sie hier.Wenn ein Verbraucher benutzerdefinierten Python-Code in einen Clean Room hochlädt, ruft die Vorlage die Funktion mit dem bloßen
function_name
-Wert auf, der anconsumer.generate_python_request_template
übergeben wird (nicht aufcleanroom
skaliert wie der Code des Anbieters). Weitere Einzelheiten finden Sie hier.
Beispiel für einen Anbietercode:
-- Provider uploads a Python function that takes two numbers and returns the sum.
call samooha_by_snowflake_local_db.provider.load_python_into_cleanroom(
$cleanroom_name,
'simple_addition', -- Function name to use in the template
['someval integer', 'added_val integer'], -- Arguments
[], -- No packages needed
'integer', -- Return type
'main', -- Handler for function name
$$
def main(input, added_val):
return input + int(added_val)
$$
);
-- Template passes value from each row to the function, along with a
-- caller-supplied argument named 'increment'
call samooha_by_snowflake_local_db.provider.add_custom_sql_template(
$cleanroom_name,
'simple_python_example',
$$
SELECT val, cleanroom.simple_addition(val, {{ increment | sqlsafe }})
FROM VALUES (5),(8),(12),(39) AS P(val);
$$
);
Sicherheitshinweise¶
Eine Vorlage muss eine einzige SELECT-Abfrage ergeben, die von der nativen Clean Room-Anwendung ausgeführt wird. Die Vorlage wird nicht mit der Identität des aktuellen Benutzers ausgeführt.
Der Benutzer hat keinen direkten Zugriff auf die Daten im Clean Room. Der Zugriff erfolgt ausschließlich über die native Anwendung anhand der Vorlagenergebnisse.
Wenden Sie jedes Mal einen Richtlinienfilter an, wenn eine Spalte in Ihrer Abfrage verwendet wird, auch wenn Sie einen Spaltennamen explizit in der Vorlage definieren oder wenn die Spalte oder Tabelle von Ihnen bereitgestellt wird. Vielleicht ändern Sie später Ihre Verknüpfungs- oder Spaltenrichtlinien oder ändern die Spalte und vergessen, die Vorlage zu aktualisieren. Für alle vom Benutzer angegebenen Spalten sollten Sie einen join_policy
-, column_policy
-, join_and_column_policy
- oder activation_policy
-Filter anwenden.
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.
Der Name der Aktivierungsvorlage muss mit der Zeichenfolge
activation
beginnen (außer bei Anbieteraktivierungsvorlagen, die von Verbrauchern ausgeführt werden). Beispiel:activation_my_template
.Die Aktivierungsvorlage muss eine Tabelle mit einem Namen erstellen, der von der Art der Aktivierung abhängt, die sie ermöglicht:
Vom Anbieter durchgeführte Anbieteraktivierung: Der generierte Tabellenname muss
cleanroom.temp_result_data
lauten.Alle anderen Aktivierungstypen: Dem generierten Tabellennamen muss das Präfix
cleanroom.activation_data_
vorangestellt werden, zum Beispiel:cleanroom.activation_data_cross_activation_results
. Der Tabellenname sollte innerhalb Ihres Clean Room eindeutig sein.
Diese generierte Tabelle ist eine Zwischentabelle; Sie sollten nicht versuchen, direkt auf sie zuzugreifen.
Der Skriptblock sollte mit der Anweisung RETURN enden, die den Namen der generierten Tabelle abzüglich der Präfixe
cleanroom.
odercleanroom.activation_data_
zurückgibt.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 über die Clean Room UI ausgeführt werden soll, sollten Sie ein Webformular bereitstellen, das die Felder
activation_template_name
undenabled_activations
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, da der Name der Spalte COUNT abgeleitet wird.SELECT COUNT(*) AS COUNT_OF_ITEMS, P.status from T AS P;
SUCCEEDS, da dies explizit ein Alias der Spalte COUNT ist.
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.
-- These are the required table name strings.
BEGIN
CREATE OR REPLACE TABLE cleanroom.temp_result_data AS
SELECT COUNT(c.status) AS ITEM_COUNT, c.status, c.age_band
FROM IDENTIFIER({{ my_table[0] }}) AS c
JOIN IDENTIFIER({{ source_table[0] }}) AS p
ON {{ c_join_col | sqlsafe | activation_policy }} = {{ p_join_col | sqlsafe | activation_policy }}
GROUP BY c.status, c.age_band
ORDER BY c.age_band;
RETURN 'temp_result_data';
END;
-- analysis_results can be whatever name you want.
BEGIN
CREATE OR REPLACE TABLE cleanroom.activation_data_analysis_results AS
SELECT COUNT(c.status) AS ITEM_COUNT, c.status, c.age_band
FROM IDENTIFIER({{ my_table[0] }}) AS c
JOIN IDENTIFIER({{ source_table[0] }}) AS p
ON {{ c_join_col | sqlsafe | activation_policy }} = {{ p_join_col | sqlsafe | activation_policy }}
GROUP BY c.status, c.age_band
ORDER BY c.age_band;
RETURN 'analysis_results';
END;
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 Vorlagen, die vom Verbraucher geschrieben wurden. In manchen Fällen möchte der Ersteller eines Clean Room dem Verbraucher die Möglichkeit geben, eigene Vorlagen zu erstellen, hochzuladen und im Clean Room auszuführen.
Aktivierungsvorlagen erstellen nach einer erfolgreichen Ausführung eine Ergebnistabelle. Je nach Aktivierungsvorlage kann die Ergebnistabelle entweder im Konto des Anbieters oder des Verbrauchers außerhalb des Clean Room gespeichert oder an einen Drittanbieter gesendet werden, der im Activation Hub aufgeführt ist.
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.