Faker 连接器能够根据表中字段的 Java Faker 表达式生成测试数据,常用于验证业务逻辑正确性,支持用作源表和维表。
CREATE TABLE faker_source ( name STRING, age INT ) WITH ( 'connector' = 'faker', 'fields.name.expression' = '#{superhero.name}', 'fields.age.expression' = '#{number.numberBetween ''0'',''100''}' );
参数 | 是否必选 | 默认值 | 数据类型 | 描述 |
---|---|---|---|---|
connector | 是 | (none) | String | 指定使用的连接器,此处是 faker 连接器。 |
fields. | 是 | (none) | String | 根据字段的 Java Faker 表达式生成测试数据。详情请参见字段表达式。 |
fields. | 否 | 0.0 | Float | 字段为空的占比。 |
fields. | 否 | 1 | Integer | ARRAY、MAP或MULTISET集合类型的大小。 |
number-of-rows | 否 | -1 | Integer | 源表专用参数,表示生成的数据行数。 |
rows-per-second | 否 | 10000 | Integer | 源表专用参数,表示生成数据的速率,即每秒生成多少条数据。 |
源表示例
CREATE TEMPORARY TABLE faker_source ( name STRING, age INT ) WITH ( 'connector' = 'faker', 'fields.name.expression' = '#{superhero.name}', 'fields.age.expression' = '#{number.numberBetween ''0'',''100''}', 'rows-per-second' = '10' ); CREATE TEMPORARY table print_sink( name STRING, age INT ) WITH ( 'connector' = 'print' ); INSERT INTO print_sink SELECT * FROM faker_source;
维表示例
CREATE TABLE datagen_source ( character_id1 INT, location STRING, proctime AS PROCTIME() ) WITH ( 'connector' = 'datagen' ); CREATE TABLE faker_lookup ( character_id INT, name STRING ) WITH ( 'connector' = 'faker', 'fields.character_id.expression' = '#{number.numberBetween ''0'',''100''}', 'fields.name.expression' = '#{harry_potter.characters}' ); create table print_sink ( character_id INT, location STRING, name STRING ) with ('connector' = 'print'); insert into print_sink SELECT faker_lookup.character_id, datagen_source.location, faker_lookup.name FROM datagen_source LEFT JOIN faker_lookup FOR SYSTEM_TIME AS OF datagen_source.proctime ON datagen_source.character_id1 = faker_lookup.character_id;
使用 Faker 连接器时,表中的每个字段都需要提供 Java Faker 表达式以生成数据,固定的表达式样式为'fields.<field>.expression' = '#{className.methodName ''parameter'', ...}'
。
表达式中的变量解释如下:
<field>
:表中字段名称。className
:Faker 连接提供的类。目前 Java Faker 提供了 80 多个类用于生成您需要的字段表达式,请按需选择。如需了解 Faker 类的更多信息,请参见Faker 类。methodName
:方法名。parameter
:方法的入参。示例(填写字段表达式):
此处选择示例代码中的'fields.age.expression' = '#{number.numberBetween ''0'',''100''}'
来介绍字段表达式填写过程。
'fields.age.expression' = '#{number.numberBetween ''0'',''100''}'
表达式含义为:表中的 age 字段取值范围为 [0, 100]。