Este tópico descreve como usar o conector Faker para gerar dados de teste.
Informações básicas
O conector Faker é nativo do Realtime Compute for Apache Flink e gera dados de teste com base nas expressões Java Faker fornecidas para cada campo da tabela. Use este conector para crie dados de teste e validar a lógica de negócios durante o desenvolvimento ou os testes.
A tabela a seguir descreve as capacidades do conector Faker.
|
Item |
Detalhes |
|
Tipos de tabela suportados |
Tabela source e tabela de dimensão |
|
Modo de execução |
Modo em lote e modo streaming |
|
Formato de dados |
Não aplicável |
|
Métricas específicas do conector |
Nenhuma |
|
Tipo de API |
SQL |
|
Suporte para atualização ou exclusão de dados em uma tabela sink |
Não aplicável |
Pré-requisitos
Nenhum
Limites
O conector Faker tem suporte apenas no Realtime Compute for Apache Flink VVR 4.0.12 ou posterior.
Este conector aceita somente os seguintes tipos de dados: CHAR(n), VARCHAR(n), STRING, TINYINT, SMALLINT, INT, BIGINT, FLOAT, DOUBLE, DECIMAL, BOOLEAN, TIMESTAMP, ARRAY, MAP, MULTISET e ROW.
Quando usado como tabela de dimensão em uma operação JOIN, o conector Faker não executa uma consulta real à tabela de dimensão. Em vez disso, gera um resultado diretamente com base na chave de consulta transmitida pela tabela source.
Sintaxe
CREATE TABLE faker_source (
`name` STRING,
`age` INT
) WITH (
'connector' = 'faker',
'fields.name.expression' = '#{superhero.name}',
'fields.age.expression' = '#{number.numberBetween ''0'',''1000''}'
);
Parâmetros WITH
|
Tipo |
Parâmetro |
Descrição |
Tipo |
Obrigatório |
Padrão |
Observações |
|
Geral |
connector |
Especifica o tipo de conector. |
String |
Sim |
Nenhum |
O valor deve ser |
|
fields.<field>.expression |
Defina a expressão Java Faker para gerar valores deste campo. |
String |
Sim |
Nenhum |
Para mais informações, consulte Expressões de campo. |
|
|
fields.<field>.null-rate |
Indica a probabilidade de o valor do campo ser nulo. |
Float |
Não |
0.0 |
Nenhum |
|
|
fields.<field>.length |
Determina o tamanho da coleção para os tipos de dados |
Integer |
Não |
1 |
Nenhum |
|
|
Específico da tabela source |
number-of-rows |
Defina a quantidade de linhas a gerar. |
Integer |
Não |
-1 |
Se definido, limita a tabela source. Caso contrário, a tabela permanece ilimitada. |
|
rows-per-second |
Defina a taxa de geração de dados. |
Integer |
Não |
10000 |
Nenhum |
Exemplos
Exemplo de tabela de dimensão
CREATE TEMPORARY TABLE datagen_source (
`character_id` INT,
`location` STRING,
`datagen_name` STRING,
`user_fullname` ROW<first_name STRING, last_name STRING>,
`user_data` ARRAY<STRING>,
`user_score` Map<STRING, INT>,
`user_books` MULTISET<STRING>,
`proctime` AS PROCTIME()
) WITH (
'connector' = 'faker',
'fields.character_id.expression' = '#{number.numberBetween ''0'',''10000''}',
'fields.location.expression' = '#{harry_potter.location}',
'fields.datagen_name.expression' = '#{superhero.name}',
'fields.user_fullname.first_name.expression' = '#{superhero.prefix}',
'fields.user_fullname.last_name.expression' = '#{superhero.suffix}',
'fields.user_data.expression' = '#{harry_potter.character}',
'fields.user_data.length' = '2',
'fields.user_score.key.expression' = '#{harry_potter.character}',
'fields.user_score.value.expression' = '#{number.numberBetween ''10'',''100''}',
'fields.user_score.length' = '2',
'fields.user_books.expression' = '#{book.title}',
'fields.user_books.length' = '2',
'number-of-rows' = '5'
);
CREATE TEMPORARY TABLE faker_dim (
`character_id` INT,
`faker_name` STRING
) WITH (
'connector' = 'faker',
'fields.character_id.expression' = '#{number.numberBetween ''0'',''100''}',
'fields.faker_name.expression' = '#{harry_potter.characters}'
);
SELECT
l.character_id,
l.location,
l.datagen_name,
l.user_fullname,
l.user_data,
l.user_score,
l.user_books,
c.faker_name
FROM datagen_source AS l
JOIN faker_dim FOR SYSTEM_TIME AS OF proctime AS c
ON l.character_id = c.character_id;
Expressões de campo
-
Formato
Cada campo definido na instrução DDL exige uma expressão correspondente na cláusula WITH. A expressão deve seguir o formato 'fields.<field>.expression' = '#{className.methodName ''parameter'', ...}'. A tabela a seguir descreve os componentes desse formato.
Parâmetro
Descrição
field
Nome de um campo na instrução DDL.
className
Nome da classe Faker.
O Java Faker oferece cerca de 80 classes Faker para gerar expressões de campo. Selecione uma classe conforme seus requisitos de negócio.
NotaOs nomes das classes Faker não diferenciam maiúsculas de minúsculas.
methodName
Nome do método.
NotaOs nomes dos métodos não diferenciam maiúsculas de minúsculas.
parameter
Parâmetros de entrada do método.
Nota-
Coloque os parâmetros de entrada do método entre duas aspas simples consecutivas (
'') para escapá-los corretamente na string da expressão. -
Use vírgula (,) para separar vários parâmetros.
-
-
Exemplo
Os passos a seguir demonstram como construir uma expressão de campo. O exemplo usa a expressão do campo
age: 'fields.age.expression' = '#{number.numberBetween ''0'',''1000''}', apresentada na seção Sintaxe:Na documentação da API do Java Faker, localize a classe
Number.-
Na classe
Number, encontre o métodonumberBetweene leia sua descrição.Esse método retorna um valor dentro de um intervalo numérico especificado.
-
Com base no nome da classe (
Number), no nome do método (numberBetween) e nos parâmetros de entrada (0e1000), construa a expressão SQL para o campoage: 'fields.age.expression' = '#{number.numberBetween ''0'',''1000''}'.Essa expressão gera um valor entre 0 e 1000 para o campo
age.