このトピックでは、Faker コネクタを使用してシミュレーションデータを生成する方法について説明します。
背景情報
Faker コネクタは、テーブル内の各フィールドに対して Java Faker 式に基づいてテストデータを生成する組み込みコネクタです。Faker コネクタを使用すると、開発やテストの際にビジネスロジックを検証するためのテストデータを取得できます。
シミュレーションデータジェネレーターコネクタは、以下をサポートします。
|
カテゴリ |
詳細 |
|
サポートされるタイプ |
ソーステーブルとディメンションテーブル |
|
実行モード |
バッチモードとストリームモード |
|
データフォーマット |
該当なし |
|
特定の監視メトリクス |
なし |
|
API タイプ |
SQL |
|
結果テーブルでのデータ更新または削除のサポート |
該当なし |
前提条件
なし
制限事項
-
Faker コネクタは、Flink コンピュートエンジンバージョン VVR 4.0.12 以降でのみサポートされます。
-
サポートされているデータ型は、CHAR(n)、VARCHAR(n)、STRING、TINYINT、SMALLINT、INT、BIGINT、FLOAT、DOUBLE、DECIMAL、BOOLEAN、TIMESTAMP、ARRAY、MAP、MULTISET、ROW のみです。
-
Faker テーブルを JOIN 操作でディメンションテーブルとして使用する場合、コネクタは実際のルックアップを実行しません。代わりに、ソーステーブルのルックアップキーに基づいて結果を直接生成します。
構文
CREATE TABLE faker_source (
`name` STRING,
`age` INT
) WITH (
'connector' = 'faker',
'fields.name.expression' = '#{superhero.name}',
'fields.age.expression' = '#{number.numberBetween ''0'',''1000''}'
);
WITH パラメーター
|
カテゴリ |
パラメーター |
説明 |
データ型 |
必須 |
デフォルト値 |
注意 |
|
一般 |
connector |
テーブルタイプ。 |
String |
はい |
なし |
値は `faker` である必要があります。 |
|
fields.<field>.expression |
フィールドの値を生成する Java Faker 式。 |
String |
はい |
なし |
詳細については、「フィールド式」をご参照ください。 |
|
|
fields.<field>.null-rate |
フィールドが null になる確率。 |
Float |
いいえ |
0.0 |
なし |
|
|
fields.<field>.length |
ARRAY、MAP、または MULTISET 型のコレクションのサイズ。 |
Integer |
いいえ |
1 |
なし |
|
|
ソーステーブル固有 |
number-of-rows |
生成するデータ行の数。 |
Integer |
いいえ |
-1 |
このパラメーターが設定されている場合、ソーステーブルは有界になります。それ以外の場合、ソーステーブルは非有界になります。 |
|
rows-per-second |
データが生成されるレート。 |
Integer |
いいえ |
10000 |
デフォルト値は 10,000 行/秒です。 |
例
ディメンションテーブルの例
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;
フィールド式
-
仕組み
Faker コネクタを使用する場合、データ定義言語 (DDL) 文で定義された各フィールドに対して、WITH 句で特定の式を指定する必要があります。式は 'fields.<field>.expression' = '#{className.methodName ''parameter'', ...}' のフォーマットである必要があります。次の表にパラメーターを示します。
パラメーター
説明
field
DDL 文のフィールド名。
className
Faker クラスの名前。
Java Faker は、必要なフィールド式を生成するために約 80 の Faker クラスを提供します。必要に応じてクラスを選択できます。
説明Faker クラス名では、大文字と小文字は区別されません。
methodName
メソッドの名前。
説明メソッド名では、大文字と小文字は区別されません。
parameter
メソッドの入力パラメーター。
説明-
各入力パラメーターは、2 つの単一引用符 ('') で囲む必要があります。
-
複数のパラメーターはコンマ (,) で区切ります。
-
-
例
このセクションでは、「構文」セクションの `age` フィールドの式 'fields.age.expression' = '#{number.numberBetween ''0'',''1000''}' を例として使用します。次の手順では、Java Faker API ドキュメントを使用して、DDL フィールドの有効な SQL 式を作成する方法について説明します。
-
Java Faker API ドキュメントで、Number クラスを見つけます。

-
Number クラスで、numberBetween メソッドを見つけてその説明を表示します。

numberBetween メソッドは、指定された数値範囲内の値を返します。
-
クラス名 `Number`、メソッド名 `numberBetween`、および入力パラメーター `0` と `1000` に基づいて、`age` フィールドの SQL 式は次のように作成されます:'fields.age.expression' = '#{number.numberBetween ''0'',''1000''}'。
この式は、0 から 1000 までの `age` フィールドの値を生成します。
-