Grundlegende Datenanalyse durch Verbraucher

Übersicht

This topic demonstrates a basic consumer-run analysis using the clean rooms API. The example shows how a provider can programmatically create and share a clean room with data, and a consumer can run an analysis against the provider’s data. The provider defines the SQL queries that can be run against their data. A provider can define queries that query only the provider’s data, only the consumer’s data, or that join provider and consumer data.

You can download the full code example to upload and run on your Snowflake account.

Die folgende Abbildung zeigt den Datenfluss durch die Hauptkomponenten einer grundlegenden vom Verbrauchenden durchgeführten Analyse.

Basic data flow direction in a consumer-run analysis

In a basic consumer-run analysis involving two parties, the provider and consumers link data into the clean room. This data is accessed using a secure view stored in the consumer DB in the clean room application package on the consumer’s account.

Während einer Analyse verwendet die Clean Room-App im Konto des Verbrauchenden die angegebenen sicheren Verbraucher- und Anbieteransichten, und die Ergebnisse werden für den Verbrauchenden freigegeben.

Schritte für Anbieter

Umgebung einrichten

To use the API, you must use a warehouse that SAMOOHA_APP_ROLE has privileges in. app_wh is one of a number of warehouses with access to the API. Choose the warehouse that is appropriate for your needs. (You can also use your own warehouse, if you choose.)

The SAMOOHA_APP_ROLE role is required to access the API.

USE WAREHOUSE app_wh;
USE ROLE SAMOOHA_APP_ROLE;
Copy

Reinraum erstellen

The next step is to create a new clean room. This is done with a single API call that specifies whether the clean room is for internal or external use. Internal clean rooms can be accessed only by consumers within the same organization; external clean rooms can be used by consumers outside the organization. For both clean room types, consumers must be invited to use the clean room to be able to access it.

Externe Clean Rooms lösen zusätzliche Sicherheitsprüfungen aus, wenn bestimmte Aktionen durchgeführt werden. Wenn dies geschieht, müssen Sie provider.view_cleanroom_scan_status aufrufen, um zu sehen, wann der Sicherheitsscan abgeschlossen ist. Dann können Sie mit der nächsten Aktion fortfahren.

Im folgenden Beispiel wird ein interner Clean Room erstellt:

CALL samooha_by_snowflake_local_db.provider.cleanroom_init($cleanroom_name, 'INTERNAL');
Copy

Verknüpfungsrichtlinie festlegen

If you add a template to the clean room that allows the consumer to join on your data, you should set a clean room join policy on your data. A clean room join policy specifies which columns can be joined on in queries run by collaborators. Your own join policies don’t constrain your own queries.

Clean rooms support a few types of data policies that you can set on linked data. These policies are similar to, but not the same as, the equivalent Snowflake policies, and are applied only on the internal view, not on the source data. Any Snowflake policies that are set on the source data are propagated to the views linked into a clean room. Clean room policies are set on the linked data only, not on the source data.

Wichtig

The template is responsible for using JinjaSQL filters to enforce policies. If the template does not use policy filters, the policies will not be respected. Always put policy filters on templates that you write, and examine any templates that you run to confirm that they enforce clean room policies.

Sie können Richtlinien nur für die Daten festlegen, die Sie verknüpfen. Sie können keine Richtlinien für die Daten einer anderen Partei festlegen.

Das folgende Beispiel zeigt, wie Sie eine Verknüpfungsrichtlinie festlegen, die es ermöglicht, zwei Spalten aus der verknüpften Tabelle miteinander zu verknüpfen.

CALL samooha_by_snowflake_local_db.provider.set_join_policy(
  $cleanroom_name,
  ['SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:HASHED_EMAIL',
   'SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:HASHED_PHONE']);
Copy

Erfahren Sie mehr über Verknüpfungsrichtlinien.

Vorlagen zum Clean Room hinzufügen

A clean room template is a valid JinjaSQL template that typically evaluates to a SQL query. A template, sometimes called an analysis, can be passed arguments by the caller, and can access any data linked into the clean room. Both providers and consumers can add templates into a clean room and run them.

Snowflake provides a few standard templates, but you will probably write your own custom templates.

Alle Clean Room-Richtlinien, die Sie festlegen, werden nur durchgesetzt, wenn die Vorlage Richtlinienfilter in der Vorlage enthält. Stellen Sie also sicher, dass die Vorlagen, die Sie einem Clean Room hinzufügen, diese Filter enthalten. Weitere Informationen zu Richtlinien finden Sie unter Richtlinien für Clean Room-Tabellen.

Standardmäßig können Vorlagen nur von Verbrauchern ausgeführt werden. Wenn ein Anbieter eine Vorlage ausführen möchte, müssen sie den Verbraucher um eine Berechtigung bitten. Außerdem gilt: Wenn ein Verbraucher eine Vorlage hochladen möchte, muss er den Anbieter um Erlaubnis bitten.

Weitere Informationen zum Erstellen einer kundenspezifischen Vorlage finden Sie unter Kundenspezifische Vorlagen zu einem Clean Room hinzufügen und Referenz für benutzerdefinierte Clean Room-Vorlagen.

Das folgende Beispiel zeigt, wie Sie eine von Snowflake bereitgestellte Vorlage zum Clean Room hinzufügen:

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

Spaltenrichtlinien festlegen

Clean Room-Spaltenrichtlinien legen fest, welche Spalten aus Ihren Tabellen in Abfragen von Teilnehmern projiziert werden können. Eine Spaltenrichtlinie ist sowohl an eine Spalte als auch an eine Vorlage gebunden, sodass verschiedene Spalten mit verschiedenen Vorlagen als projiziert definiert werden können. Eine Vorlage muss in einem Clean Room vorhanden sein, bevor Sie Spaltenrichtlinien für diese Vorlage festlegen können.

Column policies, like all policies, are overwrite-only; this means that setting column policies completely overwrites any existing column policies set by that account. Both the provider and the consumer can set column policies on their data. Learn more about column policies.

Das folgende Beispiel zeigt, wie Sie die Projektion von vier Spalten aus der zuvor verknüpften Beispieldatenbank für Clean Rooms ermöglichen:

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

Freigabe für Verbraucher

Nur vom Anbietenden eingeladene Verbrauchende haben Zugriff auf den Clean Room. Verbraucher können einen Clean Room nicht mit anderen Verbrauchern teilen. Bestimmte Verbraucher können erst nach der Veröffentlichung auf den Clean Room zugreifen. Einladungen zum Beitritt zu einem Clean Room erfolgen auf Kontoebene, nicht auf Benutzerebene.

Das folgende Beispiel zeigt, wie Sie einen Clean Room für zwei Verbraucher freigeben. Die Prozedur benötigt zwei parallele, durch Kommas getrennte Listen von Verbraucherkonto-Locator und Data Sharing-Konto-IDs für Verbraucher.

CALL samooha_by_snowflake_local_db.provider.add_consumers(
  $cleanroom_name,
  'CONSUMER_LOCATOR1,CONSUMER_LOCATOR2',
  'CONSUMER_DATA_SHARING_ACCOUNT_ID1,CONSUMER_DATA_SHARING_ACCOUNT_ID2');
Copy

Für Verbraucher in anderen Cloudhosting-Regionen freigeben

Wenn sich ein Verbraucher und ein Anbieter in unterschiedlichen Cloudregionen befinden, müssen der Anbieter und der Verbraucher Cloud-übergreifende automatische Ausführung aktivieren, bevor der Verbraucher dem Clean Room hinzugefügt werden kann. Sie können Ihre eigene Cloudregion anzeigen, indem Sie SELECT CURRENT_REGION(); ausführen. Normalerweise können Sie die Region des Verbrauchers nicht sehen, aber wenn Sie versuchen, einen Verbraucher in einer anderen Region hinzuzufügen, schlägt provider.add_consumers fehl und gibt eine Meldung über das Problem aus. Wenn dieser Fehler auftritt, sollten Sie provider.remove_consumers aufrufen, um die Konten zu entfernen, die sich in einer anderen Region befinden. Aktivieren Sie dann die Cloud-übergreifende automatische Ausführung, und fügen Sie die regionsübergreifenden Konten wieder hinzu.

Standardversion verwenden

Clean Rooms sind versionierte native Anwendungen. Bestimmte Aktionen, wie das Hinzufügen von Code zu einem Clean Room, erzeugen eine neue Patchversion der Anwendung. Verbraucher müssen den Clean Room in ihrem Konto installieren. Die Version, die installiert wird, basiert auf der von Ihnen angegebenen Standardversionsnummer. Wenn Sie später eine neue Version des Clean Rooms veröffentlichen und die Standardversionsnummer erhöhen, werden alle von Verbrauchern installierten Versionen automatisch aktualisiert. Neue Installationen werden standardmäßig auf die neue Version umgestellt. Erfahren Sie mehr über die Versionierung von Clean Rooms.

Das folgende Beispiel zeigt, wie Sie die Standardversion eines Clean Rooms auf V1.0.0 einstellen. Das ist die erste Version eines Clean Rooms, wenn Sie keinen Code hochgeladen haben:

CALL samooha_by_snowflake_local_db.provider.set_default_release_directive(
  $cleanroom_name,
  'V1_0',          -- Version number: Never changes.
  '0'              -- Patch number: Can change.
  );
Copy

Clean Room veröffentlichen

Im folgenden Beispiel sehen Sie, wie Sie einen Clean Room veröffentlichen oder erneut veröffentlichen. Befolgen Sie diese Anweisung. Wenn dieser Prozess zum ersten Mal aufgerufen wird, macht er den Clean Room für alle Verbraucher, für die Sie ihn freigegeben haben, sichtbar und installierbar. Sie sollten diesen Prozess immer dann aufrufen, wenn Sie erhebliche Änderungen vornehmen, z. B. wenn Sie die Standardversion aktualisieren oder Änderungen speziell für die Clean Room UI vornehmen.

CALL samooha_By_snowflake_local_db.provider.create_or_update_cleanroom_listing(
  $cleanroom_name);
Copy

Jetzt kann der Verbraucher den Clean Room installieren, Daten verknüpfen, Richtlinien festlegen und Vorlagen ausführen, wie nachfolgend beschrieben.

Tipp

When you no longer need a clean room, you should delete the clean room on the provider and consumer accounts (provider.drop_cleanroom and consumer.uninstall_cleanroom). There is a limit to the number of clean rooms and collaborators per account. When you leave many unused clean rooms in your account, you can reach your quota.

Schritte für Verbraucher

Nachdem ein Anbieter einen Clean Room veröffentlicht hat, können alle Verbraucher, die als Teilnehmer hinzugefügt wurden, den Clean Room entweder über die UI oder die API anzeigen oder installieren. In diesem Abschnitt wird gezeigt, wie ein Verbraucher mit der API einen Clean Room installieren und eine Analyse ausführen kann.

Umgebung einrichten

Like the provider, the consumer must use a warehouse that SAMOOHA_APP_ROLE can access. However, unlike the provider, the consumer can either use the SAMOOHA_APP_ROLE role directly for full API access, or a clean room administrator in that account can grant a more limited role that gives privileges to run a subset of the API for consumers. This limited role, sometimes generically called a „run role,“ is granted by a user with full clean room privileges. Learn how to grant limited API access.

Mit einer Ausführungsrolle können Sie keinen Clean Room installieren, also müssen Sie SAMOOHA_APP_ROLE, wie im folgenden Beispiel gezeigt, verwenden:

USE WAREHOUSE app_wh;
USE ROLE SAMOOHA_APP_ROLE;
Copy

Reinraum installieren

Der folgende Ausschnitt zeigt, wie Sie alle installierten Clean Rooms auflisten, zu deren Installation Sie eingeladen wurden:

-- See all clean rooms, installed and not.
CALL samooha_by_snowflake_local_db.consumer.view_cleanrooms();

-- See only clean rooms that aren't installed.
CALL samooha_by_snowflake_local_db.consumer.view_cleanrooms() ->>
  SELECT * FROM $1
    WHERE IS_ALREADY_INSTALLED = false;
Copy

Installieren Sie den Clean Room, den der Anbieter für Sie freigegeben hat, wie im folgenden Beispiel gezeigt. Sie müssen den Konto-Locator des Anbieters angeben, wenn Sie einen Clean Room installieren.

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

Tipp

Clean Rooms haben sowohl einen Namen als auch eine ID. FürClean Rooms, die mit der API erstellt wurden, verwenden Sie den Namen des Clean Rooms überall dort, wo ein API-Prozess einen Clean Room-Namen benötigt. Für Clean Rooms, die über die UI erstellt wurden, verwenden Sie die Clean Room ID und nicht den Namen. Dies gilt immer dann, wenn ein API-Prozess einen Clean Room-Namen benötigt.

Die Clean Room UI beschriftet Clean Rooms, die mit der API als Supported with Developer APIs erstellt wurden.

Daten hinzufügen und Richtlinien festlegen

If the clean room templates allow the consumer to include their own data in a query, the consumer registers data, links data, and sets policies like the provider does. Be sure to use the consumer versions of the procedures, as shown in the following example:

-- You must use a role with MANAGE GRANTS privilege on an object to register it.
USE ROLE ACCOUNTADMIN;
CALL samooha_by_snowflake_local_db.consumer.register_db('MY_DATABASE');

-- Link some tables.
CALL samooha_by_snowflake_local_db.consumer.link_datasets(
  $cleanroom_name,
  [
    'SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS',
    'MY_DATABASE.PUBLIC.EXPOSURES'
  ]);
Copy

Die Verknüpfungsrichtlinie des Anbieters zeigt, welche Anbieterspalten verknüpft werden können. Dieses Beispiel zeigt, wie Sie überprüfen, mit welchen Anbieterspalten Sie verknüpfen können:

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

A provider needs the consumer’s approval to run a template in the clean room. As a result, most consumers don’t bother setting policies on the tables that they link in. Nevertheless, we recommend that you consider adding policies in case a provider asks to run a template later, because you might forget to add appropriate policies at that time.

Wenn Sie Richtlinien festlegen, werden diese nur durchgesetzt, wenn die Vorlage einen join_policy- oder column_policy-Filter für die Spalte in der Vorlage enthält. Stellen Sie also sicher, dass die Vorlagen, die Sie einem Clean Room hinzufügen, diese Filter enthalten, um Ihre Richtlinien durchzusetzen. Um die Vorlagen in einem Clean Room zu untersuchen, rufen Sie consumer.view_added_templates auf. Weitere Informationen zu Richtlinien finden Sie unter Richtlinien für Clean Room-Tabellen.

Analyse ausführen

Bevor Sie eine Vorlage ausführen, untersuchen Sie diese in der Regel, um festzustellen, was sie tut und welche Variablen sie akzeptiert. Anschließend prüfen Sie, welche Anbietertabellen im Clean Room verfügbar sind.

Vorlagen prüfen

Sie können die Vorlagen in einem Clean Room auflisten und den Code jeder einzelnen untersuchen (es sei denn, der Anbieter hat den Code ausdrücklich verschleiert). Dies kann nützlich sein, um Ihnen zu helfen, die Abfrage besser zu verstehen. Sie können den Clean Room auch bitten, die Vorlage zu parsen und zu zeigen, welche Variablen Sie übergeben können, wenn Sie den Code ausführen.

Sie können eine Liste von Tabellen übergeben, die in der Abfrage verwendet werden sollen, vorbehaltlich des Designs der Vorlage. Jede mit dem Clean Room verknüpfte Tabelle kann an die Vorlage übergeben werden.

Many templates also support variables that you can specify at run time; for example, to match a particular value or to specify which columns to show. Ideally, the provider should let you know what the template does and what arguments it accepts. But typically, you also want to examine a template to see the code. The following snippet lists the templates added to the clean room by any collaborator, and gets the arguments supported for a specific template:

-- View the list of templates available in this clean room,
-- and the source code for each template.
CALL samooha_by_snowflake_local_db.consumer.view_added_templates($cleanroom_name);

-- Show which variables can be passed in when running the specified template.
CALL samooha_by_snowflake_local_db.consumer.get_arguments_from_template(
  $cleanroom_name,
  $template_name
);
Copy

Tipp

Wenn Sie die my_table-Array-Variable sehen, die in einer Vorlage verwendet wird, enthält diese die Liste der Verbraucher-Tabellennamen, die Sie übergeben, wenn Sie die Vorlage ausführen. Die source_table-Array-Variable enthält die Liste der Anbieter-Tabellennamen, die Sie übergeben, wenn Sie die Vorlage ausführen.

Verfügbare Daten anzeigen

Sie können die Datensets auflisten, die Sie und der Anbieter mit einem Clean Room verknüpft haben, wie im folgenden Beispiel gezeigt:

-- See which datasets you have linked into the clean room.
CALL samooha_by_snowflake_local_db.consumer.view_consumer_datasets($cleanroom_name);

-- See which datasets the provider has linked into the clean room.
CALL samooha_by_snowflake_local_db.consumer.view_provider_datasets($cleanroom_name);
Copy

Wenn Sie einen Tabellennamen übergeben, verwenden Sie den Tabellennamen: . Verwenden Sie nicht den Anzeigenamen aus den Ergebnissen dieser Prozesse.

Vorlage ausführen

In den beiden vorangegangenen Schritten haben Sie gelernt, welche Daten Sie haben und welche Variablen Sie übergeben können. Sie sind nun bereit, die Analyse auszuführen.

Je nach Abfrage und Größe der Daten sollten Sie die Warehouse-Größe in etwas Geeigneteres ändern.

The following example shows how a user might call a template that takes both consumer and provider tables, and two variables: dimensions, which is used as a grouping column, and an optional where_clause, which is used in a WHERE clause in the query.

Die Vorlage führt eine Abfrage auf einer einzelnen Anbietertabelle aus, sodass in der Anfrage die Verbrauchertabellen weggelassen werden.

Im folgenden Beispiel sehen Sie, dass der dimensions-Wert ein Spaltenname mit dem Präfix p ist. Das p gibt an, dass diese Spalte aus der Tabelle des Anbieters stammt, der übergeben wird. Spaltennamen erfordern normalerweise, dass Sie ein p oder c hinzufügen, um anzugeben, aus welcher Tabelle sie stammen – aus einer Anbieter- oder Verbrauchertabelle. So werden Spaltennamen eindeutig definiert. Diese Anforderung ist jedoch sehr vorlagenspezifisch. Sie müssen mit dem Anbieter der Vorlage kommunizieren oder den Code der Vorlage untersuchen, um zu verstehen, wann diese Präfixe erforderlich sind.

CALL samooha_by_snowflake_local_db.consumer.run_analysis(
$cleanroom_name,
$template_name,
[],                                              -- This template doesn't accept consumer tables.
['SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS'],      -- Provider tables.
object_construct(                                -- Template-specific arguments.
  'dimensions', ['p.STATUS'],                    -- Template takes a variable named 'dimensions'.
  'where_clause', 'p.REGION_CODE=$$REGION_10$$'  -- Template allows you to pass in a WHERE clause.
                                                 -- $$ is used to wrap string literals
  )
);
Copy

Beispielcode

The following worksheet files demonstrate how to create, share, and run a clean room analysis.

Download the following examples, and then upload them as worksheet files in your Snowflake account. You need separate accounts for the provider and consumer, each with the clean rooms API installed. See instructions to upload a SQL worksheet into your Snowflake account.