Snowflake Data Clean Rooms: Überlappungsanalyse

Unter diesem Thema werden die Anbieter- und Verbraucher-Workflows beschrieben, die erforderlich sind, um einen Reinraum programmgesteuert einzurichten, ihn für einen Verbraucher freizugeben und darin anbieterseitige Datenanalysen auszuführen. Bei einer anbieterseitigen Datenanalyse muss der Verbraucher nicht seine eigenen Datensets einbringen, sondern möchte lediglich aggregierte Einblicke in die Datenset des Anbieters erhalten.

Folgende Aufgaben müssen ausgeführt werden:

  1. Anbieter:

    a. Erstellen eines frischen, sauberen Datenreinraums

    b. Sicheres Verknüpfen von Datensets damit

    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. Freigeben dieser für einen Verbraucher

  2. Verbraucher:

    a. Installieren eines Reinraums, der vom Anbieter freigegeben wurde

    b. Hinzufügen Ihrer Datensets zum Reinraum

    c. Prüfung der im Reinraum bereitgestellten Vorlage

    d. Durchführen einer Analyse innerhalb des Reinraums unter Verwendung der Vorlage

Voraussetzungen

Sie benötigen zwei separate Snowflake-Konten, um diesen Workflow durchfü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

Bemerkung

Die folgenden Befehle sollten in einem Snowflake-Arbeitsblatt im Anbieterkonto ausgeführt werden.

Umgebung einrichten

Führen Sie die folgenden Befehle aus, um die Snowflake-Umgebung einzurichten, bevor Sie Entwickler-APIs für die Arbeit mit einem Snowflake Data Clean Room verwenden. Wenn Sie nicht über die Rolle SAMOOHA_APP_ROLE verfügen, wenden Sie sich an Ihren Kontoadministrator.

use role samooha_app_role;
use warehouse app_wh;
Copy

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.

set cleanroom_name = 'Overlap Analysis Demo Clean Room';
Copy

Sie können einen neuen Reinraum mit dem oben festgelegten Reinraumnamen erstellen. Wenn der oben angegebene Name des Reinraums bereits als bestehender Reinraum existiert, schlägt dieser Vorgang fehl.

Diese Prozedur dauert 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');
Copy

Um den Status des Sicherheitsscans zu anzuzeigen, führen Sie Folgendes aus:

call samooha_by_snowflake_local_db.provider.view_cleanroom_scan_status($cleanroom_name);
Copy

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. Sie können mit den restlichen Schritten fortfahren, während die Überprüfung abgeschlossen wird, und hierher zurückkehren, bevor Sie den Schritt provider.create_cleanroom_listing ausführen.

Um die Release-Richtlinie festzulegen, rufen Sie Folgendes auf:

call samooha_by_snowflake_local_db.provider.set_default_release_directive($cleanroom_name, 'V1_0', '0');
Copy

Regionsübergreifende Freigabe

Um einen Reinraum für einen Snowflake-Kunden freizugeben, dessen Konto sich in einer anderen Region befindet als Ihr Konto, müssen Sie die Cloud-übergreifende automatische Ausführung (Cross-Cloud Auto-Fulfillment) aktivieren. Informationen zu den zusätzlichen Kosten, die bei der Zusammenarbeit mit Verbrauchern in anderen Regionen anfallen, finden Sie unter Kosten für Cloud-übergreifende automatische Ausführung.

Wenn Sie Entwickler-APIs verwenden, müssen Sie die regionsübergreifende Freigabe in zwei Schritten aktivieren:

  1. Ein Snowflake-Administrator mit der Rolle ACCOUNTADMIN muss die Cloud-übergreifende automatische Ausführung für Ihr Snowflake-Konto aktivieren. Eine Anleitung dazu finden Sie unter [Mit Konten in verschiedenen Regionen zusammenarbeiten] (https://docs.snowflake.com/en/user-guide/cleanrooms/getting-started#collaborate-with-accounts-in-different-regions).

  2. Sie führen den Befehl provider.enable_laf_for_cleanroom aus, um die Cloud-übergreifende automatische Ausführung für den Reinraum zu aktivieren. Beispiel:

    call samooha_by_snowflake_local_db.provider.enable_laf_for_cleanroom($cleanroom_name);
    
    Copy

Nachdem Sie die Cloud-übergreifende automatische Ausführung für den Reinraum aktiviert haben, können Sie mit dem Befehl provider.create_cleanroom_listing wie gewohnt Verbraucher zu Ihrem Freigabeangebot hinzufügen. Das Freigabeangebot wird bei Bedarf automatisch in externe Clouds und Regionen repliziert.

Analysevorlagen zum Reinraum hinzufügen

Fügen Sie eine Liste mit vordefinierten Vorlagen unter Verwendung ihrer Bezeichner hinzu. In diesem Workflow fügen Sie eine vordefinierte Vorlage hinzu, mit der der Verbraucher die Datenanalyse auf der Überlappung seiner Datensets mit den Datensets des Anbieters auf eine sichere und vom Anbieter genehmigte Weise und auf den vom Anbieter genehmigten Spalten durchführen können.

Ein entscheidendes Detail an dieser Vorlage ist, dass sie die zusätzlichen Sicherheitsgarantien von Differential Privacy nativ implementiert. Weitere Informationen dazu finden Sie unter Differential Privacy.

call samooha_by_snowflake_local_db.provider.add_templates($cleanroom_name, ['prod_overlap_analysis']);
Copy

Wenn Sie die derzeit im Reinraum aktiven Vorlagen anzeigen möchten, rufen Sie die folgende Prozedur auf. Hier sehen Sie die Änderungen, die Sie vornehmen müssen, um Differential-Privacy-Garantien für Ihre Analyse zu aktivieren. Ein ähnliches Muster kann in jede benutzerdefinierte Vorlage integriert werden, die Sie erstellen möchten.

Bemerkung

Beachten Sie, dass alle systemdefinierten voreingestellten Vorlagen verschlüsselt sind und standardmäßig nicht angezeigt werden können. Alle benutzerdefinierten Vorlagen, die Sie hinzufügen, werden jedoch sichtbar sein.

call samooha_by_snowflake_local_db.provider.view_added_templates($cleanroom_name);
Copy

Jede Vorlage, die dem Reinraum hinzugefügt wird, kann bei Bedarf auch wieder daraus entfernt werden. Weitere Informationen dazu finden Sie im Anbieter-API-Referenzhandbuch.

Spaltenrichtlinie für jede Tabelle festlegen

Zeigen Sie die verknüpften Daten an, um die in der Tabelle vorhandenen Spalten zu sehen. Um die obersten 10 Zeilen anzuzeigen, führen Sie die folgende Prozedur aus:

select * from SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS limit 10;
Copy

Legen Sie die Spalten fest, die der Verbraucher gruppieren und aggregieren (z. B. SUM oder AVG) und generell in einer Analyse für jede Kombination aus Tabelle und Vorlage verwenden darf. Dies bietet Flexibilität, sodass dieselbe Tabelle je nach der zugrunde liegenden Vorlage eine unterschiedliche Spaltenauswahl zulassen kann. Dies sollte erst nach dem Hinzufügen der Vorlage aufgerufen werden.

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.

Die Spaltenrichtlinie darf nicht für Identitätsspalten wie E-Mail, HEM oder RampID verwendet werden, da der Verbraucher sonst in der Lage wäre, nach diesen Spalten zu gruppieren. In der Produktionsumgebung erkennt das System auf intelligente Weise die PII-Spalten und blockiert diese Operation, aber dieses Feature ist in der Sandbox-Umgebung nicht verfügbar. Sie sollte nur für Spalten verwendet werden, die Sie dem Verbraucher zur Verfügung stellen möchten, um sie zu aggregieren und zu gruppieren, z. B. Status, Altersgruppe, Kanal oder Aktive Tage.

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']);
Copy

Wenn Sie die zum Reinraum hinzugefügte Spaltenrichtlinie anzeigen möchten, rufen Sie die folgende Prozedur auf.

call samooha_by_snowflake_local_db.provider.view_column_policy($cleanroom_name);
Copy

Für Verbraucher freigeben

Fügen Sie schließlich einen Datenverbraucher zum Reinraum hinzu, indem Sie dessen Snowflake-Konto-Locator und Kontonamen wie unten gezeigt hinzufügen. Der Name des Snowflake-Kontos muss das Format <ORGANIZATION>.<ACCOUNT_NAME\> haben.

Bemerkung

Um die folgenden Prozeduren aufzurufen, stellen Sie sicher, dass Sie zuvor die Release-Richtlinie mit provider.set_default_release_directive festgelegt haben. Die letzte verfügbare Version und die letzten Patches können Sie wie folgt anzeigen:

show versions in application package samooha_cleanroom_Overlap_Analysis_Demo_clean_room;
Copy
call samooha_by_snowflake_local_db.provider.add_consumers($cleanroom_name, '<CONSUMER_ACCOUNT_LOCATOR>', '<CONSUMER_ACCOUNT_NAME>');
call samooha_By_snowflake_local_db.provider.create_cleanroom_listing($cleanroom_name, '<CONSUMER_ACCOUNT_NAME>');
Copy

Mehrere Verbraucherkonto-Locators können der Funktion provider.add_consumers als kommagetrennte Zeichenfolge oder als separate Aufrufe von provider.add_consumers übergeben werden.

Wenn Sie die Verbraucher anzeigen möchten, die diesem Reinraum hinzugefügt wurden, rufen Sie die folgende Prozedur auf.

call samooha_by_snowflake_local_db.provider.view_consumers($cleanroom_name);
Copy

Wenn Sie sich die kürzlich erstellten Reinräume anzeigen möchten, verwenden Sie die folgende Prozedur.

call samooha_by_snowflake_local_db.provider.view_cleanrooms();
Copy

Wenn Sie mehr über den von Ihnen erstellten Reinraum erfahren möchten, verwenden Sie die folgende Prozedur.

call samooha_by_snowflake_local_db.provider.describe_cleanroom($cleanroom_name);
Copy

Jeder erstellte Reinraum kann auch wieder gelöscht werden. Mit dem folgenden Befehl wird der Reinraum vollständig gelöscht, sodass alle Verbraucher, die zuvor Zugang zum Reinraum hatten, diesen nicht mehr nutzen können. Wenn in Zukunft ein Reinraum mit demselben Namen gewünscht wird, muss er mit dem oben beschriebenen Workflow neu initialisiert werden.

call samooha_by_snowflake_local_db.provider.drop_cleanroom($cleanroom_name);
Copy

Bemerkung

Der Anbieter-Workflow ist damit beendet. Wechseln Sie zum Verbraucherkonto, um mit dem Verbraucher-Workflow fortzufahren.

Verbraucher

Bemerkung

Die folgenden Befehle sollten in einem Snowflake-Arbeitsblatt im Verbraucherkonto ausgeführt werden.

Umgebung einrichten

Führen Sie die folgenden Befehle aus, um die Snowflake-Umgebung einzurichten, bevor Sie Entwickler-APIs für die Arbeit mit einem Snowflake Data Clean Room verwenden. Wenn Sie nicht über die Rolle SAMOOHA_APP_ROLE verfügen, wenden Sie sich an Ihren Kontoadministrator.

use role samooha_app_role;
use warehouse app_wh;
Copy

Reinraum installieren

Nachdem eine Reinraumfreigabe installiert wurde, können Sie die Liste der verfügbaren Reinräume mit dem folgenden Befehl anzeigen.

call samooha_by_snowflake_local_db.consumer.view_cleanrooms();
Copy

Vergeben Sie einen Namen für den Reinraum, den der Anbieter für Sie freigegeben hat.

set cleanroom_name = 'Overlap Analysis Demo Clean room';
Copy

Mit dem folgenden Befehl wird der Reinraum im Verbraucherkonto mit dem zugehörigen Anbieter und dem ausgewählten Reinraum installiert. Geben Sie den Snowflake-Konto-Locator des Anbieters ein (nicht den Namen).

Die Ausführung dieser Prozedur kann etwas länger dauern, in der Regel etwa eine halbe Minute.

call samooha_by_snowflake_local_db.consumer.install_cleanroom($cleanroom_name, '<PROVIDER_ACCOUNT_LOCATOR>');
Copy

Nachdem der Reinraum installiert wurde, muss der Anbieter den Reinraum auf seiner Seite fertig einrichten, bevor er für die Nutzung aktiviert wird. Mit der folgenden Funktion können Sie den Status des Reinraums überprüfen. Sobald er aktiviert ist, sollten Sie den „run_analysis“-Befehl ausführen können. Es dauert normalerweise etwa 1 Minute, bis der Reinraum aktiviert ist.

call samooha_by_snowflake_local_db.consumer.is_enabled($cleanroom_name);
Copy

Analyse ausführen

Jetzt, da der Reinraum installiert ist, können Sie die Analysevorlage, die der Anbieter im Reinraum bereitgestellt hat, mit dem Befehl „run_analysis“ ausführen. In den folgenden Abschnitten erfahren Sie, wie die einzelnen Felder bestimmt werden.

Bemerkung

Bevor Sie die Analyse ausführen, können Sie die Warehouse-Größe ändern oder eine neue, größere Warehouse-Größe verwenden, wenn Ihre Tabellen groß sind.

-- Example run analysis procedure with single provider dataset

call samooha_by_snowflake_local_db.consumer.run_analysis(
  $cleanroom_name,                    -- cleanroom
  'prod_overlap_analysis',            -- template name

  ['SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS'], -- your tables
  
  ['SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS'],  -- the provider table we want to carry out analysis on

  object_construct(                        -- The keyword arguments needed for the SQL Jinja template
      'dimensions', ['p.REGION_CODE'],        -- Group by column

      'measure_type', ['AVG'],           -- Aggregate function you want to perform like COUNT, AVG, etc.

      'measure_column', ['p.DAYS_ACTIVE'],     -- Columns you want to perform aggregate function on

      'where_clause', 'p.HEM=c.HEM'   -- A boolean filter
                                      -- $$ is used to pass string literal

    )
);
Copy

Für jede der Spalten, auf die Sie entweder in der Datenset-Filterung „where_clause“ oder in den Dimensionen oder „measure_columns“ verweisen, können Sie p. verwenden, um auf Felder in Anbietertabellen zu verweisen, und c., um auf Felder in Verbrauchertabellen zu verweisen. Verwenden Sie p2, p3 usw. für mehr als eine Anbietertabelle und c2, c3 usw. für mehr als eine Verbrauchertabelle.

Eingaben für „run_analysis“ bestimmen

Um die Analyse auszuführen, müssen Sie einige Parameter an die Funktion „run_analysis“ übergeben. In diesem Abschnitt erfahren Sie, wie Sie ermitteln, welche Parameter Sie übergeben müssen.

Vorlagennamen

Zuerst können Sie die unterstützten Analysevorlagen anzeigen, indem Sie die folgende Prozedur aufrufen.

call samooha_by_snowflake_local_db.consumer.view_added_templates($cleanroom_name);
Copy

Bevor Sie eine Analyse mit einer Vorlage ausführen, müssen Sie ermitteln, welche Argumente Sie angeben müssen und welche Typen erwartet werden. Für benutzerdefinierte Vorlagen können Sie den folgenden Befehl ausführen:

Bemerkung

Beachten Sie, dass alle systemdefinierten voreingestellten Vorlagen verschlüsselt sind und standardmäßig nicht angezeigt werden können. Alle benutzerdefinierten Vorlagen, die Sie hinzufügen, werden jedoch sichtbar sein.

call samooha_by_snowflake_local_db.consumer.view_template_definition($cleanroom_name, 'prod_overlap_analysis');
Copy

Diese kann oft auch eine große Anzahl verschiedener SQL Jinja-Parameter enthalten. Die folgende Funktion analysiert die Jinja-Vorlage SQL und extrahiert die Argumente, die in „run_analysis“ spezifiziert werden müssen, in eine Liste.

Bemerkung

Beachten Sie, dass alle systemdefinierten voreingestellten Vorlagen verschlüsselt sind, sodass diese Funktion die Argumente für diese Vorlagen nicht erhalten wird. Sie können jedoch die Parameter für Ihre benutzerdefinierten Vorlagen abrufen.

call samooha_by_snowflake_local_db.consumer.get_arguments_from_template($cleanroom_name, 'prod_overlap_analysis');
Copy

Datensetnamen

Wenn Sie die Namen der Datensets anzeigen möchten, die vom Anbieter zum Reinraum hinzugefügt wurden, rufen Sie die folgende Prozedur auf. Beachten Sie, dass Sie die Daten in den Datensets, die vom Anbieter zum Reinraum hinzugefügt wurden, aufgrund der Sicherheitseigenschaften des Reinraums nicht anzeigen können.

call samooha_by_snowflake_local_db.consumer.view_provider_datasets($cleanroom_name);
Copy

Sie können auch die Tabellen anzeigen, die Sie mit dem Reinraum verknüpft haben, indem Sie den folgenden Befehl ausführen:

call samooha_by_snowflake_local_db.consumer.view_consumer_datasets($cleanroom_name);
Copy

Dimension- und Measure-Spalten

Während Sie die Analyse durchführen, möchten Sie vielleicht nach bestimmten Spalten filtern, gruppieren und aggregieren. Wenn Sie die vom Anbieter zum Reinraum hinzugefügte Spaltenrichtlinie anzeigen möchten, rufen Sie die folgende Prozedur auf.

call samooha_by_snowflake_local_db.consumer.view_provider_column_policy($cleanroom_name);
Copy

Epsilon und Datenschutzbudgets

Wenn Sie bei der letzten Ausführungsprozedur einen Fehler erhalten, könnte es daran liegen, dass für das von Ihnen gewählte hohe Epsilon kein Budget mehr vorhanden ist. Sie können das verbleibende Datenschutzbudget mit der folgenden Prozedur überprüfen.

call samooha_by_snowflake_local_db.consumer.view_remaining_privacy_budget($cleanroom_name);
Copy

Der Parameter epsilon, den Sie angeben, ist eine Eingabe für den Differential-Privacy-Mechanismus, der innerhalb des Reinraums aktiv ist. Im Abschnitt Differential Privacy erfahren Sie mehr darüber, wie die differentielle Privatsphäre funktioniert. Je höher der „epsilon“-Wert ist, den Sie angeben, desto mehr des begrenzten Datenschutzbudgets (das täglich zurückgesetzt wird) verbrauchen Sie, aber desto höher ist auch die Genauigkeit des Ergebnisses, da den aggregierten Daten weniger Rauschen hinzugefügt wird.

Typische Fehler

Wenn Sie Fehlermeldung Not approved: unauthorized columns used (Nicht genehmigt: nicht autorisierte Spalten verwendet) als Ergebnis der Analyseausführung erhalten, möchten Sie möglicherweise die vom Anbieter festgelegte Verknüpfungsrichtlinie und Spaltenrichtlinie erneut anzeigen.

call samooha_by_snowflake_local_db.consumer.view_provider_join_policy($cleanroom_name);
call samooha_by_snowflake_local_db.consumer.view_provider_column_policy($cleanroom_name);
Copy

Es ist auch möglich, dass Sie Ihr Datenschutzbudget ausgeschöpft haben, sodass Sie keine weiteren Abfragen mehr ausführen können. Ihr verbleibendes Datenschutzbudget können Sie mit dem folgenden Befehl anzeigen. Das Budget wird täglich zurückgesetzt, oder der Anbieter des Reinraums kann es auf Wunsch auch manuell zurücksetzen.

call samooha_by_snowflake_local_db.consumer.view_remaining_privacy_budget($cleanroom_name);
Copy

Sie können überprüfen, ob Differential Privacy für Ihren Reinraum aktiviert wurde, indem Sie die folgende API verwenden:

call samooha_by_snowflake_local_db.consumer.is_dp_enabled($cleanroom_name);
Copy