Snowflake Data Clean Rooms: Durchführung einer Analyse als Anbieter¶
In diesem Thema finden Sie ein Beispiel dafür, wie ein Anbieter einen Reinraum erstellt und freigibt und dann eine Analyse in diesem Reinraum durchführt, nachdem der Verbraucher seine Daten verlinkt hat. Der Prozess, bei dem ein Anbieter eine Analyse im Reinraum ausführt, wird gemeinhin als „provider-run analysis“ bezeichnet.
Wichtig
Wenn ein Verbraucher einem Anbieter erlaubt, eine Analyse auf einer Vorlage durchzuführen, wird der Verbraucher, nicht der Anbieter, für die durch die Analyse des Anbieters verbrauchten Credits belastet. Nachdem der Verbraucher dem Anbieter erlaubt hat, Analysen durchzuführen, muss er den Reinraum deinstallieren, damit keine Kosten mehr anfallen.
Wenn ein Verbraucher eine Schätzung der Anzahl der vom Anbieter innerhalb eines bestimmten Zeitraums verbrauchten Credits erhalten möchte, kann er die folgende Abfrage ausführen, wobei -5
eine Schätzung der letzten 5 Tage des Computeverbrauchs durch den Anbieter zurückgibt:
SELECT * FROM table(samooha_by_snowflake_local_db_dev.public.udtf(-5));
Der Ablauf dieses Beispiels wechselt zwischen den Aktionen des Anbieters und den Aktionen des Verbrauchers. Diese Abläufe bestehen aus den folgenden Aktionen:
Anbieter:
a. Erstellen eines Reinraums für eine Overlay-Studie.
b. Verknüpfen von Datensets mit dem Reinraum
c. Hinzufügen von Richtlinien, die festlegen, welche Spalten verknüpft und in der Analyse verwendet werden können
d. Aktivieren einer vordefinierte Vorlage für die Überlappungsanalyse
e. Geben Sie den Reinraum für den Verbraucher frei.
f. Konfiguration des Reinraums, damit sie eine Analyse durchführen können.
g. Konfigurieren Sie den Reinraum, um zu verhindern, dass der Verbraucher Analysen durchführt. In diesem Beispiel tritt der Verbraucher nur als Datenanbieter auf.
h. Durchführung einer Überlappungsstudie mit dem Verbraucher, der den Reinraum installiert hat.
Verbraucher:
a. Installieren des vom Anbieter freigegebenen Reinraums
b. Verknüpfen von Datensets mit dem Reinraum
c. Sicherheitsrichtlinien für Datensets festlegen
d. Genehmigung der Fähigkeit des Anbieters, Analysen im Reinraum durchzuführen.
Voraussetzungen¶
Sie benötigen zwei separate Snowflake-Konten, um dieses Beispiel ausführen zu können. Verwenden Sie das erste Konto, um die Befehle des Anbieters auszuführen, und wechseln Sie dann zum zweiten Konto, um die Befehle des Verbrauchers auszuführen.
Anbieter¶
Verwenden Sie ein Snowflake-Arbeitsblatt im Anbieterkonto, um die Befehle in diesem Abschnitt auszuführen.
Umgebung einrichten¶
Bevor Sie die Developer-APIs verwenden, müssen Sie die Rolle SAMOOHA_APP_ROLE annehmen und das Warehouse angeben, das zur Ausführung der APIs verwendet wird. Wenn Sie nicht über die Rolle SAMOOHA_APP_ROLE verfügen, wenden Sie sich an Ihren Kontoadministrator.
Führen Sie die folgenden Befehle aus, um Ihre Umgebung einzurichten:
USE ROLE samooha_app_role;
USE WAREHOUSE app_wh;
Reinraum erstellen¶
Erstellen Sie einen Namen für den Reinraum. Geben Sie einen neuen Reinraumnamen ein, um Kollisionen mit bestehenden Reinraumnamen zu vermeiden. Beachten Sie, dass Reinraumnamen nur alphanumerisch sein können. Reinraumnamen dürfen keine anderen Sonderzeichen als Leerzeichen und Unterstriche enthalten.
Führen Sie zunächst den folgenden Befehl aus, um einen Reinraumnamen für den Beispiel-Reinraum festzulegen:
SET cleanroom_name = 'Provider Run Analysis Overlap';
Wenn ein Reinraum mit dem angegebenen Namen bereits existiert, schlägt dieser Vorgang fehl.
Die Ausführung dieser Prozedur kann etwas länger dauern, in der Regel etwa eine halbe Minute.
Das zweite Argument von provider.cleanroom_init ist die Distribution des Reinraums. Diese kann entweder INTERNAL oder EXTERNAL sein. Wenn Sie zu Testzwecken den Reinraum für ein Konto in derselben Organisation freigeben, können Sie INTERNAL verwenden, um den automatischen Sicherheitsscan zu umgehen, der stattfinden muss, bevor ein Anwendungspaket für Teilnehmer freigegeben wird. Wenn Sie diesen Reinraum jedoch für ein Konto in einer anderen Organisation freigeben, müssen Sie eine EXTERNAL-Distribution des Reinraums verwenden.
CALL samooha_by_snowflake_local_db.provider.cleanroom_init($cleanroom_name, 'INTERNAL');
Um den Status der Sicherheitsüberprüfung anzuzeigen, führen Sie den folgenden Befehl aus:
CALL samooha_by_snowflake_local_db.provider.view_cleanroom_scan_status($cleanroom_name);
Sobald Sie Ihren Reinraum erstellt haben, müssen Sie erst seine Release-Richtlinie festlegen, bevor er für andere Teilnehmer freigegeben werden kann. Wenn Ihre Distribution jedoch auf EXTERNAL eingestellt wurde, müssen Sie zunächst den Abschluss der Sicherheitsscan abwarten, bevor Sie die Release-Richtlinie festlegen. Während des Scan läuft, können Sie mit den restlichen Schritten fortfahren und vor dem Schritt provider.create_cleanroom_listing hierher zurückkehren.
Um die Release-Direktive festzulegen, führen Sie den folgenden Befehl aus:
CALL samooha_by_snowflake_local_db.provider.set_default_release_directive($cleanroom_name, 'V1_0', '0');
Datenset verknüpfen¶
Sie können Tabellen mit dem Reinraum verknüpfen, indem Sie vollqualifizierte Tabellennamen (\
CALL samooha_by_snowflake_local_db.provider.link_datasets($cleanroom_name, ['SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS']);
Bemerkung
Wenn dieser Schritt nicht funktioniert, obwohl Ihre Tabelle existiert, ist die Datenbank, die die Tabelle enthält, möglicherweise nicht registriert. Um die Datenbank zu registrieren, führen Sie die folgenden Befehle als Benutzer mit der Rolle ACCOUNTADMIN aus.
USE ROLE accountadmin;
CALL samooha_by_snowflake_local_db.provider.register_db('<DATABASE_NAME>');
USE ROLE samooha_app_role;
Sie können überprüfen, ob die Datensätze mit dem Reinraum verknüpft wurden, indem Sie den folgenden Befehl ausführen:
CALL samooha_by_snowflake_local_db.provider.view_provider_datasets($cleanroom_name);
Verknüpfungsrichtlinie für das Datenset festlegen¶
Um zu bestimmen, welche Spalten als Verknüpfungsrichtlinie verwendet werden sollen, können Sie sich Ihr Datenset ansehen, um die PII-Spalten zu ermitteln. Um beispielsweise die obersten 10 Zeilen einer Tabelle zu sehen, führen Sie die folgende Abfrage aus:
SELECT * FROM SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS LIMIT 10;
Als Nächstes geben Sie an, welche Spalten der Verbraucher bei der Ausführung von Vorlagen im Reinraum verknüpfen darf. Diese Prozedur sollte bei Identitätsspalten wie E-Mail aufgerufen werden. Wenn Sie die Verknüpfungsrichtlinie ein zweites Mal festlegen, wird die zuvor festgelegte Verknüpfungsrichtlinie vollständig durch die neue Richtlinie ersetzt.
CALL samooha_by_snowflake_local_db.provider.set_join_policy($cleanroom_name, ['SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:HEM']);
Wenn Sie die dem Reinraum hinzugefügte Verknüpfungsrichtlinie anzeigen möchten, führen Sie den folgenden Befehl aus:
CALL samooha_by_snowflake_local_db.provider.view_join_policy($cleanroom_name);
Analysevorlage zum Reinraum hinzufügen¶
Vorlagen bestimmen die Art der Analysen, die in einem Reinraum durchgeführt werden können. In diesem Beispiel verwenden Sie eine vordefinierte Vorlage, mit der Teilnehmer eine Analyse der Überschneidungen zwischen den Datensets des Anbieters und den Datenset des Verbrauchers durchführen können.
Beachten Sie, dass diese Vorlage die zusätzlichen Sicherheitsgarantien von Differential Privacy (differentielle Privatsphäre) nativ implementiert.
CALL samooha_by_snowflake_local_db.provider.add_templates($cleanroom_name, ['prod_overlap_analysis']);
Spaltenrichtlinie für jede Tabelle festlegen¶
Bevor Sie eine Spaltenrichtlinie für eine Tabelle festlegen, führen Sie eine Abfrage aus, um die Spalten der Tabelle anzuzeigen. Um beispielsweise die obersten 10 Zeilen anzuzeigen, führen Sie den folgenden Befehl aus:
SELECT * FROM SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS LIMIT 10;
Legen Sie für jede Kombination aus Tabelle und Vorlage die Spalten fest, die der Analyst in einer Analyse verwenden kann, z. B. die Spalten, nach denen er gruppieren oder aggregieren kann. Dies bietet Flexibilität, sodass dieselbe Tabelle je nach der zugrunde liegenden Vorlage eine unterschiedliche Spaltenauswahl zulassen kann. Warten Sie, bis Sie eine Vorlage hinzugefügt haben, um die Spaltenrichtlinie für eine Tabelle festzulegen.
Beachten Sie, dass die Spaltenrichtlinie nur ersetzt wird. Wenn die Funktion also erneut aufgerufen wird, wird die zuvor festgelegte Spaltenrichtlinie vollständig durch die neue ersetzt.
Spaltenrichtlinien dürfen nicht für Identitätsspalten wie E-Mail, HEM oder RampID verwendet werden, da der Analyst sonst in der Lage wäre, nach diesen Spalten zu gruppieren. In der Produktionsumgebung erkennt Snowflake PII-Spalten und blockiert diese Operation, aber diese Inferenz ist in einer Sandbox-Umgebung nicht verfügbar. Sie sollte nur für Spalten verwendet werden, die der Analyst aggregieren und nach denen er gruppieren kann, wie z. B. Status, Altersgruppe, Regionscode oder Aktive Tage.
Um die Spaltenrichtlinie für eine Kombination aus Vorlage und Tabelle festzulegen, führen Sie den folgenden Befehl aus:
CALL samooha_by_snowflake_local_db.provider.set_column_policy($cleanroom_name, [
'prod_overlap_analysis:SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:STATUS',
'prod_overlap_analysis:SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:AGE_BAND',
'prod_overlap_analysis:SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:DAYS_ACTIVE',
'prod_overlap_analysis:SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:REGION_CODE']);
Wenn Sie die dem Reinraum hinzugefügte Spaltenrichtlinie anzeigen möchten, führen Sie den folgenden Befehl aus:
call samooha_by_snowflake_local_db.provider.view_column_policy($cleanroom_name);
Konfigurieren, wer Analysen durchführen darf¶
Bemerkung
Sie müssen die APIs in diesem Abschnitt verwenden, nachdem Sie den Reinraum für einen Verbraucher freigegeben haben, aber bevor der Verbraucher ihn installiert. Wenn Sie die Konfiguration des Reinraums ändern, nachdem ein Verbraucher ihn installiert hat, muss der Verbraucher den Reinraum neu installieren.
In diesem Beispiel werden Sie den Reinraum so konfigurieren, dass der Anbieter Analysen durchführen kann, der Verbraucher jedoch nicht. Das bedeutet, dass der Verbraucher nur in der Lage ist, Datensets hinzuzufügen und Sicherheitsrichtlinien festzulegen.
Um den Reinraum zu konfigurieren, damit der Anbieter eine Analyse durchführen kann, führen Sie den folgenden Befehl aus:
CALL samooha_by_snowflake_local_db.provider.enable_provider_run_analysis($cleanroom_name, ['<CONSUMER_ACCOUNT_LOCATOR>']);
Bemerkung
Obwohl in diesem Beispiel nicht verwendet, kann der Anbieter die Konfiguration rückgängig machen und verhindern, dass er selbst Analysen ausführt, indem er den Befehl provider.disable_provider_run_analysis
ausführt.
Standardmäßig kann ein Verbraucher Analysen in einem Reinraum durchführen. Um den Reinraum so zu konfigurieren, dass der Verbraucher keine Analysen durchführen kann, führen Sie den folgenden Befehl aus:
CAll samooha_by_snowflake_local_db.provider.disable_consumer_run_analysis($cleanroom_name, ['<CONSUMER_ACCOUNT_LOCATOR>']);
Bemerkung
Obwohl in diesem Beispiel nicht verwendet, kann der Anbieter die Konfiguration umkehren und dem Verbraucher die Ausführung von Analysen erlauben, indem er den Befehl provider.enable_consumer_run_analysis
ausführt.
Verbraucher¶
Sie wechseln nun in die Rolle, um den Reinraum als Verbraucher zu nutzen. Verwenden Sie ein Snowflake-Arbeitsblatt im Verbraucherkonto, um die Befehle in diesem Abschnitt auszuführen.
Umgebung einrichten¶
Bevor Sie die Developer-APIs verwenden, müssen Sie die Rolle SAMOOHA_APP_ROLE annehmen und das Warehouse angeben, das zur Ausführung der APIs verwendet wird. Wenn Sie nicht über die Rolle SAMOOHA_APP_ROLE verfügen, wenden Sie sich an Ihren Kontoadministrator.
Führen Sie die folgenden Befehle aus, um Ihre Umgebung einzurichten:
USE ROLE samooha_app_role;
USE WAREHOUSE app_wh;
Reinraum installieren¶
Vergeben Sie vor der Installation des Reinraums, den der Anbieter für Sie freigegeben hat, einen Namen für den Reinraum.
SET cleanroom_name = 'Provider Run Analysis Overlap';
Der folgende Befehl installiert den Reinraum im Verbraucherkonto:
CALL samooha_by_snowflake_local_db.consumer.install_cleanroom($cleanroom_name, '<PROVIDER_ACCOUNT_LOCATOR>');
Datenset verknüpfen¶
Jetzt können Sie einige Ihrer Datensets mit dem Reinraum verknüpfen. Der Anbieter wird diese Daten verwenden, wenn er eine Analyse im Reinraum ausführt.
CALL samooha_by_snowflake_local_db.consumer.link_datasets($cleanroom_name, ['SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS']);
Bemerkung
Wenn dieser Schritt nicht funktioniert, obwohl Ihre Tabelle existiert, ist die Datenbank, die die Tabelle enthält, möglicherweise nicht registriert. Um die Datenbank zu registrieren, führen Sie die folgenden Befehle als Benutzer mit der Rolle ACCOUNTADMIN aus.
USE ROLE accountadmin;
CALL samooha_by_snowflake_local_db.provider.register_db('<DATABASE_NAME>');
USE ROLE samooha_app_role;
Wenn Sie die Datensets anzeigen möchten, die Sie dem Reinraum hinzugefügt haben, rufen Sie die folgende Prozedur auf.
CALL samooha_by_snowflake_local_db.consumer.view_consumer_datasets($cleanroom_name);
Legen Sie die Richtlinie sichere Verknüpfungen für Ihr Datenset fest¶
In diesem Abschnitt legen Sie fest, auf welche Spalten der Anbieter bei der Ausführung von Analysen im Reinraum zugreifen darf. Sie sollten den folgenden Befehl für Identitätsspalten wie E-Mail ausführen. Die Verknüpfungsrichtlinie ist „nur ersetzen“, d. h. wenn die Funktion erneut aufgerufen wird, wird die zuvor festgelegte Verknüpfungsrichtlinie vollständig durch die neue ersetzt.
CALL samooha_by_snowflake_local_db.consumer.set_join_policy($cleanroom_name, ['SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:HEM']);
Spaltenrichtlinien für Ihr Datenset festlegen¶
Legen Sie für jede Kombination aus Tabelle und Vorlage die Spalten fest, die der Anbieter in einer Analyse verwenden kann, z. B. die Spalten, nach denen er gruppieren oder aggregieren kann. Dies bietet Flexibilität, sodass dieselbe Tabelle je nach der zugrunde liegenden Vorlage eine unterschiedliche Spaltenauswahl zulassen kann. Warten Sie, bis Sie eine Vorlage hinzugefügt haben, um die Spaltenrichtlinie für eine Tabelle festzulegen.
Beachten Sie, dass die Spaltenrichtlinie nur ersetzt wird. Wenn die Funktion also erneut aufgerufen wird, wird die zuvor festgelegte Spaltenrichtlinie vollständig durch die neue ersetzt.
Spaltenrichtlinien dürfen nicht für Identitätsspalten wie E-Mail, HEM oder RampID verwendet werden, da der Anbieter sonst in der Lage wäre, nach diesen Spalten zu gruppieren. In der Produktionsumgebung erkennt Snowflake PII-Spalten und blockiert diese Operation, aber diese Inferenz ist in einer Sandbox-Umgebung nicht verfügbar. Sie sollte nur für Spalten verwendet werden, die der Anbieter aggregieren und nach denen er gruppieren kann, wie z. B. Status, Altersgruppe, Regionscode oder Aktive Tage.
Um die Spaltenrichtlinie für eine Kombination aus Vorlage und Tabelle festzulegen, führen Sie den folgenden Befehl aus:
CALL samooha_by_snowflake_local_db.consumer.set_column_policy($cleanroom_name, [
'prod_overlap_analysis:SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:STATUS',
'prod_overlap_analysis:SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:AGE_BAND',
'prod_overlap_analysis:SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:DAYS_ACTIVE',
'prod_overlap_analysis:SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:REGION_CODE'
]);
Anbietern die Ausführung von Analysen erlauben¶
Ein Verbraucher muss die Möglichkeit eines Anbieters, Analysen auf der Basis von einzelnen Vorlagen durchzuführen, ausdrücklich genehmigen. Ohne diese Genehmigung kann der Anbieter keine Analyse durchführen, selbst wenn er den Reinraum so konfiguriert hat, dass er es kann.
Zunächst können Sie überprüfen, ob der Anbieter den Reinraum so konfiguriert hat, dass er Analysen durchführen kann.
CALL samooha_by_snowflake_local_db.library.is_provider_run_enabled($cleanroom_name)
Als Nächstes können Sie den folgenden Befehl ausführen, um dem Anbieter zu erlauben, Analysen durchzuführen. Sie müssen den Befehl für jede Vorlage ausführen, die der Anbieter verwenden kann. Sie sollten Ihre Zustimmung nach der Einstellung der Join- und Spaltenrichtlinien erteilen, um zu verhindern, dass der Anbieter eine Analyse mit ungeschützten Daten durchführt.
CALL samooha_by_snowflake_local_db.consumer.enable_templates_for_provider_run($cleanroom_name, ['prod_overlap_analysis']);
Anbieter¶
Sie wechseln jetzt zurück zum Anbieterkonto, um die Analyse im Reinraum durchzuführen. Verwenden Sie ein Snowflake-Arbeitsblatt im Anbieterkonto, um die Befehle in diesem Abschnitt auszuführen.
Zugang zu Informationen vom Verbraucher erhalten¶
Die Durchführung einer Analyse als Anbieter verarbeitet Daten auf dem Konto des Verbrauchers. Um die Ergebnisse der Analyse abrufen zu können, benötigt der Anbieter Zugang zu den Informationen, die vom Verbraucher zum Anbieter zurückkommen. Führen Sie den folgenden Befehl aus, um Zugriff auf Informationen zu erhalten, die vom Verbraucher stammen:
CALL samooha_by_snowflake_local_db.provider.mount_request_logs_for_all_consumers($cleanroom_name);
Analyse ausführen¶
Der Anbieter führt den Befehl provider.submit_analysis_request
aus, wenn er eine Analyse durchführen möchte.
CALL samooha_by_snowflake_local_db.provider.submit_analysis_request(
$cleanroom_name,
'<CONSUMER_ACCOUNT>',
'prod_overlap_analysis',
['SAMOOHA_SAMPLE_DATABASE.demo.customers'],
['SAMOOHA_SAMPLE_DATABASE.demo.customers'],
object_construct(
'dimensions', ['c.REGION_CODE'],
'measure_type', ['AVG'],
'measure_column', ['c.DAYS_ACTIVE'],
'where_clause', 'p.hem=c.hem'
));
Der Befehl provider.submit_analysis_request
gibt einen Bezeichner der Anfrage zurück. Sie müssen diesen Bezeichner speichern, damit Sie den Status der Anfrage überprüfen und die Analyseergebnisse abrufen können. Sie können beispielsweise Folgendes ausführen, um die Kennung in einer lokalen Variablen zu speichern:
SET request_id = '<REQUEST_ID>';
Nachdem Sie die Anfrage zur Durchführung einer Analyse gestellt haben, können Sie den Status der Anfrage anzeigen, indem Sie den folgenden Befehl ausführen. Beachten Sie, dass es zu einer Verzögerung kommen kann, wenn Sie den Befehl zum ersten Mal ausführen.
CALL samooha_by_snowflake_local_db.provider.check_analysis_status(
$cleanroom_name,
$request_id,
'<CONSUMER_ACCOUNT_LOCATOR>'
);
Bemerkung
Wenn diese API fehlschlägt, vergewissern Sie sich, dass Sie den Reinraum so konfiguriert haben, dass Anbieter Analysen ausführen können, bevor Sie ihren Reinraum als Verbraucher installiert haben. Wenn der Reinraum konfiguriert wurde, nachdem der Verbraucher einen Reinraum installiert hat, muss der Verbraucher den Reinraum erneut installieren.
Wenn der vom Befehl provider.check_analysis_status
zurückgegebene Status COMPLETED lautet, können Sie die Ergebnisse der Analyse abrufen, indem Sie den folgenden Befehl ausführen:
CALL samooha_by_snowflake_local_db.provider.get_analysis_result(
$cleanroom_name,
$request_id,
'<CONSUMER_ACCOUNT_LOCATOR>'
);