本文為您介紹如何使用類比資料產生Faker連接器。
背景資訊
類比資料產生Faker是系統內建的連接器,它根據表中每個欄位提供的Java Faker運算式產生測試資料。當您在開發或測試時,需要使用一些測試資料來驗證商務邏輯時,推薦您使用類比資料產生連接器。
類比資料產生連接器支援的資訊如下。
類別 | 詳情 |
支援類型 | 源表和維表 |
運行模式 | 批模式和流模式 |
資料格式 | 不適用 |
特有監控指標 | 無 |
API種類 | SQL |
是否支援更新或刪除結果表資料 | 不涉及 |
前提條件
無
使用限制
僅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時,並不執行實際的維表尋找動作,而是根據源表傳入的lookup key直接產生返回結果。
文法結構
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 | 該欄位值為空白的佔比。 | Float | 否 | 0.0 | 無 | |
fields.<field>.length | ARRAY、MAP或MULTISET集合類型的大小。 | Integer | 否 | 1 | 無 | |
源表專屬 | number-of-rows | 產生的資料行數。 | Integer | 否 | -1 | 如果設定了該參數,則源表是有界的,否則是無界的。 |
rows-per-second | 產生資料的速率。 | Integer | 否 | 10000 | 預設值為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.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;
欄位運算式
操作方法
使用類比資料產生連接器時,DDL中定義的每個欄位,都需要在WITH語句中提供具體的運算式。運算式的固定格式為'fields.<field>.expression' = '#{className.methodName ''parameter'', ...}'。相關的參數說明如下表所示。
參數
說明
field
表示DDL中具體的欄位名。
className
表示Faker類的類名。
Java Faker提供了大約80個Faker類用於產生您需要的欄位運算式,您可以根據需要選擇對應的類。
說明Faker類的類名不區分大小寫。
methodName
表示方法名。
說明方法名不區分大小寫。
parameter
表示方法的入參。
說明方法的入參需要使用兩個半形單引號(' )括起來。
多個參數使用半形逗號(,)進行分隔。
樣本
本文結合Java Faker API文檔和文法結構部分中的age欄位運算式'fields.age.expression' = '#{number.numberBetween ''0'',''1000''}' 為例,為您介紹如何為DDL中的欄位正確地產生SQL運算式。
在Java Faker API文檔中,找到Number類。
在Number類中找到numberBetween方法,並查看其方法描述。
numberBetween方法表示返回指定數字範圍的值。
根據類名Number和方法名numberBetween傳入方法的參數0和1000,產生age欄位的SQL運算式'fields.age.expression' = '#{number.numberBetween ''0'',''1000''}' 。
表示產生的age欄位的值在0到1000範圍內。