Este tema describe cómo utilizar el conector Faker para generar datos de prueba.
Información de contexto
El conector Faker es un conector integrado de Realtime Compute for Apache Flink. Genera datos de prueba basados en las expresiones Java Faker que proporcione para cada campo de una tabla. Utilice este conector para generar datos de prueba que permitan validar la lógica de negocio durante las fases de desarrollo o pruebas.
La siguiente tabla describe las capacidades del conector Faker.
|
Elemento |
Detalles |
|
Tipos de tabla compatibles |
tabla de origen y tabla de dimensiones |
|
Modo de ejecución |
modo por lotes y modo streaming |
|
Formato de datos |
No aplica |
|
Métricas específicas del conector |
Ninguna |
|
Tipo de API |
SQL |
|
Compatibilidad con actualización o eliminación de datos en una tabla sink |
No aplica |
Requisitos previos
Ninguna
Límites
El conector Faker solo es compatible con Realtime Compute for Apache Flink VVR 4.0.12 o versiones posteriores.
El conector únicamente admite los siguientes tipos de datos: CHAR(n), VARCHAR(n), STRING, TINYINT, SMALLINT, INT, BIGINT, FLOAT, DOUBLE, DECIMAL, BOOLEAN, TIMESTAMP, ARRAY, MAP, MULTISET y ROW.
Cuando se utiliza como tabla de dimensiones en una operación JOIN, el conector Faker no realiza una búsqueda real en la tabla de dimensiones; en su lugar, genera un resultado directamente a partir de la clave de búsqueda proporcionada por la tabla de origen.
Sintaxis
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 |
Descripción |
Tipo |
Obligatorio |
Predeterminado |
Observaciones |
|
General |
connector |
Especifica el tipo de conector. |
String |
Sí |
Ninguna |
El valor debe ser |
|
fields.<field>.expression |
Especifica la expresión Java Faker para generar valores en este campo. |
String |
Sí |
Ninguna |
Para obtener más información, consulte Field expressions. |
|
|
fields.<field>.null-rate |
Especifica la probabilidad de que el valor del campo sea nulo. |
Float |
No |
0.0 |
Ninguna |
|
|
fields.<field>.length |
Especifica el tamaño de la colección para los tipos de datos |
Integer |
No |
1 |
Ninguna |
|
|
Específicos de tabla de origen |
number-of-rows |
Especifica el número de filas que se generarán. |
Integer |
No |
-1 |
Si se establece este parámetro, la tabla de origen es acotada; de lo contrario, es no acotada. |
|
rows-per-second |
Especifica la tasa de generación de datos. |
Integer |
No |
10000 |
Ninguna |
Ejemplos
Ejemplo de tabla de dimensiones
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;
Expresiones de campo
-
Formato
Cada campo definido en la instrucción DDL requiere una expresión correspondiente en la cláusula WITH. La expresión debe seguir el formato 'fields.<field>.expression' = '#{className.methodName ''parameter'', ...}'. A continuación se describen los componentes de este formato.
Parámetro
Descripción
field
Nombre de un campo en la instrucción DDL.
className
Nombre de la clase Faker.
Java Faker proporciona aproximadamente 80 clases Faker para generar expresiones de campo. Seleccione una clase según sus requisitos de negocio.
NotaLos nombres de las clases Faker no distinguen entre mayúsculas y minúsculas.
methodName
Nombre del método.
NotaLos nombres de los métodos no distinguen entre mayúsculas y minúsculas.
parameter
Parámetros de entrada del método.
Nota-
Encierre los parámetros de entrada del método entre dos comillas simples consecutivas (
'') para escaparlas correctamente dentro de la cadena de la expresión. -
Utilice una coma (,) para separar varios parámetros.
-
-
Ejemplo
Los siguientes pasos muestran cómo construir una expresión de campo, tomando como ejemplo la expresión del campo
age'fields.age.expression' = '#{number.numberBetween ''0'',''1000''}' de la sección Syntax:En la documentación de la API de Java Faker, busque la clase
Number.-
En la clase
Number, localice el métodonumberBetweeny revise su descripción.Este método devuelve un valor dentro de un rango numérico especificado.
-
Con base en el nombre de la clase (
Number), el nombre del método (numberBetween) y los parámetros de entrada (0y1000), construya la expresión SQL para el campoage: 'fields.age.expression' = '#{number.numberBetween ''0'',''1000''}'.Esta expresión genera un valor entre 0 y 1000 para el campo
age.