Snowflake Data Clean Rooms: Maschinelles Lernen

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 Analysen mittels fortgeschrittener Machine-Learning-Algorithmen auszuführen. Der Anbieter lädt sicheren Python-Code, der einen Machine-Learning-Algorithmus auf Basis von Random-Forest (XGBoost) implementiert, in den Reinraum. Dies ist absolut vertraulich und nur für den Anbieter sichtbar. Der Verbraucher kann den Python-Machine-Learning-Code, der in den Reinraum geladen wird, nicht sehen.

Dieser Workflow umfasst Folgendes:

  1. Anbieter:

    a. Hinzufügen einer benutzerdefinierten Vorlage, die eine Lookalike Modeling-Analyse durchführt

    b. Hinzufügen von sicheren Machine-Learning-Vorlagen in Python-Code, die XGBoost nutzen

    c. Aufrufen der Machine-Learning-UDFs innerhalb des Reinraums über die benutzerdefinierte Vorlage

  2. Verbraucher:

    a. Ausführen der benutzerdefinierten Vorlage, die die vom Anbieter definierten ML-Funktionen verwendet.

Lookalike Modeling ist ein Typ von Analyse, bei dem ein Verbraucher versucht, „wertvolle“ Kunden in den Daten eines Anbieters zu ermitteln, indem ein statistisches Modell auf deren hochwertigen Kunden trainiert wird. Dieses Modell verwendet vom Verbraucher definierte Flags, um im Datenset des Verbrauchers wertvolle Benutzer zu kennzeichnen, z. B. solche, deren Ausgaben einen bestimmten Schwellenwert überschreiten. Das trainierte Modell wird dann verwendet, um abzuleiten, welche Kunden in den Daten des Anbieters für den Verbraucher potenziell „wertvoll“ sein könnten.

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 = 'Machine Learning 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.

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');
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. 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, '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.

Vertraulichen Machine-Learning-Python-Code zum Reinraum hinzufügen

In diesem Abschnitt erfahren Sie, wie Sie einige Python-Funktionen für die Lookalike-ML-Aufgabe in den Reinraum laden. Alle im Reinraum installierten Python-Funktionen bleiben absolut vertraulich. Sie sind für den Verbraucher nicht sichtbar.

Mit der folgenden API können Sie Ihre Python-Funktionen direkt als Inline-Funktionen im Reinraum definieren. Alternativ können Sie Python auch aus Stagingdateien laden, die Sie in den Reinraum-Stagingbereich hochgeladen haben. Ein Beispiel dafür finden Sie im API-Referenzhandbuch.

Bemerkung

Beachten Sie, dass diese Implementierung durch die Einschränkung der Gesamtgröße von Snowflake auf die Datenmenge, die von ARRAY_AGG aggregiert werden kann (d. h. 16 MB), begrenzt ist. Eine Implementierung, die Batching- und Streaming-Modelle nutzt und mithilfe von Batching auf beliebig große Datensets skalieren kann, ist auf Anfrage erhältlich.

call samooha_by_snowflake_local_db.provider.load_python_into_cleanroom(
    $cleanroom_name, 
    'lookalike_train',
    ['input_data variant', 'labels variant'],
    ['pandas', 'numpy', 'xgboost'],
    'variant',
    'train',
    $$
import numpy as np
import pandas as pd
import xgboost
from sklearn import preprocessing
import sys
import os
import pickle
import codecs
import threading


class TrainXGBoostClassifier(object):
    def __init__(self):
        self.model = None
        self._params = {
            "objective": "binary:logistic",
            "max_depth": 3,
            "nthread": 1,
            "eval_metric": "auc",
        }
        self.num_boosting_rounds = 10

    def get_params(self):
        if self.model is not None and "updater" not in self._params:
            self._params.update(
                {"process_type": "update", "updater": "refresh", "refresh_leaf": True}
            )
        return self._params

    def train(self, X, y):
        """
        Train the model in a threadsafe way
        """
        # pick only the categorical attributes
        categorical = X.select_dtypes(include=[object])

        # fit a one-hot-encoder to convert categorical features to binary features (required by XGBoost)
        ohe = preprocessing.OneHotEncoder()
        categorical_ohe = ohe.fit_transform(categorical)
        self.ohe = ohe

        # get the rest of the features and add them to the binary features
        non_categorical = X.select_dtypes(exclude=[object])
        train_x = np.concatenate((categorical_ohe.toarray(), non_categorical.to_numpy()), axis=1)

        xg_train = xgboost.DMatrix(train_x, label=y)

        params = self.get_params()
        params["eval_metric"] = "auc"
        evallist = [(xg_train, "train")]
        evals_result = {}

        self.model = xgboost.train(
            params, xg_train, self.num_boosting_rounds, evallist, evals_result=evals_result
        )

        self.evals_result = evals_result

    def __dump_model(self, model):
        """
        Save down the model as a json string to load up for scoring/inference
        """
        pickle_jar = codecs.encode(pickle.dumps([model, self.ohe]), "base64").decode()
        return pickle_jar

    def dump_model(self):
        """
        Save down the model as a json string to load up for scoring/inference
        """
        if self.model is not None:
            return self.__dump_model(self.model)
        else:
            raise ValueError("Model needs to be trained first")


def train(d1, l1):

    # get take training features and put them in a pandas dataframe
    X = pd.DataFrame(d1)

    # get the labels into a Numpy array
    y = np.array(l1)

    trainer = TrainXGBoostClassifier()
    trainer.train(X, y)

    # return training stats, accuracy, and the pickled model and pickled one-hot-encoder
    return {
        "total_rows": len(d1),
        "total_bytes_in": sys.getsizeof(d1),
        "model": trainer.dump_model(),
        "iteration": trainer.num_boosting_rounds,
        "auc": np.max(trainer.evals_result["train"]["auc"]),
        "error": 1 - np.max(trainer.evals_result["train"]["auc"])
    }    
    $$
);
Copy

Lassen Sie uns nun eine Scoring-Funktion im Reinraum installieren:

call samooha_by_snowflake_local_db.provider.load_python_into_cleanroom(
    $cleanroom_name, 
    'lookalike_score',
    ['pickle_jar variant', 'emails variant', 'features variant'],
    ['pandas', 'numpy', 'xgboost', 'scikit-learn'],
    'string',
    'score',
    $$
import numpy as np
import pandas as pd
import xgboost as xgb
import pickle
import codecs
import json


def score(model, emails, features):
    # load model
    model = model[0] if not isinstance(model, str) else model
    model = pickle.loads(codecs.decode(model.encode(), "base64"))

    # retrieve the XGBoost trainer from the pickle jar
    bst = model[0]

    # retrieve the fitted one-hot-encoder from the pickle jar
    ohe2 = model[1]

    # create pandas dataframe from the inference features
    Y = pd.DataFrame(features)

    # select the categorical attributes and one-hot-encode them
    Y1 = Y.select_dtypes(include=[object])
    Y2 = ohe2.transform(Y1)

    # select the non-categorical attributes
    Y3 = Y.select_dtypes(exclude=[object])

    # join the results of the one-hot encoding to the rest of the attributes
    Y_pred = np.concatenate((Y2.toarray(), Y3.to_numpy()), axis=1)

    # inference
    dscore = xgb.DMatrix(Y_pred)
    pred = bst.predict(dscore)

    retval = list(zip(np.array(emails), list(map(str, pred))))
    retval = [{"email": r[0], "score": r[1]} for r in retval]
    return json.dumps(retval)  
    $$
);
Copy

Bemerkung

Wenn Sie Python in den Reinraum laden, wird ein neuer Patch für den Reinraum erstellt. Wenn Ihre Reinraum-Distribution auf EXTERNAL eingestellt ist, müssen Sie warten, bis der Sicherheitsscan abgeschlossen ist, bevor Sie die Standard-Release-Richtlinie wie folgt aktualisieren:

-- See the versions available inside the cleanroom
show versions in application package samooha_cleanroom_Machine_Learning_Demo_clean_room;

-- Once the security scan is approved, update the release directive to the latest version
call samooha_by_snowflake_local_db.provider.set_default_release_directive($cleanroom_name, 'V1_0', '2');
Copy

Benutzerdefinierte Lookalike Modeling-Vorlage hinzufügen

Um eine benutzerdefinierte Analysevorlage zum Reinraum hinzuzufügen, benötigen Sie einen Platzhalter für Tabellennamen auf Anbieter- und Verbraucherseite sowie Join-Spalten auf der Anbieterseite. In SQL Jinja-Vorlagen müssen diese Platzhalter immer wie folgt sein:

  • source_table: Ein Array von Tabellennamen des Anbieters.

  • my_table: Ein Array von Tabellennamen des Verbrauchers.

Tabellennamen können durch die Verwendung dieser Variablen dynamisch gemacht werden, aber sie können in der Vorlage auch hartkodiert werden, wenn Sie den Namen der mit dem Reinraum verknüpften Ansicht verwenden. Die Spaltennamen können entweder fest in der Vorlage kodiert oder dynamisch über Parameter festgelegt werden. Wenn sie über Parameter festgelegt werden, denken Sie daran, dass Sie die Parameter dimensions oder measure_column aufrufen müssen, die Arrays sein müssen, damit sie mit der Spaltenrichtlinie abgeglichen werden können. Sie fügen diese als SQL Jinja-Parameter in die Vorlage ein, die später vom Verbraucher beim Ausführen der Abfrage übergeben werden. Die Verknüpfungsrichtlinien stellen sicher, dass der Verbraucher keine anderen als die autorisierten Spalten verknüpfen kann.

Alternativ kann jedes Argument in einer benutzerdefinierten SQL Jinja-Vorlage mit den folgenden Filtern auf die Einhaltung der Verknüpfungs- und Spaltenrichtlinien überprüft werden:

  • join_policy: Prüft, ob ein String-Wert oder eine Filterklausel mit der Verknüpfungsrichtlinie konform ist.

  • column_policy: Prüft, ob ein String-Wert oder eine Filterklausel mit der Spaltenrichtlinie konform ist.

  • join_and_column_policy: Prüft, ob Spalten, die für eine Verknüpfung in einer Filterklausel verwendet werden, mit der Verknüpfungsrichtlinie übereinstimmen, und ob Spalten, die als Filter verwendet werden, mit der Spaltenrichtlinie übereinstimmen.

Beispielsweise wird in der Klausel {{ provider_id | sqlsafe | join_policy }} eine Eingabe von p.HEM geparst, um zu prüfen, ob p.HEM in der Verknüpfungsrichtlinie enthalten ist. Hinweis: Verwenden Sie den Filter sqlsafe nur mit Vorsicht, da er es Teilnehmern erlaubt, reines SQL in die Vorlage einzubringen.

Bemerkung

Alle Anbieter- und Verbrauchertabellen müssen mit diesen Argumenten referenziert werden, da der Name der mit dem Reinraum tatsächlich verknüpften sicheren Ansicht ein anderer ist als der Tabellenname. Wichtig: Anbieter-Tabellen-Aliasse müssen p (oder p1), p2, p3, p4 usw. sein und Verbraucher-Tabellen-Aliasse müssen c (oder c1), c2, c3 usw. sein. Dies ist erforderlich, um die Sicherheitsrichtlinien im Reinraum durchzusetzen.

Beachten Sie, dass diese Funktion jede vorhandene Vorlage mit demselben Namen überschreibt. Wenn Sie eine bestehende Vorlage aktualisieren möchten, rufen Sie einfach diese Funktion erneut mit der aktualisierten Vorlage auf.

Aus dem Datenset des Anbieters wird ein Satz von Merkmalen (Features) ausgewählt, und aus dem Datenset des Verbrauchers wird ein Satz von Labels ausgewählt, zusammen mit einem Flag für „hochwertig“ („label_value“ genannt). Diese beiden Tabellen werden dann über die E-Mail-Adresse per INNER JOIN verknüpft und an den Random Forest-Trainingsalgorithmus übergeben. Schließlich wird die Ausgabe des Modelltrainingsschritts an eine Inferenzfunktion übergegeben, die das trainierte Modell verwendet, um zu schlussfolgern („infer“), welche Anbieterkunden NICHT in den Verbraucher-Datensets „wertvoll“ sein könnten. Die Anzahl dieser Personen wird dann zusammen mit dem Modellfehler zurückgegeben.

Der Schwellenwert für die Bestimmung der Punktzahl, ab der ein Kunde „wahrscheinlich wertvoll“ ist, wird in der Vorlage manuell auf 0,5 festgelegt. Dies kann leicht geändert werden, wenn Sie die Vorlage zum Reinraum hinzufügen.

call samooha_by_snowflake_local_db.provider.add_custom_sql_template(
    $cleanroom_name, 
    'prod_custom_lookalike_template', 
    $$
WITH
features AS (
    SELECT
        p.hashed_email,
        array_construct(identifier({{ dimensions[0] | column_policy }}) {% for feat in dimensions[1:] %} , identifier({{ feat | column_policy }}) {% endfor %}) as features
    FROM
        identifier({{ source_table[0] }}) as p
),
labels AS (
    SELECT
        c.hashed_email,
        {{ filter_clause | sqlsafe | column_policy }} as label_value
    FROM
        identifier({{ my_table[0] }}) as c
),
trained_model AS (
    SELECT
        train_out:model::varchar as model,
        train_out:error::float as error
    FROM (
      SELECT
        cleanroom.lookalike_train(array_agg(f.features), array_agg(l.label_value)) as train_out
      FROM features f, labels l
      WHERE f.hashed_email = l.hashed_email
    )
),
inference_output AS (
    SELECT
        MOD(seq4(), 100) as batch,
        cleanroom.lookalike_score(
            array_agg(distinct t.model), 
            array_agg(p.hashed_email), 
            array_agg(array_construct( identifier({{ dimensions[0] | column_policy }}) {% for feat in dimensions[1:] %} , identifier({{ feat | column_policy }}) {% endfor %}) )
        ) as scores
    FROM trained_model t, identifier({{ source_table[0] }}) p
    WHERE p.hashed_email NOT IN (SELECT c.hashed_email FROM identifier({{ my_table[0] }}) c)
    GROUP BY batch
),
processed_output AS (
    SELECT value:email::string as email, value:score::float as score FROM (select scores from inference_output), lateral flatten(input => parse_json(scores))
)
SELECT p.audience_size, t.error from (SELECT count(distinct email) as audience_size FROM processed_output WHERE score > 0.5) p, trained_model t;
    $$
);  
Copy

Bemerkung

Sie können Differential Privacy-Sensitivität zum obigen Aufruf der Prozedur „samooha_by_snowflake_local_db.provider.add_custom_sql_template“ als letzten Parameter hinzufügen (wenn Sie ihn nicht hinzufügen, wird er standardmäßig auf 1 gesetzt).

Wenn Sie die derzeit im Reinraum aktiven Vorlagen anzeigen möchten, rufen Sie die folgende Prozedur auf. Sie können die Änderungen vornehmen, 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.

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

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_provider_sample_database.lookalike_modeling.customers limit 10;
Copy

Legen Sie die Spalten fest, auf denen Sie gruppieren und aggregieren (z. B. SUM oder AVG) und generell in einer Analyse für jede Kombination aus Tabelle und Vorlage verwenden möchten. Dies bietet Flexibilität, sodass dieselbe Tabelle je nach der zugrunde liegenden Vorlage eine unterschiedliche Spaltenauswahl zulassen kann. Diese Funktion 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, Regionscode oder Aktive Tage.

Beachten Sie Folgendes: 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.

call samooha_by_snowflake_local_db.provider.set_column_policy($cleanroom_name, [
    'prod_custom_lookalike_template:samooha_provider_sample_database.lookalike_modeling.customers:status', 
    'prod_custom_lookalike_template:samooha_provider_sample_database.lookalike_modeling.customers:age', 
    'prod_custom_lookalike_template:samooha_provider_sample_database.lookalike_modeling.customers:region_code', 
    'prod_custom_lookalike_template:samooha_provider_sample_database.lookalike_modeling.customers:days_active', 
    'prod_custom_lookalike_template:samooha_provider_sample_database.lookalike_modeling.customers:income_bracket', 
    'prod_custom_lookalike_template:samooha_provider_sample_database.lookalike_modeling.customers:household_size', 
    'prod_custom_lookalike_template:samooha_provider_sample_database.lookalike_modeling.customers:gender'
]);
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_Machine_Learning_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

Anbieter-Workflows ist damit abgeschlossen. 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 = 'Machine Learning Demo Clean room';
Copy

Mit dem folgenden Befehl wird der Reinraum im Verbraucherkonto mit dem zugehörigen Anbieter und dem ausgewählten Reinraum installiert.

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 zum Reinraum hinzugefügt hat, mit dem Befehl „run_analysis“ ausführen. Im folgenden Abschnitt erfahren Sie, wie die einzelnen Felder bestimmt werden.

Die „wertvollen“ Benutzer werden in der folgenden Abfrage mit der „filter_clause“ identifiziert. Wenn c.SALES_DLR für den Umsatz pro Benutzer steht, könnte ein gültiger Filter so aussehen: c.HIGH_VALUE > 4000.

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.

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

    ['samooha_consumer_sample_database.lookalike_modeling.customers'],                -- consumer tables

    ['samooha_provider_sample_database.lookalike_modeling.customers'],                -- provider tables

    object_construct(                    -- Rest of the custom arguments needed for the template
        'dimensions', ['p.STATUS', 'p.AGE', 'p.REGION_CODE', 'p.DAYS_ACTIVE', 'p.INCOME_BRACKET'], -- Features used in training

        'filter_clause', 'c.SALES_DLR > 2000' -- Consumer flag for which customers are considered high value
    )
);
Copy

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:

call samooha_by_snowflake_local_db.consumer.view_template_definition($cleanroom_name, 'prod_custom_lookalike_template');
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.

call samooha_by_snowflake_local_db.consumer.get_arguments_from_template($cleanroom_name, 'prod_custom_lookalike_template');
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

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