Synthetische Datengenerierung
Generieren Sie synthetische Daten mithilfe von Zufallsgeneratoren, Algorithmen, statistischen Modellen und Large Language Models (LLMs), um echte Daten für die effektive Entwicklung und Prüfung von Lösungen zu simulieren.
Hinweis:
Unterstützung für die Generierung synthetischer Daten ist ab Version 19.29 in Oracle Database 19c und ab Version 23.26 in Oracle AI Database 26ai verfügbar.Synthetische Daten können ein leistungsfähiges Werkzeug bei der Entwicklung und dem Testen von Lösungen sein, insbesondere wenn tatsächliche Daten noch nicht vorhanden sind oder nicht verwendet werden dürfen. Synthetische oder künstlich erzeugte Daten können viele der Eigenschaften von realen Daten haben. Synthetische Daten werden in der Regel mit Zufallsgeneratoren, Algorithmen oder statistischen Modellen erstellt, um die Eigenschaften und Verteilungen von realen Daten zu simulieren. Dies kann jedoch komplex sein, um Werkzeuge mit Merkmalen unterschiedlicher Raffinesse herzustellen oder sich darauf zu verlassen. Mit der Verfügbarkeit von Large Language Models (LLMs) können relevantere und schemaspezifische Daten generiert werden, die Merkmale berücksichtigen, die in natürlicher Sprache ausgedrückt werden.
Themen
Verwandte Themen
Vorteile der Generierung synthetischer Daten
Die synthetische Datengenerierung ermöglicht das Auffüllen von Klonen für Datenbankmetadaten und unterstützt Entwicklungs-, Test- und ML-Projekte, ohne sensible Daten aus ursprünglichen Tabellen zu verwenden.
-
Metadatenklone mit synthetischen Daten auffüllen: Ein Metadatenklon repliziert die Struktur einer Datenbank oder eines Schemas, ohne tatsächliche Daten einzuschließen. Select AI ermöglicht es der synthetischen Datengenerierung, diese Klone zu füllen und vertrauliche Daten zu schützen und gleichzeitig die Entwicklung, das Testen und das Erstellen von Vorlagen zu ermöglichen. Dieser Ansatz unterstützt Performance- und Skalierbarkeitstests.
-
Neue Projekte starten: Beim Start eines neuen Projekts sind möglicherweise keine Istdaten verfügbar. Synthetische Daten liefern realistische Proben, um Konzepte zu demonstrieren und Unterstützung für Projektvorschläge zu erhalten.
-
Validierung der Benutzererfahrung: Synthetische Daten helfen beim Testen von Benutzeroberflächen, indem sie verschiedene Datasets bereitstellen, um Designfehler, Performance- und Skalierbarkeitsprobleme aufzudecken.
-
Unterstützung von KI- und ML-Projekten: Synthetische Daten sind nützlich für das Training von KI- und ML-Modellen, wenn echte Daten nicht verfügbar oder eingeschränkt sind. LLMs können Daten mit bestimmten Mustern generieren, um das Modelltraining und -scoring zu erleichtern.
Synthetische Daten generieren
Verwenden Sie die Funktion DBMS_CLOUD_AI.GENERATE_SYNTHETIC_DATA, um synthetische Daten zu generieren und die Daten mit Select AI-Aktionen abzufragen.
Weitere Informationen finden Sie unter Funktion GENERATE_SYNTHETIC_DATA und Beispiel: Synthetische Daten generieren.
Synthetische Datengenerierung überwachen und Fehler beheben
Wenn große Datenmengen über viele Tabellen generiert werden, teilt Select AI Aufgaben zur Generierung synthetischer Daten in kleinere Chunks auf und führt Aufgaben parallel aus. Der Status jedes Chunks wird in der Tabelle SYNTHETIC_DATA$<operation_id>_STATUS verfolgt.
Synthetische Datengenerierungsvorgänge werden in den Tabellen DBA_LOAD_OPERATIONS und USER_LOAD_OPERATIONS protokolliert. Verwenden Sie diese Tabellen, um den Vorgang DBMS_CLOUD_AI.GENERATE_SYNTHETIC_DATA zu überwachen. Weitere Informationen finden Sie unter Ladevorgänge in DBMS_CLOUD verfolgen.
USER_LOAD_OPERATION abrufen. Verwenden Sie dazu Folgendes:SELECT max(id) FROM user_load_operations;
Um die in einer anderen Session ausgeführten synthetischen Datenvorgänge anzuzeigen, verwenden Sie die Ansicht DBA_LOAD_OPERATIONS.
Status der Generierung synthetischer Daten anzeigen
Die Statustabelle des Synthetischen Datengenerierungsvorgangs zeigt den Fortschritt jeder Tabelle und den entsprechenden Chunk an. Die Spalte STATUS_TABLE in USER_LOAD_OPERATIONS oder DBA_LOAD_OPERATIONS zeigt den Namen der Statustabelle an. Der Tabellenname lautet SYNTHETIC_DATA$<operation_id>_STATUS und enthält die folgenden Spalten:
| Name | Datentyp | Beschreibung |
|---|---|---|
|
|
|
Eindeutige ID des Datensatzes. |
|
|
|
Der qualifizierte Name der Tabelle, beispielsweise "ADB_USER"."EMPLOYEES" |
|
|
|
Gewünschte Anzahl der Datensätze für diese Datengenerierungsaufgabe |
|
|
|
Tatsächliche Anzahl generierter Datensätze. |
|
|
|
Startwert für den Primärschlüssel während dieser Datengenerierungsaufgabe. |
|
|
|
Zeitstempel, der angibt, wann der Datensatz zuletzt geändert wurde. |
|
|
|
Status der Datengenerierungsaufgabe. Die gültigen Werte sind:
|
|
|
|
Fehlercode, wenn die Datengenerierungsaufgabe nicht erfolgreich ist. |
|
|
|
Fehlermeldung, wenn die Aufgabe nicht erfolgreich war. |
|
|
|
Zeitstempel für das Ende der Datengenerierungsaufgabe. |
Um die Anzahl der für jede Tabelle generierten Datensätze zu prüfen, geben Sie Folgendes aus:
SELECT name, SUM(rows_loaded) FROM synthetic_data$<operation_id>_status group by name;Fragen Sie ROWS_LOADED ab, um zu bestätigen, wie viele Zeilen für jeden Chunk geladen werden, und SUM(ROWS_LOADED) für Zeilen für jede Tabelle.
BEGIN
DBMS_CLOUD_AI.GENERATE_SYNTHETIC_DATA(
profile_name => 'GENAI',
object_list => '[{"owner": "ADB_USER", "name": "DIRECTOR","record_count":150},
{"owner": "ADB_USER", "name": "MOVIE_ACTOR","record_count":300},
{"owner": "ADB_USER", "name": "CLASSES", "user_prompt":"all in fall semester","record_count":5},
{"owner": "ADB_USER", "name": "ACTOR","record_count":220},
{"owner": "ADB_USER", "name": "MOVIE","record_count":50}]'
);
END;
/
-- Check loaded rows for each chunk
SQL> SELECT name, rows_loaded FROM synthetic_data$141_status order by name;
NAME ROWS_LOADED
------------------------------------------
"ADB_USER"."ACTOR" 188
"ADB_USER"."ACTOR" 32
"ADB_USER"."CLASSES" 5
"ADB_USER"."DIRECTOR" 150
"ADB_USER"."MOVIE" 50
"ADB_USER"."MOVIE_ACTOR" 38
"ADB_USER"."MOVIE_ACTOR" 114
"ADB_USER"."MOVIE_ACTOR" 148
-- Check loaded rows for each table
SQL> SELECT name, SUM(rows_loaded) FROM synthetic_data$141_status group by name;
NAME SUM(ROWS_LOADED)
------------------------------------------
"ADB_USER"."DIRECTOR" 150
"ADB_USER"."MOVIE_ACTOR" 300
"ADB_USER"."CLASSES" 5
"ADB_USER"."ACTOR" 220
"ADB_USER"."MOVIE" 50
Beispiel: Synthetische Daten generieren
Hinweis:
Unterstützung für die Generierung synthetischer Daten ist ab Version 19.29 in Oracle Database 19c und ab Version 23.26 in Oracle Database 26ai verfügbar.Das folgende Beispiel zeigt, wie Sie einige Tabellen in Ihrem Schema erstellen, OCI Generative AI als AI-Provider verwenden, um ein AI-Profil zu erstellen, Daten mit der Funktion DBMS_CLOUD_AI.GENERATE_SYNTHETIC_DATA in diesen Tabellen zu synthetisieren und Antworten auf Eingabeaufforderungen in natürlicher Sprache mit Select AI abzufragen oder zu generieren.
--Create tables or use cloned tables
CREATE TABLE ADB_USER.Director (
director_id INT PRIMARY KEY,
name VARCHAR(100)
);
CREATE TABLE ADB_USER.Movie (
movie_id INT PRIMARY KEY,
title VARCHAR(100),
release_date DATE,
genre VARCHAR(50),
director_id INT,
FOREIGN KEY (director_id) REFERENCES ADB_USER.Director(director_id)
);
CREATE TABLE ADB_USER.Actor (
actor_id INT PRIMARY KEY,
name VARCHAR(100)
);
CREATE TABLE ADB_USER.Movie_Actor (
movie_id INT,
actor_id INT,
PRIMARY KEY (movie_id, actor_id),
FOREIGN KEY (movie_id) REFERENCES ADB_USER.Movie(movie_id),
FOREIGN KEY (actor_id) REFERENCES ADB_USER.Actor(actor_id)
);
-- Create the GenAI credential
BEGIN
DBMS_CLOUD.create_credential(
credential_name => 'GENAI_CRED',
user_ocid => 'ocid1.user.oc1....',
tenancy_ocid => 'ocid1.tenancy.oc1....',
private_key => 'vZ6cO...',
fingerprint => '86:7d:...'
);
END;
/
-- Create a profile
BEGIN
DBMS_CLOUD_AI.CREATE_PROFILE(
profile_name =>'GENAI',
attributes =>'{"provider": "oci",
"credential_name": "GENAI_CRED",
"object_list": [{"owner": "ADB_USER",
"oci_compartment_id": "ocid1.compartment.oc1...."}]
}');
END;
/
EXEC DBMS_CLOUD_AI.set_profile('GENAI');
-- Run the API for single table
BEGIN
DBMS_CLOUD_AI.GENERATE_SYNTHETIC_DATA(
profile_name => 'GENAI',
object_name => 'Director',
owner_name => 'ADB_USER',
record_count => 5
);
END;
/
PL/SQL procedure successfully completed.
-- Query the table to see results
SQL> SELECT * FROM ADB_USER.Director;
DIRECTOR_ID NAME
----------- ----------------------------------------------------------------------------------------------------
1 John Smith
2 Emily Chen
3 Michael Brown
4 Sarah Taylor
5 David Lee
-- Or ask select ai to show the results
SQL> select ai how many directors are there;
NUMBER_OF_DIRECTORS
-------------------
5
Nachdem Sie Ihr AI-Providerprofil erstellt und festgelegt haben, generieren Sie Daten für mehrere Tabellen mit der DBMS_CLOUD_AI.GENERATE_SYNTHETIC_DATA. Sie können Select AI abfragen oder verwenden, um auf die Eingabeaufforderungen in natürlicher Sprache zu reagieren.
BEGIN
DBMS_CLOUD_AI.GENERATE_SYNTHETIC_DATA(
profile_name => 'GENAI',
object_list => '[{"owner": "ADB_USER", "name": "Director","record_count":5},
{"owner": "ADB_USER", "name": "Movie_Actor","record_count":5},
{"owner": "ADB_USER", "name": "Actor","record_count":10},
{"owner": "ADB_USER", "name": "Movie","record_count":5,"user_prompt":"all movies released in 2009"}]'
);
END;
/
PL/SQL procedure successfully completed.
-- Query the table to see results
SQL> select * from ADB_USER.Movie;
MOVIE_ID TITLE RELEASE_D GENRE DIRECTOR_ID
---------- -------------------------------------------------------- --------- --------------------------------------------------------------- -----------
1 The Dark Knight 15-JUL-09 Action 8
2 Inglourious Basterds 21-AUG-09 War 3
3 Up in the Air 04-SEP-09 Drama 6
4 The Hangover 05-JUN-09 Comedy 1
5 District 9 14-AUG-09 Science Fiction 10
-- Or ask select ai to show the results
SQL> select ai how many actors are there;
Number of Actors
----------------
10Um den AI-Service beim Generieren synthetischer Daten zu unterstützen, können Sie nach dem Zufallsprinzip vorhandene Datensätze aus einer Tabelle auswählen. Beispiel: Wenn Sie dem Argument params {"sample_rows": 5} hinzufügen, können Sie 5 Beispielzeilen aus einer Tabelle an den AI-Provider senden. In diesem Beispiel werden 10 zusätzliche Zeilen basierend auf den Beispielzeilen aus der Tabelle Transactions generiert.
BEGIN
DBMS_CLOUD_AI.GENERATE_SYNTHETIC_DATA(
profile_name => 'GENAI',
object_name => 'Transactions',
owner_name => 'ADB_USER',
record_count => 10,
params => '{"sample_rows":5}'
);
END;
/Mit dem Argument user_prompt können Sie zusätzliche Regeln oder Anforderungen für die Datengenerierung angeben. Dies kann auf eine einzelne Tabelle oder als Teil des Arguments object_list für mehrere Tabellen angewendet werden. Beispiel: Bei den folgenden Aufrufen von DBMS_CLOUD_AI.GENERATE_SYNTHETIC_DATA weist der Prompt die KI an, synthetische Daten für Filme zu generieren, die 2009 veröffentlicht wurden.
-- Definition for the Movie table CREATE TABLE Movie
CREATE TABLE Movie (
movie_id INT PRIMARY KEY,
title VARCHAR(100),
release_date DATE,
genre VARCHAR(50),
director_id INT,
FOREIGN KEY (director_id) REFERENCES Director(director_id)
);
BEGIN
DBMS_CLOUD_AI.GENERATE_SYNTHETIC_DATA(
profile_name => 'GENAI',
object_name => 'Movie',
owner_name => 'ADB_USER',
record_count => 10,
user_prompt => 'all movies are released in 2009',
params => '{"sample_rows":5}'
);
END;
/
BEGIN
DBMS_CLOUD_AI.GENERATE_SYNTHETIC_DATA(
profile_name => 'GENAI',
object_list => '[{"owner": "ADB_USER", "name": "Director","record_count":5},
{"owner": "ADB_USER", "name": "Movie_Actor","record_count":5},
{"owner": "ADB_USER", "name": "Actor","record_count":10},
{"owner": "ADB_USER", "name": "Movie","record_count":5,"user_prompt":"all movies are released in 2009"}]'
);
END;
/Wenn eine Tabelle Spaltenstatistiken enthält oder aus einer Datenbank geklont wird, die Metadaten enthält, kann Select AI diese Statistiken verwenden, um Daten zu generieren, die den ursprünglichen Daten ähnlich oder konsistent sind.
Bei NUMBER-Spalten leiten die Werte für "Hoch" und "Niedrig" aus den Statistiken den Wertebereich. Beispiel: Wenn die Spalte SALARY in der ursprünglichen Tabelle EMPLOYEES zwischen 1000 und 10000 liegt, fallen auch die synthetischen Daten für diese Spalte in diesen Bereich.
Für Spalten mit eindeutigen Werten, wie z.B. eine Spalte STATE mit den Werten CA, WA und TX, verwenden die synthetischen Daten diese spezifischen Werte. Sie können dieses Feature mit dem Parameter {"table_statistics": true/false} verwalten. Standardmäßig sind die Tabellenstatistiken aktiviert.
BEGIN
DBMS_CLOUD_AI.GENERATE_SYNTHETIC_DATA(
profile_name => 'GENAI',
object_name => 'Movie',
owner_name => 'ADB_USER',
record_count => 10,
user_prompt => 'all movies released in 2009',
params => '{"sample_rows":5,"table_statistics":true}'
);
END;
/Wenn Spaltenkommentare vorhanden sind, schließt Select AI diese automatisch ein, um während der Datengenerierung zusätzliche Informationen für das LLM bereitzustellen. Beispiel: Ein Kommentar in der Spalte Status einer Transaktionstabelle kann zulässige Werte auflisten, wie successful, failed, pending, canceled und need manual check. Sie können auch Kommentare hinzufügen, um die Spalte weiter zu erläutern und KI-Services präzisere Anweisungen oder Hinweise zur Generierung genauer Daten zu geben. Standardmäßig sind Kommentare deaktiviert. Weitere Informationen finden Sie unter Optionale Parameter.
-- Use comment on column
COMMENT ON COLUMN Transaction.status IS 'the value for state should either be ''successful'', ''failed'', ''pending'' or ''canceled''';
/
BEGIN
DBMS_CLOUD_AI.GENERATE_SYNTHETIC_DATA(
profile_name => 'GENAI',
object_name => 'employees',
owner_name => 'ADB_USER',
record_count => 10
params => '{"comments":true}'
);
END;
/Wenn große Mengen synthetischer Daten mit LLMs generiert werden, treten wahrscheinlich doppelte Werte auf. Um dies zu verhindern, richten Sie einen eindeutigen Constraint für die relevante Spalte ein. Dadurch wird sichergestellt, dass Select AI Zeilen mit doppelten Werten in der LLM-Antwort ignoriert. Um außerdem Werte für bestimmte Spalten einzuschränken, können Sie die user_prompt verwenden oder Kommentare hinzufügen, um die zulässigen Werte anzugeben, wie z.B. die Begrenzung einer STATE-Spalte auf CA, WA und TX.
-- Use 'user_prompt'
BEGIN
DBMS_CLOUD_AI.GENERATE_SYNTHETIC_DATA(
profile_name => 'GENAI',
object_name => 'employees',
owner_name => 'ADB_USER',
user_prompt => 'the value for state should either be CA, WA, or TX',
record_count => 10
);
END;
/
-- Use comment on column
COMMENT ON COLUMN EMPLOYEES.state IS 'the value for state should either be CA, WA, or TX'
/Um die Laufzeit zu reduzieren, teilt Select AI Aufgaben zur synthetischen Datengenerierung in kleinere Chunks für Tabellen ohne Primärschlüssel oder mit numerischen Primärschlüsseln auf. Diese Aufgaben werden parallel ausgeführt und interagieren mit dem KI-Provider, um Daten effizienter zu generieren. Der Parallelitätsgrad (DOP) in Ihrer Datenbank, der von Ihrer Autonomous AI Database on Dedicated Exadata Infrastructure-Serviceebene und den ECPU- oder OCPU-Einstellungen beeinflusst wird, bestimmt die Anzahl der Datensätze, die jeder Chunk-Prozess verarbeitet. Die parallele Ausführung von Aufgaben verbessert im Allgemeinen die Performance, insbesondere wenn große Datenmengen über viele Tabellen hinweg generiert werden. Um die parallele Verarbeitung der synthetischen Datengenerierung zu verwalten, legen Sie priority als optionalen Parameter fest. Siehe Optionale Parameter.
Beispiel: Datenzugriff aktivieren oder deaktivieren
Dieses Beispiel veranschaulicht, wie Administratoren den Datenzugriff kontrollieren und verhindern können, dass Select AI tatsächliche Schematabellen an das LLM sendet.
Um den Zugriff auf Schematabellen einzuschränken, melden Sie sich als Administrator an, und führen Sie das folgende Verfahren aus.
EXEC DBMS_CLOUD_AI.DISABLE_DATA_ACCESS;
PL/SQL procedure successfully completed.
Deaktivieren von Datenzugriffsbeschränkungen Wählen Sie die narrate-Aktion von AI und die Generierung synthetischer Daten aus. Die Aktion narrate und die Generierung synthetischer Daten lösen einen Fehler aus.
Melden Sie sich als Datenbankbenutzer an, und erstellen und konfigurieren Sie Ihr AI-Profil. Prüfen Sie KI-Profile mit DBMS_CLOUD_AI konfigurieren, um Ihr KI-Profil zu konfigurieren.
BEGIN
DBMS_CLOUD_AI.CREATE_PROFILE(
profile_name =>'DATA_ACCESS',
attributes =>'{"provider": "openai",
"credential_name": "OPENAI_CRED",
"object_list": [{"owner":"SH"}]
}');
END;
/
EXEC DBMS_CLOUD_AI.SET_PROFILE('DATA_ACCESS');
select ai how many customers;
NUM_CUSTOMERS
55500
select ai narrate what are the top 3 customers in San Francisco;
ORA-20000: Data access is disabled for SELECT AI.
ORA-06512: at "C##CLOUD$SERVICE.DBMS_CLOUD", line 2228
ORA-06512: at "C##CLOUD$SERVICE.DBMS_CLOUD_AI", line 13157
ORA-06512: at line 1 https://docs.oracle.com/error-help/db/ora-20000/
The stored procedure 'raise_application_error' was called which causes this error to be generated
Error at Line: 1 Column: 6Das folgende Beispiel zeigt die Fehler, die ausgelöst werden, wenn Sie versuchen, synthetische Daten zu generieren.
BEGIN
DBMS_CLOUD_AI.GENERATE_SYNTHETIC_DATA(
profile_name => 'DATA_ACCESS_SDG',
object_name => 'CUSTOMERS_NEW',
owner_name => 'ADB_USER,
record_count => 5
);
END;
/
ERROR at line 1:
ORA-20000: Data access is disabled for SELECT AI.
ORA-06512: at "C##CLOUD$SERVICE.DBMS_CLOUD", line 2228
ORA-06512: at "C##CLOUD$SERVICE.DBMS_CLOUD_AI", line 13401
ORA-06512: at line 2Das folgende Beispiel zeigt, wie Sie den Datenzugriff aktivieren. Melden Sie sich als Administrator an, und führen Sie das folgende Verfahren aus:
EXEC DBMS_CLOUD_AI.ENABLE_DATA_ACCESS;
PL/SQL procedure successfully completed.Melden Sie sich als Datenbankbenutzer an, und erstellen und konfigurieren Sie Ihr AI-Profil. Prüfen Sie KI-Profile mit DBMS_CLOUD_AI konfigurieren, um Ihr KI-Profil zu konfigurieren.
BEGIN
DBMS_CLOUD_AI.CREATE_PROFILE(
profile_name =>'DATA_ACCESS_NEW',
attributes =>'{"provider": "openai",
"credential_name": "OPENAI_CRED",
"object_list": [{"owner":"SH"}]
}');
END;
/
PL/SQL procedure successfully completed.
EXEC DBMS_CLOUD_AI.SET_PROFILE('DATA_ACCESS_NEW');
PL/SQL procedure successfully completed.
select ai how many customers;
NUM_CUSTOMERS
55500
select ai narrate what are the top 3 customers in San Francisco;
"RESPONSE"
"The top 3 customers in San Francisco are Cody Seto, Lauren Yaskovich, and Ian Mc"
Das folgende Beispiel zeigt eine erfolgreiche Generierung synthetischer Daten nach dem Aktivieren des Datenzugriffs.
BEGIN
DBMS_CLOUD_AI.GENERATE_SYNTHETIC_DATA(
profile_name => 'DATA_ACCESS_SDG',
object_name => 'CUSTOMERS_NEW',
owner_name => 'ADB_USER',
record_count => 5
);
END;
/
PL/SQL procedure successfully completed.For information about Oracle's commitment to accessibility, visit the Oracle Accessibility Program website at http://www.oracle.com/pls/topic/lookup?ctx=acc&id=docacc.
Zugang zu Oracle Support
Der Zugriff auf und die Nutzung von Oracle-Supportservices durch Oracle-Kunden erfolgt gemäß den in der jeweiligen Oracle-Bestellung für die entsprechenden Services angegebenen Vertragsbedingungen.