GENERATE_SYNTHETIC_DATA¶
Die Prozedur generiert synthetische Daten aus einer oder mehreren Tabellen, die auf Daten aus Eingabetabellen basieren, und gibt eine Tabelle zurück, die Metriken über die generierten Daten enthält, wie z. B. den Koeffizienten der Differenz (Ähnlichkeit) zwischen den Quelldaten und den generierten Daten.
Diese gespeicherte Prozedur verwendet Aufruferrechte, um die Ausgabetabelle zu erstellen.
Lesen Sie die Anforderungen für die Ausführung dieses Verfahrens. Wenn eine der Anforderungen nicht erfüllt ist, schlägt die Anfrage fehl, bevor sie mit der Datengenerierung beginnt.
Erfahren Sie mehr über die Nutzung synthetischer Daten.
Syntax¶
SNOWFLAKE.DATA_PRIVACY.GENERATE_SYNTHETIC_DATA(<configuration_object>)
Argumente¶
configuration_object
Ein OBJECT, das die Details der Anfrage angibt. Sie können eine OBJECT-Konstante verwenden, um dieses Objekt anzugeben.
Der OBJECT-Wert hat die folgende Struktur:
{ 'datasets': [ { 'input_table': '<input_table_name>', 'output_table' : '<output_table_name>', 'columns': { '<column_name>': { <property_name>: <property_value> } , ... } } , ... ], 'similarity_filter': <boolean>, 'replace_output_tables': <boolean>, 'consistency_secret': <session-scoped reference string> }
Der OBJECT-Wert enthält die folgenden Schlüssel-Werte-Paare:
datasets
Ein Array, das die zu generierenden Daten angibt. Jedes Element in dem Array ist ein OBJECT-Wert, der ein einzelnes Eingabe/Ausgabe-Tabellenpaar definiert. Sie können bis zu fünf Tabellenpaare angeben.
Ein untergeordneter OBJECT-Wert, der ein einzelnes Eingabe/Ausgabe-Tabellenpaar darstellt, hat die folgenden Eigenschaften:
input_table
Der vollqualifizierte Name der Eingabetabelle, aus der synthetische Daten generiert werden sollen. Wenn die Tabelle nicht existiert oder nicht zugänglich ist, gibt Snowflake eine Fehlermeldung aus. Siehe Synthetische Daten in Snowflake verwenden für weitere Anforderungen an die Eingabetabelle.
Wenn der Bezeichner Leerzeichen oder Sonderzeichen enthält, muss die gesamte Zeichenfolge in doppelte Anführungszeichen gesetzt werden. Bei Bezeichnern, die in doppelte Anführungszeichen eingeschlossen sind, ist auch die Groß- und Kleinschreibung zu beachten.
Weitere Informationen dazu finden Sie unter Anforderungen an Bezeichner.
output_table
Der vollqualifizierte Name der Ausgabetabelle, in der die von
input_table
generierten synthetischen Daten gespeichert werden. Die generierte Tabelle hat dieselben Berechtigungen und Richtlinien, als hätte der Benutzer CREATE TABLE mit Standardwerten aufgerufen hätte. Wenn die Tabelle bereits existiert undreplace_output_tables=TRUE
, wird die bestehende Tabelle überschrieben.Darüber hinaus muss der Bezeichner mit einem Buchstaben beginnen und darf keine Leer- oder Sonderzeichen enthalten, es sei denn, die gesamte Bezeichnerzeichenfolge wird in doppelte Anführungszeichen gesetzt (z. B.
"My object"
). Bei Bezeichnern, die in doppelte Anführungszeichen eingeschlossen sind, ist auch die Groß-/Kleinschreibung zu beachten.Weitere Informationen dazu finden Sie unter Anforderungen an Bezeichner.
columns
(Optional) Ein OBJECT-Wert, der zusätzliche Eigenschaften für bestimmte Spalten angibt. Jedes Feld im OBJECT definiert Eigenschaften für eine einzelne Spalte. Sie müssen nicht für alle Spalten oder überhaupt für Spalten Eigenschaften definieren. Für jedes Feld:
Der Schlüssel ist der Spaltenname. Die Eigenschaften des Wertes sollen auf diese Spalte angewendet werden.
Der Wert ist ein OBJECT-Wert, der eines der folgenden Schlüssel-Wert-Paare enthält:
join_key
: BOOLEAN, wobei TRUE angibt, dass es sich um eine Verknüpfungsschlüsselspalte handelt. Dies kann nicht in einer Spalte mit der Bezeichnungcategorical
verwendet werden. Die Spalte muss ein Zeichenfolgen-, ein numerischer oder ein boolescher Wert sein. Erfahren Sie mehr über Verknüpfungsschlüssel.Standard: FALSE.
categorical
: BOOLEAN, um anzugeben, ob die Spalte eine kategorische Zeichenfolge ist. Setzen Sie diese Option auf TRUE, damit die Ausgabe die Daten als nicht sensibel markiert und sie in der Ausgabe verwendet werden können. Setzen Sie diese Option auf FALSE, um Werte aus der Ausgabe zu entfernen. Wenn nicht angegeben, wird dies durch Prüfung der Daten ermittelt. Kann nur für STRING-Spalten angegeben werden. Wenn Sie TRUE wählen, können Sie die Felderreplace
oderjoin_key
für diese Spalte nicht angeben.Standard: Auf der Grundlage der Spaltendaten abgeleitet.
replace
: Legt ein Ausgabeformat für STRING-Werte fest. Kann nur für kategorische Zeichenfolgenspalten verwendet werden. Die einzigen Werte, die mit denjoin_key
-Spalten verwendet werden können, sinduuid
undemail
. Kann nicht verwendet werden, wenncategorical
TRUE ist. Falls angegeben, müssen Sie einen Wert fürconsistency_secret
angeben. Die folgenden Werte werden unterstützt:replace
-Werte¶Wert
Beschreibung
uuid
Eine UUID. Beispiel:
88d99a35-c4be-4022-b06a-41fb4629b46d
name
Ein Vor- und Nachname im US-Gebietsschema. Beispiel:
George Washington
first_name
Ein Vorname im US-Gebietsschema. Beispiel:
George
last_name
Ein Nachname im US-Gebietsschema. Beispiel:
Washington
address
Eine abgekürzte Adresse im US-Gebietsschema. Beispiel:
1600 Pennsylvania Ave
full_address
Eine detaillierte Straßenadresse im US-Gebietsschema. Beispiel:
1600 Pennsylvania Ave NW, Washington DC 20500
email
Eine E-Mail Adresse. Beispiel:
bdbQ6OPBS5ScOdJx8bVpFw@example.com
phone
Eine US entsprechende 10-stellige Telefonnummer im US-Gebietsschema. Beispiel:
212-555-1234
ssn
Eine Sozialversicherungsnummer für US. Beispiel:
123-45-6789
Standard:
Für
join_key
-Spalten:uuid
Bei Nicht-Verknüpfungsschlüsselspalten wird der Wert geschwärzt.
similarity_filter
(Optional) Gibt an, ob bei der Erstellung der synthetischen Daten ein Ähnlichkeitsfilter verwendet werden soll. Stellen Sie dies auf TRUE ein, um den integrierten Datenschutzfilter zu verwenden, der Zeilen aus der Zieltabelle entfernt, die den Zeilen der Eingabetabelle zu ähnlich sind. Wenn FALSE, hat jede Ausgabetabelle die gleiche Anzahl von Zeilen wie ihre Eingabetabelle; wenn TRUE, kann eine Ausgabetabelle weniger Zeilen haben als ihre Eingabetabelle. Wenn TRUE, schlägt die Generierung synthetischer Daten fehl, wenn Sie NULL-Werte in Nicht-Zeichenfolgenspalten haben.
Standard: FALSE
Weitere Informationen dazu finden Sie unter Verbesserung der Privatsphäre.
replace_output_tables
(Optional) Gibt an, ob die Tabelle mit den ausgegebenen synthetischen Daten bei der Erstellung der synthetischen Daten überschrieben werden soll. Setzen Sie dies auf TRUE, um die Ausgabetabelle zu überschreiben.
Standard: FALSE
consistency_secret
In Sitzung enthaltene Referenz-STRING für ein SECRET eines symmetrischen Schlüssels. Erforderlich, wenn
replace
angegeben ist, ansonsten optional. Falls vorhanden, generiert die Prozedur konsistente Werte für STRING-Verknüpfungsschlüssel über mehrere Ausführungen hinweg, die dasselbe Konsistenzgeheimnis verwenden. Wenn dies nicht der Fall ist, sind die Verknüpfungsschlüssel zwischen den Tabellen derselben Ausführung konsistent, aber nicht zwischen verschiedenen Ausführungen. Weitere Informationen.Standard: Keine Konsistenz
Ausgabe¶
Spaltenname |
Datentyp |
Beschreibung |
---|---|---|
|
TIMESTAMP |
Zeitpunkt, zu dem die synthetischen Daten erzeugt wurden. |
|
VARCHAR |
Name der synthetischen Tabelle. |
|
VARCHAR |
Schemaname der synthetischen Tabelle. |
|
VARCHAR |
Datenbankname der synthetischen Tabelle. |
|
VARCHAR |
Ein Paar von Spalten in der synthetischen Tabelle. |
|
NUMBER |
Interner/systemgenerierter Bezeichner der Eingabetabelle. |
|
VARCHAR |
Name der Eingabetabelle. |
|
VARCHAR |
Schemaname der Eingabetabelle. |
|
VARCHAR |
Datenbankname der Eingabetabelle. |
|
VARCHAR |
Namen der Quellspalten. |
|
ENUM |
Derzeit ist |
|
NUMBER |
Wert der Metrik. |
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 Schemamy_schema
erstellt werden, automatisch ansome_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.
Nutzungshinweise¶
Die JSON-Schlüsselwerte müssen in Kleinbuchstaben geschrieben sein.
Sie müssen die Anaconda-Bedingungen in Ihrem Snowflake-Konto akzeptieren, um dieses Feature zu aktivieren.
Für zusätzliche Anforderungen siehe Anforderungen.
Beispiele¶
Dieses Beispiel generiert synthetische Daten aus einer Eingabetabelle mit medizinischen Informationen (Blutgruppe, Geschlecht, Alter und ethnische Zugehörigkeit). Die Antwort zeigt die Datenübereinstimmung zwischen der Quelltabelle und den generierten Tabellen. Die generierte Tabelle mit synthetischen Daten wird nicht angezeigt.
Zwei Spalten, die als Verknüpfungsschlüssel bezeichnet werden
CALL SNOWFLAKE.DATA_PRIVACY.GENERATE_SYNTHETIC_DATA({
'datasets':[
{
'input_table': 'syndata_db.sch.faker_source_t',
'output_table': 'syndata_db.sch.faker_synthetic_t',
'columns': { 'blood_type': {'join_key': TRUE} , 'ethnicity': {'join_key': TRUE}}
}
]
});
Keine als Verknüpfungsschlüssel bezeichneten Spalten
CALL SNOWFLAKE.DATA_PRIVACY.GENERATE_SYNTHETIC_DATA({
'datasets':[
{
'input_table': 'syndata_db.sch.faker_source_t',
'output_table': 'syndata_db.sch.faker_synthetic_t'
}
]
});
Konsistenzschlüssel verwenden, um über mehrere Ausführungen hinweg konsistente Werte zu erzeugen
CREATE OR REPLACE SECRET my_db.public.my_consistency_secret
TYPE = SYMMETRIC_KEY
ALGORITHM = GENERIC;
CALL SNOWFLAKE.DATA_PRIVACY.GENERATE_SYNTHETIC_DATA({
'datasets':[
{
'input_table': 'CLINICAL_DB.PUBLIC.BASE_TABLE',
'output_table': 'my_db.public.test_syndata',
'columns': { 'patient_id': {'join_key': TRUE, 'replace': 'uuid'}}
}
],
'consistency_secret': SYSTEM$REFERENCE('SECRET', 'MY_CONSISTENCY_SECRET', 'SESSION', 'READ')::STRING,
'replace_output_tables': TRUE
});
Ausgabe beim Aufruf der Funktion
+---------------------------+-------------------+--------------+----------------+------------------------+-------------------+---------------------+-----------------------+------------------------+------------------------------------+----------------+
| CREATED_ON | TABLE_NAME | TABLE_SCHEMA | TABLE_DATABASE | COLUMNS | SOURCE_TABLE_NAME | SOURCE_TABLE_SCHEMA | SOURCE_TABLE_DATABASE | SOURCE_COLUMNS | METRIC_TYPE | METRIC_VALUE |
+---------------------------+-------------------+--------------+----------------+------------------------+-------------------+---------------------+-----------------------+------------------------+------------------------------------+----------------+
| 2024-07-30 09:53:28.439 Z | faker_synthetic_t | sch | syndata_db | "BLOOD_TYPE,GENDER" | faker_source_t | sch | syndata_db | "BLOOD_TYPE,GENDER" | CORRELATION_COEFFICIENT_DIFFERENCE | 0.02430214616 |
| 2024-07-30 09:53:28.439 Z | faker_synthetic_t | sch | syndata_db | "BLOOD_TYPE,AGE" | faker_source_t | sch | syndata_db | "BLOOD_TYPE,AGE" | CORRELATION_COEFFICIENT_DIFFERENCE | 0.001919343586 |
| 2024-07-30 09:53:28.439 Z | faker_synthetic_t | sch | syndata_db | "BLOOD_TYPE,ETHNICITY" | faker_source_t | sch | syndata_db | "BLOOD_TYPE,ETHNICITY" | CORRELATION_COEFFICIENT_DIFFERENCE | 0.003720197046 |
| 2024-07-30 09:53:28.439 Z | faker_synthetic_t | sch | syndata_db | "GENDER,AGE" | faker_source_t | sch | syndata_db | "GENDER,AGE" | CORRELATION_COEFFICIENT_DIFFERENCE | 0.004348586645 |
| 2024-07-30 09:53:28.439 Z | faker_synthetic_t | sch | syndata_db | "GENDER,ETHNICITY" | faker_source_t | sch | syndata_db | "GENDER,ETHNICITY" | CORRELATION_COEFFICIENT_DIFFERENCE | 0.001171535243 |
| 2024-07-30 09:53:28.439 Z | faker_synthetic_t | sch | syndata_db | "AGE,ETHNICITY" | faker_source_t | sch | syndata_db | "AGE,ETHNICITY" | CORRELATION_COEFFICIENT_DIFFERENCE | 0.004265938158 |
+---------------------------+-------------------+--------------+----------------+------------------------+-------------------+---------------------+-----------------------+------------------------+------------------------------------+----------------+