You need to enable JavaScript to run this app.
导航
Faker
最近更新时间:2023.09.12 16:22:50首次发布时间:2023.09.12 16:22:50

Faker 连接器能够根据表中字段的 Java Faker 表达式生成测试数据,常用于验证业务逻辑正确性,支持用作源表和维表。

使用限制

  • Faker 连接器仅支持 CHAR、VARCHAR、STRING、TINYINT、SMALLINT、INTEGER、BIGINT、FLOAT、DOUBLE、DECIMAL、BOOLEAN、TIMESTAMP、DATE、TIME、ARRAY、MAP、MULTISET 和 ROW 数据类型。
  • Faker 连接器暂时仅支持在 Flink 1.11-volcano 引擎版本中使用。

DDL 定义

CREATE TABLE faker_source (
   name STRING,
   age INT
)  WITH (
  'connector' = 'faker',
  'fields.name.expression' = '#{superhero.name}',
  'fields.age.expression' = '#{number.numberBetween ''0'',''100''}'
);

WITH 参数

参数

是否必选

默认值

数据类型

描述

connector

(none)

String

指定使用的连接器,此处是 faker 连接器。

fields..expression

(none)

String

根据字段的 Java Faker 表达式生成测试数据。详情请参见字段表达式

fields..null-rate

0.0

Float

字段为空的占比。

fields..length

1

Integer

ARRAY、MAP或MULTISET集合类型的大小。

number-of-rows

-1

Integer

源表专用参数,表示生成的数据行数。
如果设置参数,则表示 Faker 源表是有界的;默认值 -1 表示源表无界。

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''}'来介绍字段表达式填写过程。

  1. 在 Java Faker 提供的类中找到目标类,请参见Java Faker 全部类
  2. 找到并单击目标类(Number),然后找到需要的方法名并查看相关描述。
    图片
  3. 根据类和方法填写字段表达式。
    'fields.age.expression' = '#{number.numberBetween ''0'',''100''}'表达式含义为:表中的 age 字段取值范围为 [0, 100]。