Snowflake Data Clean Rooms: Multi-Anbieter-Reinräume

Unter diesem Thema finden Sie ein Beispiel für die Durchführung einer Analyse über einen Cluster von Reinräumen mehrerer Anbieter hinweg. Es zeigt, wie eine Abfrage auf Daten in verschiedenen Reinräumen zugreifen kann, ohne dass die Sicherheitsgarantien der einzelnen Reinräume verletzt werden. Außerdem wird demonstriert, wie der Verbraucher die Vorlage für die Durchführung der Analyse definieren kann, was ein häufiger Anwendungsfall für Reinräume mit mehreren Anbietern ist.

Bei einer Multi-Anbieter-Analyse werden die Daten aus jedem Reinraum auf völlig sichere Weise verwendet. Snowflake Data Clean Rooms stellt sicher, dass die Sicherheitsrichtlinien für jeden einzelnen Reinraum eingehalten werden, und bescheinigt gleichzeitig, dass jeglicher auf den Daten ausgeführter SQL-Code exakt das sind, was jeder Reinraumteilnehmer erwartet.

In vielen Fällen möchte der Verbraucher, der eine Analyse mit mehreren Anbietern ausführt, die Vorlage für die Analyse selbst definieren können, anstatt eine von den Anbietern definierte Vorlage zu verwenden. Auf diese Weise können die Verbraucher selbst bestimmen, wie sie bei der Analyse von Daten von mehreren Parteien Erkenntnisse gewinnen. Weitere Informationen zu verbraucherdefinierten Vorlagen finden Sie unter Verwendung der Entwickler-API zum Hinzufügen verbraucherdefinierter Vorlagen hinzufügen.

Bemerkung

Reinraumanalysen mit mehreren Anbietern sind in Reinräumen, die in mehreren Regionen freigegeben wurden, nicht zulässig.

Das Beispiel für die Multi-Anbieter-Analyse umfasst folgende Schritte:

  1. Anbieter:

    a. Erstellen Sie zwei Reinräume, die zwei verschiedene Anbieter simulieren.

    b. Geben Sie die Reinräume für denselben Verbraucher frei.

  2. Verbraucher:

    a. Installieren Sie die beiden Anbieter-Reinräume.

    b. Senden Sie Anfragen zum Hinzufügen einer verbraucherdefinierten Vorlage zu den Reinräumen.

  3. Anbieter:

    a. Genehmigen Sie die Anfragen des Verbrauchers zum Hinzufügen einer verbraucherdefinierten Vorlage.

    b. Legen Sie Spaltenrichtlinien für die verbraucherdefinierte Vorlage fest.

  4. Verbraucher:

    a. Stellen Sie eine Anfrage für Multi-Anbieter-Analysen.

  5. Anbieter:

    a. Aktivieren Sie die Reinräume für die Multi-Anbieter-Analyse.

    b. Genehmigen Sie Anfragen des Verbrauchers zu Multi-Anbieter-Analysen.

  6. Verbraucher

    a. Führen Sie die Analyse im gesamten Reinraum-Cluster aus.

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: Reinraum erstellen und freigeben

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;
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.

Führen Sie zunächst die folgenden Befehle aus, um einen Reinraumnamen für jeden unserer Beispiel-Reinräume festzulegen:

SET cleanroom_name_1 = 'Samooha Cleanroom Multiprovider Clean Room 1';
SET cleanroom_name_2 = 'Samooha Cleanroom Multiprovider Clean Room 2';
Copy

Wenn der oben angegebene Name des Reinraums bereits als bestehender Reinraum existiert, schlägt dieser Vorgang fehl.

Die Ausführung dieser Prozedur dauert etwa 45 Sekunden.

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_1, 'INTERNAL');
CALL samooha_by_snowflake_local_db.provider.cleanroom_init($cleanroom_name_2, 'INTERNAL');
Copy

Um den Status des Sicherheitsscans anzuzeigen, führen Sie die folgenden Befehle aus:

CALL samooha_by_snowflake_local_db.provider.view_cleanroom_scan_status($cleanroom_name_1);
CALL samooha_by_snowflake_local_db.provider.view_cleanroom_scan_status($cleanroom_name_2);
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 warten, bis der Sicherheitsscan abgeschlossen ist, bevor Sie die Release-Richtlinie festlegen können. 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-Richtlinie festzulegen, rufen Sie Folgendes auf:

CALL samooha_by_snowflake_local_db.provider.set_default_release_directive($cleanroom_name_1, 'V1_0', '0');
CALL samooha_by_snowflake_local_db.provider.set_default_release_directive($cleanroom_name_2, 'V1_0', '0');
Copy

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;
Copy

Als Nächstes geben Sie an, welche Spalten der Verbraucher bei der Ausführung von Vorlagen im Reinraum verknüpfen darf. Führen Sie die folgenden Befehle für Identitätsspalten wie E-Mail aus. 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_1, ['SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:HASHED_EMAIL']);
CALL samooha_by_snowflake_local_db.provider.set_join_policy($cleanroom_name_2, ['SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:HASHED_EMAIL']);
Copy

Wenn Sie die dem Reinraum hinzugefügte Verknüpfungsrichtlinie anzeigen möchten, führen Sie die folgenden Befehle aus:

CALL samooha_by_snowflake_local_db.provider.view_join_policy($cleanroom_name_1);
CALL samooha_by_snowflake_local_db.provider.view_join_policy($cleanroom_name_2);
Copy

Für Verbraucher freigeben

Schließlich fügen Sie jedem Reinraum einen Verbraucher hinzu, indem Sie dessen Snowflake-Konto-Locator und Kontonamen hinzufügen. Der Name des Snowflake-Kontos muss das Format <ORGANIZATION>.<ACCOUNT_NAME\> haben.

Sie können der Funktion provider.add_consumers mehrere Verbraucherkonten als kommagetrennte Zeichenfolge übergeben oder provider.add_consumers mehrfach ausführen.

Bemerkung

Bevor Sie die folgenden Befehle ausführen, stellen Sie sicher, dass Sie 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_<ID>;
Copy

Um die Reinräume für einen Verbraucher freizugeben, führen Sie die folgenden Befehle aus:

CALL samooha_by_snowflake_local_db.provider.add_consumers($cleanroom_name_1, '<CONSUMER_ACCOUNT_LOCATOR>', '<CONSUMER_ACCOUNT_NAME>');
CALL samooha_By_snowflake_local_db.provider.create_cleanroom_listing($cleanroom_name_1, '<CONSUMER_ACCOUNT_NAME>');

CALL samooha_by_snowflake_local_db.provider.add_consumers($cleanroom_name_2, '<CONSUMER_ACCOUNT_LOCATOR>', '<CONSUMER_ACCOUNT_NAME>');
CALL samooha_By_snowflake_local_db.provider.create_cleanroom_listing($cleanroom_name_2, '<CONSUMER_ACCOUNT_NAME>');
Copy

Wenn Sie die zu den Reinräumen hinzugefügten Verbraucher anzeigen möchten, führen Sie die folgenden Befehle aus:

CALL samooha_by_snowflake_local_db.provider.view_consumers($cleanroom_name_1);
CALL samooha_by_snowflake_local_db.provider.view_consumers($cleanroom_name_2);
Copy

Sie können die zuletzt erstellten Reinräume anzeigen, indem Sie den folgenden Befehl ausführen:

CALL samooha_by_snowflake_local_db.provider.view_cleanrooms();
Copy

Sie erhalten weitere Informationen zu den zuletzt erstellten Reinräume, indem Sie die folgenden Befehle ausführen:

CALL samooha_by_snowflake_local_db.provider.describe_cleanroom($cleanroom_name_1);
CALL samooha_by_snowflake_local_db.provider.describe_cleanroom($cleanroom_name_2);
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.

CALL samooha_by_snowflake_local_db.provider.drop_cleanroom($cleanroom_name_1);
CALL samooha_by_snowflake_local_db.provider.drop_cleanroom($cleanroom_name_2);
Copy

Der erste Teil des Anbieter-Workflows ist damit abgeschlossen. Wechseln Sie zum Verbraucherkonto, um mit dem Verbraucher-Workflow fortzufahren und die Reinräume zu installieren.

Sie müssen dann wieder zur Anbieterseite wechseln, um das Multi-Anbieter-Computing in Ihren Reinräumen zu ermöglichen.

Verbraucher: Reinräume einrichten

Verwenden Sie ein Snowflake-Arbeitsblatt im Verbraucherkonto, um die Befehle in diesem Abschnitt auszuführen.

Als Verbraucher können Sie mehrere freigegebene Reinräume nutzen. Bevor Sie eine Multi-Anbieter-Analyse durchführen können, müssen Sie jeden Anbieter in Ihrem Konto installieren und die Datensets, die Sie für Ihre Analysen verwenden möchten, miteinander verknüpfen.

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;
Copy

Die Reinräume installieren

Bevor Sie die Reinräume installieren, weisen Sie jedem Reinraum den Namen zu, den der Anbieter Ihnen mitgeteilt hat.

set cleanroom_name_1 = 'Samooha Cleanroom Multiprovider Clean Room 1';
set cleanroom_name_2 = 'Samooha Cleanroom Multiprovider Clean Room 2';
Copy

Mit den folgenden Befehlen installieren Sie die Reinräume im Verbraucherkonto:

CALL samooha_by_snowflake_local_db.consumer.install_cleanroom($cleanroom_name_1, '<PROVIDER_ACCOUNT_LOCATOR>');

CALL samooha_by_snowflake_local_db.consumer.install_cleanroom($cleanroom_name_2, '<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_1);
CALL samooha_by_snowflake_local_db.consumer.is_enabled($cleanroom_name_2);
Copy

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

Datenset verknüpfen

Jetzt können Sie Datensets mit dem Reinraum verknüpfen, um sicheres Computing mit den Daten des Anbieters durchzuführen.

CALL samooha_by_snowflake_local_db.consumer.link_datasets($cleanroom_name_1, ['SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS']);

CALL samooha_by_snowflake_local_db.consumer.link_datasets($cleanroom_name_2, ['SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS']);
Copy

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;
Copy

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_1);
CALL samooha_by_snowflake_local_db.consumer.view_consumer_datasets($cleanroom_name_2);
Copy

Verbraucher: Senden Sie eine Anfrage zum Hinzufügen einer verbraucherdefinierten Vorlage zu Reinräumen

Ein Verbraucher, der eine Multi-Anbieter-Analyse ausführt, weiß oft am besten, wie er Nutzen aus den Daten mehrerer Parteien ziehen kann. Ein Verbraucher kann eine Anfrage an die Anbieter von Reinräumen senden, um eine verbraucherdefinierte Vorlage in den Reinraum aufzunehmen, damit der Verbraucher sie zur Durchführung von Analysen verwenden kann. Weitere Informationen zum Hinzufügen von verbraucherdefinierten Vorlagen zu einem Reinraum finden Sie unter Hinzufügen von verbraucherdefinierten Vorlagen.

Bemerkung

Analysen mit Multi-Anbieter-Reinräumen funktionieren, indem alle Tabellen aus anderen Reinräumen sowie aus dem aktuellen Reinraum in das Argument source_tables in der Vorlage übertragen werden. Bei den Sicherheitsüberprüfungen und der Genehmigung von Anfragen erhält jedoch auch jeder Reinraum nur die für ihn relevanten Tabellen. Daher sollte die Vorlage generisch geschrieben werden, ohne eine bestimmte Anzahl von source_table-Eingaben vorauszusetzen, wodurch sie über eine oder mehrere source_table-Eingaben skaliert werden kann. Sie können eine Jinja for-Loop verwenden, um dies zu implementieren.

In diesem Beispiel sendet der Verbraucher die folgenden Anfragen. Jede Anfrage enthält den Jinja-Code, der die Vorlage definiert.

CALL samooha_by_snowflake_local_db.consumer.create_template_request($cleanroom_name_1, 'multiprovider_overlap_analysis', $$
WITH union_data AS (
    select identifier({{ hem_col[0] | join_policy }}) as join_col, identifier({{ dimensions[0] | column_policy }}) as group_col 
    {% for dim in dimensions[1:] %}
        , identifier({{ dim }}) as group_col_{{ loop.index }}
    {% endfor %}
    from identifier({{ source_table[0] }}) p1
    {% for src in source_table[1:] %}
        inner join (
        select identifier({{ hem_col[loop.index] | join_policy }}), identifier({{ dimensions[loop.index] | column_policy  }})  from identifier({{ src }}) p{{ loop.index + 1}} )  p{{ loop.index + 1}} 
        on identifier({{ hem_col[0] }}) = identifier({{ hem_col[loop.index] }})
    {% endfor %}
)
select count(distinct join_col), group_col
{% for dim in dimensions[1:] %}
        , group_col_{{ loop.index }}
{% endfor %}
from union_data u
inner join identifier({{ my_table[0] }}) c
on u.join_col = c.{{ consumer_join_col | sqlsafe }}
group by group_col
{% for dim in dimensions[1:] %}
        , group_col_{{ loop.index }}
{% endfor %}
$$);

CALL samooha_by_snowflake_local_db.consumer.create_template_request($cleanroom_name_2, 'multiprovider_overlap_analysis', $$
WITH union_data AS (
    select identifier({{ hem_col[0] | join_policy }}) as join_col, identifier({{ dimensions[0] | column_policy }}) as group_col 
    {% for dim in dimensions[1:] %}
        , identifier({{ dim }}) as group_col_{{ loop.index }}
    {% endfor %}
    from identifier({{ source_table[0] }}) p1
    {% for src in source_table[1:] %}
        inner join (
        select identifier({{ hem_col[loop.index] | join_policy }}), identifier({{ dimensions[loop.index] | column_policy  }})  from identifier({{ src }}) p{{ loop.index + 1}} )  p{{ loop.index + 1}} 
        on identifier({{ hem_col[0] }}) = identifier({{ hem_col[loop.index] }})
    {% endfor %}
)
select count(distinct join_col), group_col
{% for dim in dimensions[1:] %}
        , group_col_{{ loop.index }}
{% endfor %}
from union_data u
inner join identifier({{ my_table[0] }}) c
on u.join_col = c.{{ consumer_join_col | sqlsafe }}
group by group_col
{% for dim in dimensions[1:] %}
        , group_col_{{ loop.index }}
{% endfor %}
$$);
Copy

Anbieter: Verbraucheranfrage zum Hinzufügen einer Vorlage genehmigen

Der Anbieter muss die Anfragen des Verbrauchers zum Hinzufügen einer vom Verbraucher definierten Vorlage in den Reinräumen genehmigen.

Der Anbieter verwendet den Befehl provider.list_template_requests zur Auflistung der Anfragen, einschließlich der Abfrage der UUID der neuen Anfrage. Der Anbieter genehmigt dann die Anfragen, indem er den Befehl provider.approve_template_request ausführt. Weitere Informationen zu diesem Vorgang finden Sie unter Hinzufügen von verbraucherdefinierten Vorlagen.

CALL samooha_snowflake_local_db.provider.list_template_requests($cleanroom_name_1);
CALL samooha_by_snowflake_local_db.provider.approve_template_request($cleanroom_name_1, <REQUEST_UUID>);


CALL samooha_snowflake_local_db.provider.list_template_requests($cleanroom_name_2);
CALL samooha_by_snowflake_local_db.provider.approve_template_request($cleanroom_name_2, <REQUEST_UUID>);
Copy

Spaltenrichtlinie für jede Tabelle festlegen

Legen Sie für jede Kombination aus Tabelle und Vorlage die Spalten fest, die der Verbraucher 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 Verbraucher 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 Verbraucher aggregieren und nach denen er gruppieren kann, wie z. B. Status, Altersgruppe, Regionscode oder Aktive Tage.

Damit „column_policy“ und „join_policy“ Überprüfungen der Verbraucheranalyseanfragen ausführen können, müssen alle Spaltennamen in der SQL Jinja-Vorlage als dimensions oder measure_columns bezeichnet werden. Stellen Sie sicher, dass Sie diese Tags verwenden, um auf Spalten zu verweisen, die Sie in benutzerdefinierten SQL Jinja-Vorlagen überprüfen möchten.

Um die Spaltenrichtlinie für eine Kombination aus Vorlage und Tabelle festzulegen, führen Sie die folgenden Befehle aus:

CALL samooha_by_snowflake_local_db.provider.set_column_policy($cleanroom_name_1, [ 'multiprovider_overlap_analysis:SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:STATUS']);

CALL samooha_by_snowflake_local_db.provider.set_column_policy($cleanroom_name_2, [
'multiprovider_overlap_analysis:SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:REGION_CODE']);
Copy

Verbraucher: Anfrage zur Reinraumanalyse an mehrere Anbieter stellen

Der nächste Schritt ist die Beantragung einer Multi-Anbieter-Analyse über alle Reinräume, die Sie installiert haben. Dieser Satz von Reinräumen wird als Reinraum-Cluster bezeichnet. In diesem Prozess werden Anfragen an jeden Anbieter erstellt, ob diese Multi-Anbieter-Analyse genehmigt und ausgeführt werden kann. Diese Anfragen werden vom Anbieter asynchron und entweder automatisch oder manuell verarbeitet. Wenn ein automatischer Genehmigungsablauf verwendet wird, ist die Anfragebearbeitung in etwa 2 Minuten erledigt, und wenn die Genehmigung von jedem Reinraum erteilt wird (nachdem die Anfrage auf Übereinstimmung mit den Sicherheitsrichtlinien des Reinraums geprüft wurde), kann der Workflow ausgeführt werden.

Der Anfrage-Workflow für Multi-Anbieter-Reinräume erfordert, dass die Anbietertabellen unter dem Array-Argument source_table angegeben werden. Die Tabellen müssen mit dem Namen des Reinraums beginnen, in dem sie existieren. Das Gesamtformat ist: <CLEANROOM_NAME>.<DB>.<SCHEMA>.<TABLE> . Verbrauchertabellen können unter dem Array-Argument my_table angegeben werden.

CALL samooha_by_snowflake_local_db.consumer.prepare_multiprovider_flow(
    [$cleanroom_name_1, $cleanroom_name_2],
    'prod_aggregate_data',
    object_construct(
        'source_table', [
            concat($cleanroom_name_1, '.SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS'), 
            concat($cleanroom_name_2, '.SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS')
        ],
        'my_table', ['SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS']),
        'hem_col', ['p1.HASHED_EMAIL', 'p2.HASHED_EMAIL'],
        'dimensions', ['p1.STATUS', 'p2.STATUS'],
        'consumer_join_col', 'HASHED_EMAIL'
    )
);
Copy

Diese API gleicht die Anfrage zunächst mit den Sicherheitsrichtlinien der einzelnen Reinräume ab, bevor die Anfrage für eine Multi-Anbieter-Analyse an die Anbieter der einzelnen Reinräume weitergeleitet wird. Wenn diese Prüfungen fehlschlagen, gibt die API die aufgetretene Fehlermeldung zurück.

Eingaben für „prepare_multiprovider_flow“ 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

Zunächst können Sie die unterstützten Analysevorlagen anzeigen, indem Sie den folgenden Befehl ausführen:

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:

CALL samooha_by_snowflake_local_db.consumer.view_template_definition($cleanroom_name, 'prod_custom_template');
Copy

Dieser gibt eine große Anzahl verschiedener SQL Jinja-Parameter zurück. Um die SQL Jinja-Vorlage zu parsen und die Argumente, die in „run_analysis“ angegeben werden müssen, in eine Liste zu extrahieren, führen Sie den folgenden Befehl aus.

CALL samooha_by_snowflake_local_db.consumer.get_arguments_from_template($cleanroom_name, 'prod_custom_template');
Copy

Datensetnamen

Wenn Sie die Namen der Datenset anzeigen möchten, die vom Anbieter zum Reinraum hinzugefügt wurden, führen Sie den folgenden Befehl aus. Beachten Sie, dass Sie die Daten in den Datensets, die vom Anbieter zum Reinraum hinzugefügt wurden, nicht einsehen 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, führen Sie den folgenden Befehl aus:

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

Typische Fehler

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

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 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

Anbieter: Multi-Anbieter-Analyse aktivieren und Anfragen genehmigen

Sie wechseln nun zurück zum Anbieterkonto, um die Multi-Anbieter-Analyse für den Verbraucher zu aktivieren und die gestellten Anfragen zu bearbeiten.

Reinräume für Multi-Anbieter-Analysen aktivieren

Ein Verbraucher kann eine Multi-Anbieter-Analyse erst dann erfolgreich durchführen, wenn Sie den Reinraum für diesen Zweck aktivieren. Wenn Sie den Reinraum für den Verbraucher aktivieren, geben Sie auch an, welche Reinräume in die Multi-Anbieter-Analyse einbezogen werden können. Der Verbraucher kann keine Multi-Anbieter-Analyse durchführen, die Ihren Reinraum und den Reinraum eines anderen Anbieters einbezieht, es sei denn, Sie genehmigen explizit den Reinraum des anderen Anbieters.

Damit ein Verbraucher eine Multi-Anbieter-Analyse mit einem Reinraum eines beliebigen anderen Anbieters durchführen kann, geben Sie beim Ausführen der folgenden Befehle eine leere Liste an.

Bemerkung

Dies kann nur für Verbraucher ausgeführt werden, die den Reinraum bereits installiert haben.

CALL samooha_by_snowflake_local_db.provider.enable_multiprovider_computation($cleanroom_name_1, '<CONSUMER_ACCOUNT_LOCATOR>', [concat('<PROVIDER_ORG_NAME>.<PROVIDER_ACCOUNT_NAME>.', $cleanroom_name_2)]);

CALL samooha_by_snowflake_local_db.provider.enable_multiprovider_computation($cleanroom_name_2, '<CONSUMER_ACCOUNT_LOCATOR>', [concat('<PROVIDER_ORG_NAME>.<PROVIDER_ACCOUNT_NAME>.', $cleanroom_name_1)]);
Copy

Anfragen zu Multi-Anbieter-Analysen genehmigen

Nachdem die Multi-Anbieter-Analyse in jedem Reinraum aktiviert wurde, können Sie alle Multi-Anbieter-Analyseanfragen, die für die Reinräume gestellt wurden, mit der folgenden API anzeigen:

CALL samooha_by_snowflake_local_db.provider.view_multiprovider_requests($cleanroom_name_1, '<CONSUMER_ACCOUNT_LOCATOR>');

CALL samooha_by_snowflake_local_db.provider.view_multiprovider_requests($cleanroom_name_2, '<CONSUMER_ACCOUNT_LOCATOR>');
Copy

Die Genehmigung eines Antrags kann auf zwei Arten erfolgen:

  1. Automatisch mit einer Aufgabe, die auf eingehende Anfragen überwacht und bei Bedarf auslöst.

  2. Manuell durch einen Benutzer, der eingehende Multi-Anbieter-Analyseanfragen bearbeitet.

Standardmäßig werden Genehmigungen manuell erteilt und die Aufgabe wird in einem angehaltenen Zustand durch die API enable_multiprovider_computation erstellt. Dies erfordert, dass ein Benutzer eingehende Anfragen manuell bearbeitet. Dazu kann durch Ausführen der folgenden Befehle erfolgen:

CALL samooha_by_snowflake_local_db.provider.process_multiprovider_request($cleanroom_name_1, '<CONSUMER_ACCOUNT_LOCATOR>', '<REQUEST_ID>');

CALL samooha_by_snowflake_local_db.provider.process_multiprovider_request($cleanroom_name_2, '<CONSUMER_ACCOUNT_LOCATOR>', '<REQUEST_ID>');
Copy

Bemerkung

Diese API kann entweder auf der Ebene einer Anfrage-ID operieren, indem Sie eine bestimmte Anfrage-ID aus der Ausgabe von view_multiprovider_requests API angeben, oder die REQUEST_ID kann als „-1“ übergeben werden, um alle eingehenden Anfragen zu verarbeiten.

Dieser Prozess führt keine Genehmigung eingehender Anfragen durch, sondern durchläuft eine Verarbeitungslogik, um zu prüfen, ob die Anfrage genehmigt werden kann, und zwar auf der Grundlage von Faktoren wie dem Alter der Anfrage und der Tatsache, ob die angefragten Teilnehmer in der Liste der genehmigten Teilnehmer enthalten sind, die Sie unter enable_multiprovider_computation festgelegt haben.

Sobald die Anfrage bearbeitet wurde, wird sie in die Tabelle samooha_cleanroom_${UUID}.admin.request_log_multiprovider geschrieben. Mithilfe von Abfragen wie den folgenden können Sie die Liste der Anfragen anzeigen und feststellen, ob diese genehmigt wurden oder nicht:

SELECT * FROM samooha_cleanroom_Samooha_Cleanroom_Multiprovider_Clean_Room_1.admin.request_log_multiprovider;
SELECT * FROM samooha_cleanroom_Samooha_Cleanroom_Multiprovider_Clean_Room_2.admin.request_log_multiprovider;
Copy

Mit den folgenden Abfragen können frühere Anfragen, die nicht genehmigt wurden, mit APPROVE=True überschrieben werden, und umgekehrt kann der Zugriff entfernt werden, indem APPROVE=False gesetzt wird. Im Abschnitt Sicherheitshinweise weiter unten finden Sie weitere Einzelheiten zu <CONDITIONS>.

-- Override and approve a request that had previously been rejected
UPDATE samooha_cleanroom_Samooha_Cleanroom_Multiprovider_Clean_Room_1.admin.request_log_multiprovider set APPROVED=True where <CONDITIONS>;
UPDATE samooha_cleanroom_Samooha_Cleanroom_Multiprovider_Clean_Room_2.admin.request_log_multiprovider set APPROVED=True where <CONDITIONS>;

-- Revoke access to a query you had previously approved
UPDATE samooha_cleanroom_Samooha_Cleanroom_Multiprovider_Clean_Room_1.admin.request_log_multiprovider set APPROVED=False where <CONDITIONS>;
UPDATE samooha_cleanroom_Samooha_Cleanroom_Multiprovider_Clean_Room_2.admin.request_log_multiprovider set APPROVED=False where <CONDITIONS>;
Copy

Wenn Sie den automatisierten Genehmigungsablauf den manuellen Genehmigungen vorziehen, müssen Sie die Aufgaben der Multi-Anbieter-Analyse fortsetzen, indem Sie die folgenden Befehle ausführen:

CALL samooha_by_snowflake_local_db.provider.resume_multiprovider_tasks($cleanroom_name_1, '<CONSUMER_ACCOUNT_LOCATOR>');

CALL samooha_by_snowflake_local_db.provider.resume_multiprovider_tasks($cleanroom_name_2, '<CONSUMER_ACCOUNT_LOCATOR>');
Copy

Umgekehrt kann der automatische Genehmigungsablauf, wenn er gerade aktiv ist, mit den folgenden Befehlen ausgeschaltet werden:

CALL samooha_by_snowflake_local_db.provider.suspend_multiprovider_tasks($cleanroom_name_1, '<CONSUMER_ACCOUNT_LOCATOR>');

CALL samooha_by_snowflake_local_db.provider.suspend_multiprovider_tasks($cleanroom_name_2, '<CONSUMER_ACCOUNT_LOCATOR>');
Copy

Sicherheitshinweise: Anfragen zu Multi-Anbieter-Analysen verwalten

Multi-Anbieter-Analysen funktionieren, indem der Hash einer genehmigten Abfrage zu einer Zeilenzugriffsrichtlinie hinzugefügt wird. Die Zeilenzugriffsrichtlinie wird normalerweise unter dem Schema samooha_cleanroom_${UUID}.shared_schema erstellt, und die Definition der Zeilenzugriffsrichtlinie ist wie folgt:

CREATE OR REPLACE ROW ACCESS POLICY samooha_cleanroom_${UUID}.shared_schema.${firewall_name} AS (foo varchar) RETURNS BOOLEAN ->
    EXISTS  (SELECT request_id FROM samooha_cleanroom_${UUID}.admin.REQUEST_LOG_MULTIPROVIDER w
        WHERE party_account=current_account()
            AND approved=true
            AND sha2(current_statement()) = query_hash
        );
Copy

Die Zeilenzugriffsrichtlinie funktioniert, indem Sie in der Tabelle samooha_cleanroom_${UUID}.admin.request_log_multiprovider in Ihrem Konto nach genehmigten Anfragen für den jeweiligen Verbraucher Ihres Reinraums suchen und überprüfen, ob der Hash der aktuellen Abfrage, die in ihrem Konto ausgeführt wird, mit der genehmigten Abfrage übereinstimmt.

Der gesamte Sicherheitszugriff auf Ihre Daten für Multi-Anbieter-Workflows wird durch die in dieser Tabelle (samooha_cleanroom_${UUID}.admin.request_log_multiprovider) aufgeführten Genehmigungen geregelt. Sie müssen sie proaktiv verwalten, um sicherzustellen, dass nur die Abfragen zugelassen sind, für die Sie den Zugriff auf Ihre Daten wünschen.

Einfache Abfragen können verwendet werden, um bereits verarbeitete Anfragen die Genehmigung zu erteilen oder zu entziehen (d. h. die Genehmigungen zu entfernen). Sie können beispielsweise folgende Abfragen ausführen:

-- Override and approve a request that had previously been rejected
UPDATE samooha_cleanroom_Samooha_Cleanroom_Multiprovider_Clean_Room_1.admin.request_log_multiprovider SET APPROVED=True WHERE <CONDITIONS>;
UPDATE samooha_cleanroom_Samooha_Cleanroom_Multiprovider_Clean_Room_2.admin.request_log_multiprovider SET APPROVED=True WHERE <CONDITIONS>;

-- Revoke access to a query you had previously approved
UPDATE samooha_cleanroom_Samooha_Cleanroom_Multiprovider_Clean_Room_1.admin.request_log_multiprovider SET APPROVED=False WHERE <CONDITIONS>;
UPDATE samooha_cleanroom_Samooha_Cleanroom_Multiprovider_Clean_Room_2.admin.request_log_multiprovider SET APPROVED=False WHERE <CONDITIONS>;
Copy

Wie in der Zeilenzugriffsrichtlinie zu sehen ist, wird der Zugriff auf die Daten in Abhängigkeit vom query_hash-Wert gewährt. Der query_hash-Wert kann jedoch auch davon abhängen, welcher Reinraum zufällig ausgewählt wird, um die Abfrage auszuführen. Daher müssen die Bedingungen in <CONDITIONS>, die an die obige Abfrage übergebenen werden, um zu bestimmen, welchen Anfragen der Zugriff entzogen bzw. eine Genehmigung erteilt werden soll, die folgenden bewährten Verfahren nutzen:

  1. Wenn Sie eine Anfrage manuell genehmigen, versuchen Sie, die Anfrage so genau wie möglich zu beschreiben, indem Sie entweder nach request_id und/oder cleanroom_names, requester_account und template_name filtern.

  2. Wenn Sie eine frühere Genehmigung für eine Abfrage widerrufen, widerrufen Sie alle Anfragen, bei denen der query_hash übereinstimmt, und Sie widerrufen auch alle Anfragen mit den gegebenen Werten für requester_account und template_name und cleanroom_names (siehe Beispiel unten).

  3. Wenn ein neuer Antrag nicht genehmigt wird, ändert dies nichts an der Genehmigung der vorherigen Anträge. Wenn Sie den Zugriff auf frühere Abfragen widerrufen möchten, müssen Sie die entsprechenden Anfragen in der Tabelle samooha_cleanroom_${UUID}.admin.request_log_multiprovider mit „APPROVED=False“ markieren.

  4. Wenn Sie die Menge der erlaubten Teilnehmer ändern, indem Sie enable_multiprovider_computation erneut ausführen, werden frühere Anfragen standardmäßig nicht widerrufen. Sie müssen Genehmigungen verwalten, indem Sie den Zugriff auf frühere Kooperationen widerrufen, indem Sie „APPROVED=False“ in der Tabelle samooha_cleanroom_${UUID}.admin.request_log_multiprovider setzen.

Beispiel dafür, wie Sie die Fähigkeit einer bestimmten Zusammenarbeit, Anfragen zu stellen, gründlich widerrufen können. Angenommen, unter requester_account=ABC123 gab es eine Zusammenarbeit, die Sie widerrufen möchten. Sie können die folgenden Abfragen ausführen:

UPDATE samooha_cleanroom_{UUID}.admin.request_log_multiprovider SET APPROVED=False WHERE requester_account = 'ABC123' AND query_hash = '<HASH>';
UPDATE samooha_cleanroom_{UUID}.admin.request_log_multiprovider SET APPROVED=False WHERE requester_account = 'ABC123' AND template_name = '<TEMPLATE_NAME>' AND request:CLEANROOM_NAMES = [$cleanroom_name1, $cleanroom_name2];
Copy

Der Zugriff sowohl auf den Abfrage-Hash als auch auf diese Vorlage in dieser Reinraum-Zusammenarbeit wird widerrufen.

Hier finden Sie einige Beispielabfragen, mit denen Sie sehen können, wie viele Abfragen von jedem einzelnen Antragstellerkonto gestellt wurden:

SELECT requester_account, count(*) FROM samooha_cleanroom_{UUID}.admin.request_log_multiprovider;

-- If there is a requester_account raising too many queries they can be disallowed in bulk
UPDATE samooha_cleanroom_{UUID}.admin.request_log_multiprovider SET APPROVED=False WHERE requester_account = '<ACCOUNT>';
Copy

Verbraucher – Anfrage ausführen

Nachher die von der API prepare_multiprovider_flow ausgelöste Anfrage genehmigt wurde, kann sie unter Verwendung der folgenden API im Reinraum-Cluster ausgeführt werden. Diese Ausführung erfolgt, indem ein Reinraum zufällig ausgewählt wird, um den Workflow auszuführen. Solange beide Reinräume die Anfrage genehmigt haben, kann die Multi-Anbieter-Analyse fortgesetzt werden.

CALL samooha_by_snowflake_local_db.consumer.execute_multiprovider_flow([$cleanroom_name_1, $cleanroom_name_2]);
Copy

Beachten Sie auch, dass bei Genehmigung eines Antrags nach der Prozedur prepare_multiprovider_flow die Prozedur execute_multiprovider_flow so viele Male wie nötig aufgerufen werden kann, ohne dass Sie prepare_multiprovider_flow erneut aufrufen müssen. Wenn Sie jedoch eine andere Analyse oder eine Analyse in einem anderen Reinraum-Cluster durchführen möchten, müssen Sie prepare_multiprovider_flow erneut aufrufen.

Nützliche Funktionen

Sobald die Interoperabilitätsanfragen an die einzelnen Anbieter geschrieben sind, erfolgt die Genehmigung in Form von anfragespezifischen Kundenvorlagen, die dem Reinraum hinzugefügt und während der Analyse ausgeführt werden. Diese richten die erforderliche Infrastruktur ein. Sie können in Echtzeit verfolgen, wie diese Vorlagen durch den Genehmigungsprozess der Anfrage hinzugefügt werden, indem Sie die folgenden Befehle ausführen.

CALL samooha_by_snowflake_local_db.consumer.view_added_templates($cleanroom_name_1);
CALL samooha_by_snowflake_local_db.consumer.view_added_templates($cleanroom_name_2);
Copy