Synthetische Daten in Snowflake verwenden

In dieser Vorschau wird eine neue gespeicherte Prozedur, GENERATE_SYNTHETIC_DATA, eingeführt, um synthetische Daten zu erzeugen.

Überblick

Snowflake kann synthetische Daten aus einer Quelltabelle generieren. Dabei wird eine Tabelle mit der gleichen Anzahl von Spalten wie die Quelltabelle, aber mit künstlichen Daten erzeugt. Sie können synthetische Daten verwenden, um Daten auszutauschen oder zu testen, die zu sensibel, vertraulich oder anderweitig eingeschränkt sind, um sie mit anderen zu teilen. Der synthetische Datensatz hat dieselben Merkmale wie der Quelldatensatz, z. B. Name, Anzahl und Datentyp der Spalten und dieselbe oder eine geringere Anzahl von Zeilen. Sie können synthetische Daten verwenden, um Arbeitslasten in Snowflake zu testen und zu validieren, insbesondere wenn die Originaldaten sensibel sind und für unbefugte Benutzer nicht zugänglich sein sollten.

Vorteile

Statistische Konsistenz:

Ein synthetischer Datensatz stellt die statistischen Eigenschaften des Originaldatensatzes dar, was Data Engineers hilft, die statistischen Eigenschaften des realen Datensatzes zu verstehen. Anschließend kann der Data Engineer Lösungen testen und validieren, die auf dem realen Datensatz basieren.

Validierung der Produktion:

Ein synthetischer Datensatz, der einem Produktionsdatensatz ähnelt, ermöglicht es Produktionstechnikern, ihre Produktionsumgebung zu testen und zu validieren. Das Ergebnis ist eine stabilere Produktionsumgebung.

Über den Algorithmus für synthetische Daten

Snowflake verwendet einen Algorithmus, um synthetische Daten zu erzeugen, die dem Originaldatensatz ähnlich sind. Der Algorithmus verwendet den Originaldatensatz, um synthetische Daten zu erzeugen, die dieselben statistischen Eigenschaften wie der Originaldatensatz haben. Der Algorithmus nutzt Copulas, um die Verteilung der Daten sowohl innerhalb als auch zwischen den Spalten zu erfassen. Sobald diese Verteilung erfasst ist, ähneln die synthetischen Daten statistisch gesehen den Originaldaten, haben aber keinen direkten Bezug oder eine Verbindung zu einer Zeile der Originaldaten.

Snowflake kategorisiert Quellspalten als einen der folgenden Typen, was sich darauf auswirkt, wie synthetische Daten generiert werden:

  • Verknüpfungsschlüssel Kann ein beliebiger Datentyp sein. Verknüpfungsschlüsselspalten werden vom Benutzer explizit deklariert. Ein konsistenter synthetischer Wert wird in den Ausgabedaten für denselben Wert in den Quelldaten für alle Verknüpfungsschlüssel in allen Tabellen während einer einzigen Ausführung erzeugt. Auf diese Weise können Sie Verknüpfungsabfragen ausführen und erhalten ähnliche Ergebnisse wie bei der gleichen Abfrage der Quelldaten.

  • Statistische Daten: Daten vom Typ Zahl, boolesch, Datum, Uhrzeit oder Zeitstempel. Es werden künstliche Werte desselben Typs erzeugt, die eine ähnliche statistische Verteilung in den Ausgabedaten aufweisen.

  • Kategorische Zeichenfolge Eine Zeichenfolgenspalte mit wenigen eindeutigen Werten*. In den generierten Daten werden tatsächliche Werte verwendet, die eine ähnliche statistische Verteilung wie die Quelldaten aufweisen.

  • Nicht-kategorische Zeichenfolge Eine Zeichenfolgenspalte mit vielen eindeutigen Werten*. In der Ausgabe redigiert.

* Wenige eindeutige Werte bedeutet, dass die Anzahl der eindeutigen Werte weniger als die Hälfte der Zeilenzahl beträgt. Viele eindeutige Werte bedeutet, dass die Anzahl der eindeutigen Werte mehr als die Hälfte der Zeilenzahl beträgt.

Generierung synthetischer Daten

Rufen Sie die gespeicherte Prozedur SNOWFLAKE.DATA_PRIVACY.GENERATE_SYNTHETIC_DATA auf, um synthetische Daten aus einer oder mehreren Tabellen zu erzeugen. Snowflake erstellt automatisch Tabellen, deren Eigentümerschaft die Rolle hat, die die gespeicherte Prozedur aufruft. Die Ausgabetabellen haben die gleiche Anzahl von Spalten wie die Eingabetabellen, mit den gleichen Spaltennamen und Datentypen. Die Ausgabe hat in der Regel die gleiche Anzahl von Zeilen, es sei denn, Sie aktivieren den Datenschutzfilter oder die Eingabetabelle enthält Nullwerte. In diesem Fall können die Ausgabetabellen weniger Zeilen enthalten.

Ausführung von Verknüpfungsabfragen auf synthetischen Daten

Wenn Sie planen, Verknüpfungsabfragen auf Ihren synthetischen Daten durchzuführen, definieren Sie jede Spalte, die Sie verknüpfen wollen, als Verknüpfungsschlüssel. Der synthetische Generator erzeugt aus demselben Quellwert in allen Spalten, die als Verknüpfungsschlüssel markiert sind, denselben synthetischen Wert. Das heißt, dass der Quellwert „Europa“ in allen Verknüpfungsschlüsselspalten denselben synthetischen Wert in den generierten Tabellen ergibt.

Wenn Sie planen, Abfragen mit mehreren Tabellen auf den synthetischen Daten durchzuführen, führen Sie GENERATE_SYNTHETIC_DATA mit allen Tabellen aus, die Sie in Ihrer Abfrage verwenden möchten, und geben Sie an, welche Spalten als Verknüpfungsschlüssel verwendet werden sollen. Spalten, die als Verknüpfungsschlüssel bezeichnet werden, haben in allen Tabellen einen konsistenten synthetischen Wert für denselben Quellwert, sodass sich diese Abfragen bei synthetischen Daten und den Originaldaten ähnlich verhalten.

Verknüpfungsschlüssel erzeugen konsistente synthetische Werte in einem einzigen Durchgang. Wenn Sie die Prozedur ein zweites Mal ausführen, werden nicht dieselben Schlüsselwerte für die Verknüpfungsschlüssel generiert, selbst wenn Sie eine identische Anfrage erneut ausführen.

Filtern der synthetischen Daten

Wenn Sie die gespeicherte Prozedur GENERATE_SYNTHETIC_DATA aufrufen, können Sie optional die Konfigurationsoption 'privacy_filter': True setzen, um einen Datenschutzfilter auf die Ausgabetabelle anzuwenden. Der Datenschutzfilter entfernt Zeilen aus der Ausgabetabelle, wenn die Zeilen dem Eingabedatensatz zu ähnlich sind. Der Schwellenwert für den Datenschutz verwendet die Werte für den Abstand zum nächsten Nachbarn (NNDR) und den Abstand zum nächsten Datensatz (DCR), um zu bestimmen, ob eine Zeile aus der Ausgabetabelle entfernt werden sollte.

Anforderungen

Anforderungen für die Eingabetabelle

Als Quelldaten werden sowohl Tabellen als auch Ansichten unterstützt. Sie können bis zu fünf Eingabetabellen pro Prozeduraufruf angeben.

Um synthetische Daten zu erzeugen, muss jede Eingabetabelle oder Ansicht die folgenden Anforderungen erfüllen:

  • Mindestens 20 eindeutige Zeilen

  • Maximal 100 Spalten

  • Maximal 2,3 M Zeilen

  • Die folgenden -Datentypen werden unterstützt. Spalten eines nicht unterstützten Datentyps geben NULL für alle Werte in der Spalte zurück.

    • Alle numerischen Typen (NUMBER, DECIMAL, FLOAT, INTEGER und so weiter)

    • BOOLEAN

    • Alle Datums- und Zeittypen (DATE, DATETIME, TIME, TIMESTAMP und so weiter), außer TIMESTAMP_TZ

    • STRING, VARCHAR, CHAR, CHARACTER, TEXT

      Wenn mehr als die Hälfte der Werte in einer STRING-Spalte eindeutige Werte sind, ersetzt Snowflake den Wert in der Ausgabetabelle aus Datenschutzgründen durch einen redigierten Wert.

Anforderungen an die Zugriffssteuerung

Um synthetische Daten zu erzeugen, müssen Sie eine Rolle mit jeder der folgenden Berechtigungen verwenden:

  • USAGE für das Warehouse, das Sie für Abfragen verwenden möchten.

  • SELECT für die Eingabetabelle, aus der Sie synthetische Daten erzeugen möchten.

  • USAGE-Berechtigung für die Datenbank und das Schema, die die Eingabetabelle enthalten, sowie für die die Ausgabetabelle enthält.

  • CREATE TABLE für das Schema, das die Ausgabetabelle enthält.

  • OWNERSHIP für die Ausgabetabellen. Am einfachsten geht das, indem Sie OWNERSHIP für das Schema freigeben, in dem die Ausgabetabelle erstellt wird. (Wenn jedoch jemand ein FUTURE GRANT auf dieses Schema angewandt hat, werden die Eigentümerschaft an den Tabellen stillschweigend überschrieben, d. h. GRANT OWNERSHIP ON FUTURE TABLES IN SCHEMA db.my_schema TO ROLE some_role erteilt die OWNERSHIP für alle neuen Tabellen, die im Schema my_schema erstellt werden, automatisch an some_role)

Alle Benutzer können auf die gespeicherte Prozedur SNOWFLAKE.DATA_PRIVACY.GENERATE_SYNTHETIC_DATA zugreifen. Der Zugriff erfolgt über die Datenbankrolle SNOWFLAKE.CORE_VIEWER, die der Rolle PUBLIC zugewiesen ist.

Andere Anforderungen

Sie müssen die Anaconda-Bedingungen in Ihrem Snowflake-Konto akzeptieren, um dieses Feature zu aktivieren.

Empfehlungen

  • Verwenden Sie ein mittleres Snowpark-optimiertes Warehouse.

  • Während GENERATE_SYNTHETIC_DATA ausgeführt wird, führen Sie keine anderen Abfragen in diesem Warehouse aus.

Beispiel: Synthetische Daten aus mehreren Tabellen

Dieses Beispiel verwendet die Datenbank Snowflake Sample Data SNOWFLAKE_SAMPLE_DATA. Wenn Sie sie nicht in Ihrem Konto sehen, können Sie sie mit den folgenden Befehlen kopieren:

USE ROLE ACCOUNTADMIN;
CREATE or REPLACE DATABASE SNOWFLAKE_SAMPLE_DATA from share SFC_SAMPLES.SAMPLE_DATA;
Copy

Folgen Sie diesen Schritten, um synthetische Daten aus mehreren Eingabetabellen zu erzeugen:

  1. Erstellen und konfigurieren Sie die Zugriffssteuerung für die Rolle data_engineer, damit diese alle erforderlichen Objekte erstellen kann:

    USE ROLE ACCOUNTADMIN;
    CREATE OR REPLACE ROLE data_engineer;
    CREATE OR REPLACE DATABASE syndata_db;
    CREATE OR REPLACE WAREHOUSE syndata_wh;
    
    GRANT OWNERSHIP ON DATABASE syndata_db TO ROLE data_engineer;
    GRANT USAGE ON WAREHOUSE syndata_wh TO ROLE data_engineer;
    GRANT ROLE data_engineer TO USER jsmith; -- Or whoever you want to run this example. Or skip this line to run it yourself.
    
    Copy
  2. Erstellen Sie zwei Ansichten aus der Snowflake-Beispieldatenbank:

    - Sign in as user with data_engineer role. Then...
    CREATE SCHEMA syndata_db.sch;
    CREATE OR REPLACE VIEW syndata_db.sch.TPC_ORDERS_5K as (
        SELECT * from SNOWFLAKE_SAMPLE_DATA.TPCH_SF1.ORDERS
        LIMIT 5000
    );
    CREATE OR REPLACE VIEW syndata_db.sch.TPC_CUSTOMERS_5K as (
        SELECT * from SNOWFLAKE_SAMPLE_DATA.TPCH_SF1.CUSTOMER
        LIMIT 5000
    );
    
    Copy
  3. Fragen Sie die Eingabetabellen ab, um die Daten anzuzeigen, und bestätigen Sie, dass jede Tabelle 5.000 Zeilen hat:

    USE WAREHOUSE syndata_wh;
    SELECT TOP 20 * FROM syndata_db.sch.TPC_ORDERS_5K;
    SELECT COUNT(*) FROM syndata_db.sch.TPC_ORDERS_5K;
    select count(distinct o_clerk), count(*) from syndata_db.sch.TPC_ORDERS_5K;
    
    SELECT TOP 20 * FROM syndata_db.sch.TPC_CUSTOMERS_5K;
    SELECT COUNT(*) FROM syndata_db.sch.TPC_CUSTOMERS_5K;
    
    Copy
  4. Rufen Sie die gespeicherte Prozedur GENERATE_SYNTHETIC_DATA auf, um die synthetischen Daten in zwei Ausgabetabellen zu erzeugen. Legen Sie Verknüpfungsschlüssel fest, da Sie später auf diesen Schlüsseln Verknüpfungen durchführen werden.

    CALL SNOWFLAKE.DATA_PRIVACY.GENERATE_SYNTHETIC_DATA({
        'datasets':[
            {
              'input_table': 'syndata_db.sch.TPC_ORDERS_5K',
              'output_table': 'syndata_db.sch.TPC_ORDERS_5K_SYNTHETIC',
              'columns': {'O_CUSTKEY': {'join_key': True}}
            },
            {
              'input_table': 'syndata_db.sch.TPC_CUSTOMERS_5K',
              'output_table': 'syndata_db.sch.TPC_CUSTOMERS_5K_SYNTHETIC',
              'columns' : {'C_CUSTKEY': {'join_key': True}}
    
            }
          ],
          'replace_output_tables':True
      });
    
    Copy
  5. Fragen Sie die Ausgabetabelle ab, um die synthetischen Daten anzuzeigen:

    SELECT TOP 20 * FROM syndata_db.sch.TPC_ORDERS_5K_SYNTHETIC;
    SELECT COUNT(*) FROM syndata_db.sch.TPC_ORDERS_5K_SYNTHETIC;
    
    SELECT TOP 20 * FROM syndata_db.sch.TPC_CUSTOMERS_5K_SYNTHETIC;
    SELECT COUNT(*) FROM syndata_db.sch.TPC_CUSTOMERS_5K_SYNTHETIC;
    
    Copy
  6. Bereinigen Sie alle Objekte

    USE ROLE ACCOUNTADMIN;
    DROP DATABASE syndata_db;
    DROP ROLE data_engineer;
    DROP WAREHOUSE syndata_wh;
    
    Copy