Cette rubrique explique comment utiliser le connecteur Faker pour générer des données de test.
Contexte
Le connecteur Faker est un connecteur intégré à Realtime Compute for Apache Flink. Il génère des données de test à partir des expressions Java Faker que vous fournissez pour chaque champ d'une table. Utilisez ce connecteur pour produire des données de test afin de valider la logique métier lors du développement ou des tests.
Le tableau suivant décrit les capacités du connecteur Faker.
|
Élément |
Détails |
|
Types de table pris en charge |
Table source et table de dimension |
|
Mode d'exécution |
Mode batch et mode streaming |
|
Format de données |
Sans objet |
|
Métriques spécifiques au connecteur |
Aucune |
|
Type d'API |
SQL |
|
Prise en charge de la mise à jour ou de la suppression des données dans une table sink |
Sans objet |
Prérequis
Aucun
Limites
Le connecteur Faker est pris en charge uniquement dans Realtime Compute for Apache Flink VVR 4.0.12 ou version ultérieure.
Le connecteur prend uniquement en charge les types de données suivants : CHAR(n), VARCHAR(n), STRING, TINYINT, SMALLINT, INT, BIGINT, FLOAT, DOUBLE, DECIMAL, BOOLEAN, TIMESTAMP, ARRAY, MAP, MULTISET et ROW.
Lorsqu'il est utilisé comme table de dimension dans une opération JOIN, le connecteur Faker n'effectue pas de recherche réelle dans la table de dimension. Il génère directement un résultat basé sur la clé de recherche transmise par la table source.
Syntaxe
CREATE TABLE faker_source (
`name` STRING,
`age` INT
) WITH (
'connector' = 'faker',
'fields.name.expression' = '#{superhero.name}',
'fields.age.expression' = '#{number.numberBetween ''0'',''1000''}'
);
Paramètres WITH
|
Type |
Paramètre |
Description |
Type |
Obligatoire |
Valeur par défaut |
Remarques |
|
Général |
connector |
Spécifie le type de connecteur. |
String |
Oui |
Aucune |
La valeur doit être |
|
fields.<field>.expression |
Spécifie l'expression Java Faker utilisée pour générer les valeurs de ce champ. |
String |
Oui |
Aucune |
Pour plus d'informations, consultez la section Expressions de champ. |
|
|
fields.<field>.null-rate |
Spécifie la probabilité que la valeur du champ soit null. |
Float |
Non |
0.0 |
Aucune |
|
|
fields.<field>.length |
Spécifie la taille de la collection pour les types de données |
Integer |
Non |
1 |
Aucune |
|
|
Spécifique à la table source |
number-of-rows |
Spécifie le nombre de lignes à générer. |
Integer |
Non |
-1 |
Si ce paramètre est défini, la table source est bornée. Sinon, elle est non bornée. |
|
rows-per-second |
Spécifie le taux de génération des données. |
Integer |
Non |
10000 |
Aucune |
Exemples
Exemple de table de dimension
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;
Expressions de champ
-
Format
Chaque champ défini dans l'instruction DDL requiert une expression correspondante dans la clause WITH. L'expression doit respecter le format suivant : 'fields.<field>.expression' = '#{className.methodName ''parameter'', ...}'. Le tableau ci-dessous décrit les composants de ce format.
Paramètre
Description
field
Le nom d'un champ dans l'instruction DDL.
className
Le nom de la classe Faker.
Java Faker propose environ 80 classes Faker pour générer des expressions de champ. Sélectionnez une classe en fonction de vos besoins métier.
RemarqueLes noms des classes Faker ne sont pas sensibles à la casse.
methodName
Le nom de la méthode.
RemarqueLes noms de méthode ne sont pas sensibles à la casse.
parameter
Les paramètres d'entrée de la méthode.
Remarque-
Entourez les paramètres d'entrée de la méthode de deux guillemets simples consécutifs (
'') pour les échapper correctement dans la chaîne d'expression. -
Utilisez une virgule (,) pour séparer plusieurs paramètres.
-
-
Exemple
Les étapes suivantes illustrent la construction d'une expression de champ, en prenant pour exemple l'expression du champ
age'fields.age.expression' = '#{number.numberBetween ''0'',''1000''}' présentée dans la section Syntaxe Syntaxe :Dans la documentation de l'API Java Faker , repérez la classe
Number.-
Dans la classe
Number, identifiez la méthodenumberBetweenet consultez sa description.Cette méthode renvoie une valeur comprise dans une plage numérique spécifiée.
-
À partir du nom de la classe (
Number), du nom de la méthode (numberBetween) et des paramètres d'entrée (0et1000), construisez l'expression SQL pour le champage: 'fields.age.expression' = '#{number.numberBetween ''0'',''1000''}'.Cette expression génère une valeur comprise entre 0 et 1000 pour le champ
age.