このトピックでは、Faker コネクタを使用してテストデータを生成する方法について説明します。
背景情報
Faker コネクタは、Realtime Compute for Apache Flink の組み込みコネクタです。テーブルの各フィールドに指定した Java Faker 式に基づいてテストデータを生成します。このコネクタを使用して、開発またはテスト中にビジネスロジックを検証するためのテストデータを生成できます。
次の表に、Faker コネクタの機能を示します。
|
項目 |
詳細 |
|
サポートされるテーブルタイプ |
ソーステーブルおよびディメンションテーブル |
|
実行モード |
バッチモードおよびストリーミングモード |
|
データ形式 |
該当なし |
|
コネクタ固有のメトリクス |
なし |
|
API タイプ |
SQL |
|
シンクテーブルでのデータ更新または削除のサポート |
該当なし |
前提条件
なし
制限
-
Faker コネクタは、Realtime Compute for Apache Flink VVR 4.0.12 以降でのみサポートされています。
-
このコネクタは、次のデータ型のみをサポートしています:CHAR(n)、VARCHAR(n)、STRING、TINYINT、SMALLINT、INT、BIGINT、FLOAT、DOUBLE、DECIMAL、BOOLEAN、TIMESTAMP、ARRAY、MAP、MULTISET、ROW。
-
JOIN 操作でディメンションテーブルとして使用する場合、Faker コネクタは実際のディメンションテーブルルックアップを実行しません。代わりに、ソーステーブルから渡されたルックアップキーに基づいて直接結果を生成します。
構文
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 |
はい |
なし |
値を |
|
fields.<field>.expression |
このフィールドの値を生成するための Java Faker 式。 |
String |
はい |
なし |
詳細については、「フィールド式」をご参照ください。 |
|
|
fields.<field>.null-rate |
フィールドの値が null になる確率。 |
Float |
いいえ |
0.0 |
なし |
|
|
fields.<field>.length |
|
Integer |
いいえ |
1 |
なし |
|
|
ソーステーブル固有 |
number-of-rows |
生成する行数。 |
Integer |
いいえ |
-1 |
このパラメーターを設定すると、ソーステーブルは有界になります。設定しない場合は無界になります。 |
|
rows-per-second |
データ生成レート。 |
Integer |
いいえ |
10000 |
なし |
例
ディメンションテーブルの例
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.character}'
);
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;
フィールド式
-
形式
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 ドキュメントで、
Numberクラスを見つけます。 -
Numberクラスで、numberBetweenメソッドを見つけて、その説明を確認します。このメソッドは、指定された数値範囲内の値を返します。
-
クラス名 (
Number)、メソッド名 (numberBetween)、および入力パラメーター (0と1000) に基づいて、ageフィールドの SQL 式を構築します:'fields.age.expression' = '#{number.numberBetween ''0'',''1000''}'。この式は、
ageフィールドに 0 から 1000 までの値を生成します。
-