Geração de Dados Sintéticos
Gere dados sintéticos usando geradores aleatórios, algoritmos, modelos estatísticos e grandes modelos de linguagem (LLMs) para simular dados reais para desenvolver e testar soluções de forma eficaz.
Observação:
O suporte para Geração de Dados Sintéticos está disponível no Oracle Database 19c a partir da versão 19.29 e no Oracle AI Database 26ai a partir da versão 23.26.Os dados sintéticos podem ser uma ferramenta poderosa ao desenvolver e testar soluções, especialmente quando os dados reais ainda não existem ou não podem ser usados. Dados sintéticos ou gerados artificialmente podem ter muitas das características de dados reais. Dados sintéticos são normalmente criados usando geradores aleatórios, algoritmos ou modelos estatísticos para simular as características e distribuições de dados reais. No entanto, isso pode ser complexo para produzir ou confiar em ferramentas com recursos de sofisticação variável. Com a disponibilidade de Grandes Modelos de Linguagem (LLMs), podem ser gerados dados mais relevantes e específicos do esquema que considerem as características expressas em linguagem natural.
Tópicos
Tópicos Relacionados
Benefícios da Geração de Dados Sintéticos
A geração sintética de dados permite preencher clones de metadados do banco de dados, oferecendo suporte a projetos de desenvolvimento, teste e machine learning sem usar dados confidenciais de tabelas originais.
-
Preenchendo clones de metadados com dados sintéticos: Um clone de metadados replica a estrutura de um banco de dados ou esquema sem incluir dados reais. O Select AI permite que a geração de dados sintéticos preencha esses clones, protegendo dados confidenciais e permitindo o desenvolvimento, o teste e a criação de modelos. Essa abordagem oferece suporte aos testes de desempenho e escalabilidade.
-
Iniciando novos projetos: ao iniciar um novo projeto, os dados reais podem não estar disponíveis. Os dados sintéticos fornecem amostras realistas para ajudar a demonstrar conceitos e obter suporte para propostas de projetos.
-
Validação da experiência do usuário: Os dados sintéticos auxiliam no teste de interfaces do usuário, fornecendo diversos conjuntos de dados para descobrir falhas de design, desempenho e problemas de escalabilidade.
-
Suporte a projetos de IA e machine learning: Dados sintéticos são úteis para treinar modelos de IA e machine learning quando dados reais estão indisponíveis ou restritos. Os LLMs podem gerar dados com padrões específicos para facilitar o treinamento e a pontuação do modelo.
Gerar Dados Sintéticos
Use a função DBMS_CLOUD_AI.GENERATE_SYNTHETIC_DATA para gerar dados sintéticos e consultar os dados usando as ações Selecionar IA.
Para saber mais, consulte Função GENERATE_SYNTHETIC_DATA e Exemplo: Gerar Dados Sintéticos.
Monitorar e Solucionar Problemas de Geração de Dados Sintéticos
Ao gerar grandes quantidades de dados em muitas tabelas, o Select AI divide as tarefas de geração de dados sintéticos em partes menores e executa tarefas em paralelo. O status de cada bloco é rastreado na tabela SYNTHETIC_DATA$<operation_id>_STATUS.
As operações de geração de dados sintéticas são registradas nas tabelas DBA_LOAD_OPERATIONS e USER_LOAD_OPERATIONS. Use essas tabelas para monitorar a operação DBMS_CLOUD_AI.GENERATE_SYNTHETIC_DATA. Consulte Rastrear DBMS_CLOUD Operações de Carga para obter mais detalhes.
USER_LOAD_OPERATION usando o seguinte:SELECT max(id) FROM user_load_operations;
Para exibir as operações de dados sintéticos em execução em outra sessão, use a view DBA_LOAD_OPERATIONS.
Exibir Status da Geração de Dados Sintéticos
A tabela de status da operação de geração de dados sintéticos mostra o andamento de cada tabela e seu bloco correspondente. A coluna STATUS_TABLE no USER_LOAD_OPERATIONS ou DBA_LOAD_OPERATIONS mostra o nome da tabela de status. O nome da tabela é SYNTHETIC_DATA$<operation_id>_STATUS e tem as seguintes colunas:
| Nome | Tipo de dados | Descrição |
|---|---|---|
|
|
|
Identificador exclusivo do registro. |
|
|
|
Nome qualificado da tabela, como "ADB_USER"."EMPLOYEES" |
|
|
|
Número desejado de registros para esta tarefa de geração de dados |
|
|
|
Número real de registros gerados. |
|
|
|
Valor inicial da chave primária durante esta tarefa de geração de dados. |
|
|
|
Timestamp indicando quando o registro foi modificado pela última vez. |
|
|
|
Status da tarefa de geração de dados. Os valores válidos são:
|
|
|
|
Código de erro, se a tarefa de geração de dados falhar. |
|
|
|
Mensagem de erro fornecida se a tarefa falhar. |
|
|
|
Timestamp que marca o fim da tarefa de geração de dados. |
Para verificar o número de registros gerados para cada tabela, execute o seguinte:
SELECT name, SUM(rows_loaded) FROM synthetic_data$<operation_id>_status group by name;Consulte ROWS_LOADED para confirmar o número de linhas carregadas para cada bloco e SUM(ROWS_LOADED) para linhas para cada tabela.
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
Exemplo: Gerar Dados Sintéticos
Observação:
O suporte para Geração de Dados Sintéticos está disponível no Oracle Database 19c a partir da versão 19.29 e no Oracle Database 26ai a partir da versão 23.26.O exemplo a seguir mostra como criar algumas tabelas no seu esquema, usar o OCI Generative AI como seu provedor de IA para criar um perfil de IA, sintetizar dados nessas tabelas usando a função DBMS_CLOUD_AI.GENERATE_SYNTHETIC_DATA e consultar ou gerar respostas para prompts de linguagem natural com o Select AI.
--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
Depois de criar e definir seu perfil de provedor de IA, use o DBMS_CLOUD_AI.GENERATE_SYNTHETIC_DATA para gerar dados para várias tabelas. Você pode consultar ou usar o Select AI para responder aos prompts de linguagem natural.
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
----------------
10Para orientar o serviço AI na geração de dados sintéticos, você pode selecionar aleatoriamente os registros existentes em uma tabela. Por exemplo, ao adicionar {"sample_rows": 5} ao argumento params, você pode enviar 5 linhas de amostra de uma tabela para o provedor de IA. Este exemplo gera 10 linhas adicionais com base nas linhas de amostra da tabela Transactions.
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;
/O argumento user_prompt permite especificar regras ou requisitos adicionais para geração de dados. Isso pode ser aplicado a uma única tabela ou como parte do argumento object_list para várias tabelas. Por exemplo, nas chamadas a seguir para DBMS_CLOUD_AI.GENERATE_SYNTHETIC_DATA, o prompt instrui a IA a gerar dados sintéticos em filmes lançados em 2009.
-- 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;
/Se uma tabela tiver estatísticas de coluna ou for clonada de um banco de dados que inclua metadados, o Select AI poderá usar essas estatísticas para gerar dados que se assemelhem ou sejam consistentes com os dados originais.
Para colunas NUMBER, os valores alto e baixo das estatísticas orientam o intervalo de valores. Por exemplo, se a coluna SALARY na tabela EMPLOYEES original variar de 1000 a 10000, os dados sintéticos dessa coluna também se enquadrarão nessa faixa.
Para colunas com valores distintos, como uma coluna STATE com os valores CA, WA e TX, os dados sintéticos usarão esses valores específicos. Você pode gerenciar esse recurso usando o parâmetro {"table_statistics": true/false}. Por padrão, as estatísticas da tabela são ativadas.
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;
/Se houver comentários da coluna, Selecionar IA os incluirá automaticamente para fornecer informações adicionais para o LLM durante a geração de dados. Por exemplo, um comentário na coluna Status em uma tabela de Transações pode listar valores permitidos, como successful, failed, pending, canceled e need manual check. Você também pode adicionar comentários para explicar melhor a coluna, fornecendo aos serviços de IA instruções ou dicas mais precisas para gerar dados precisos. Por padrão, os comentários são desativados. Consulte Parâmetros Opcionais para obter mais detalhes.
-- 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;
/Ao gerar grandes quantidades de dados sintéticos com LLMs, é provável que ocorram valores duplicados. Para evitar isso, configure uma restrição exclusiva na coluna relevante. Isso garante que o Select AI ignore linhas com valores duplicados na resposta do LLM. Além disso, para restringir valores para determinadas colunas, você pode usar o user_prompt ou adicionar comentários para especificar os valores permitidos, como limitar uma coluna STATE a CA, WA e 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'
/Para reduzir o tempo de execução, o Select AI divide as tarefas de geração de dados sintéticos em partes menores para tabelas sem chaves primárias ou com chaves primárias numéricas. Essas tarefas são executadas em paralelo, interagindo com o provedor de IA para gerar dados com mais eficiência. O Grau de Paralelismo (DOP) no seu banco de dados, influenciado pelo nível de serviço do Autonomous AI Database on Dedicated Exadata Infrastructure e pelas definições de ECPU ou OCPU, determina o número de registros que cada bloco processa. A execução de tarefas em paralelo geralmente melhora o desempenho, especialmente ao gerar grandes quantidades de dados em muitas tabelas. Para gerenciar o processamento paralelo da geração de dados sintéticos, defina priority como um parâmetro opcional. Consulte Parâmetros Opcionais.
Exemplo: Ativar ou Desativar Acesso a Dados
Este exemplo ilustra como os administradores podem controlar o acesso aos dados e impedir que o Select AI envie tabelas de esquema reais para o LLM.
Para restringir o acesso a tabelas de esquema, faça log-in como administrador e execute o procedimento a seguir.
EXEC DBMS_CLOUD_AI.DISABLE_DATA_ACCESS;
PL/SQL procedure successfully completed.
Desativando limites de acesso a dados Selecione a ação narrate da IA e a Geração de Dados Sintéticos. A ação narrate e a geração de dados sintéticos geram um erro.
Faça log-in como usuário do banco de dados, crie e configure seu perfil do AI. Revise Usar DBMS_CLOUD_AI para Configurar Perfis do AI para configurar seu perfil do AI.
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: 6O exemplo a seguir mostra os erros que são acionados quando você tenta gerar dados sintéticos.
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 2O exemplo a seguir mostra a ativação do acesso aos dados. Faça login como administrador e execute o seguinte procedimento:
EXEC DBMS_CLOUD_AI.ENABLE_DATA_ACCESS;
PL/SQL procedure successfully completed.Faça log-in como usuário do banco de dados, crie e configure seu perfil do AI. Revise Usar DBMS_CLOUD_AI para Configurar Perfis do AI para configurar seu perfil do AI.
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"
O exemplo a seguir mostra a geração de dados sintéticos bem-sucedida após a ativação do acesso aos dados.
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.
Acesso ao Suporte Técnico da Oracle
O acesso do cliente Oracle aos serviços de suporte Oracle e sua respectiva utilização ocorrerão de acordo com os termos e condições especificados no pedido de compra Oracle por ele firmado para os serviços Oracle aplicáveis.