本文为您介绍如何使用Datagen连接器。

背景信息

Datagen是主要用于调试的连接器,可以周期性地生成Datagen源表对应类型的随机数据。如果您在开发或测试时,需要使用一些测试数据来快速验证业务逻辑,您可以使用Datagen连接器来生成随机数据。

Datagen支持计算列语法Computed Column syntax,使它可以灵活地生成数据。

Datagen连接器支持的信息如下。
类别详情
支持类型源表
运行模式批模式和流模式
数据格式暂不适用
特有监控指标暂无
API种类SQL
是否支持更新或删除结果表数据不涉及

使用限制

仅Flink计算引擎VVR 2.0.0及以上版本支持Datagen连接器。

语法结构

CREATE TABLE datagen_source (
  name VARCHAR,
  score BIGINT
) WITH (
  'connector' = 'datagen'
);

WITH参数

参数说明数据类型是否必填默认值备注
connector源表类型。String固定值为datagen
rows-per-second生成随机数据的速率。Long10000(条/秒)无。
number-of-rows生成数据的总条数。Long默认生成的是无界数据源表。如果任意字段生成器类型为序列生成器,则当某一字段的序列全部生成后,Source结束,生成有界表。
fields.<field>.kind为<field>生成数据的生成器类型。Stringrandom参数可选值:
  • random:随机生成器。
  • sequence:序列生成器。
关于生成器详情请参见生成器
fields.<field>.min生成随机数的最小值。与<field>类型相同<field>类型的最小值fields.<field>.kind参数设置为random时,该参数配置有效。只支持数字类型。
fields.<field>.max生成随机数的最大值。与<field>类型相同<field>类型的最大值fields.<field>.min
fields.<field>.max-past生成随机时间戳时,相对于本地机器当前时间戳的最大过去时间。Duration0只支持时间戳类型。
fields.<field>.length生成随机字符串的长度或者生成集合的容量。Integer100支持以下任意一种类型:
  • char
  • varchar
  • binary
  • varbinary
  • string
  • array
  • map
  • multiset
fields.<field>.start序列生成器的起始值。与<field>类型相同无。
fields.<field>.end序列生成器的结束值。与<field>类型相同无。

生成器

当前Datagen可以使用两种生成器生成随机数据:
  • 随机生成器(random):生成随机值。您可以指定随机生成数据的最大值和最小值。
  • 序列生成器(sequence):在一定范围内生成有序值,当生成序列达到结束值时结束,因此使用序列生成器将生成有界表。您可以指定序列的起始值和结束值。
各种数据类型支持的生成器如下所示。
类型支持的生成器备注
BOOLEANrandom无。
CHARrandom/sequence无。
VARCHARrandom/sequence无。
BINARYrandom/sequence无。
VARBINARYrandom/sequence无。
STRINGrandom/sequence无。
DECIMALrandom/sequence无。
TINYINTrandom/sequence无。
SMALLINTrandom/sequence无。
INTrandom/sequence无。
BIGINTrandom/sequence无。
FLOATrandom/sequence无。
DOUBLErandom/sequence无。
DATErandom始终使用本地机器的当前日期。
TIMErandom始终使用本地机器的当前时间。
TIMESTAMPrandom在相对于本地机器当前时间戳的最大过去时间范围内生成。
TIMESTAMP_LTZrandom同TIMESTAMP。
ROWrandom生成随机子字段。
ARRAYrandom生成随机元素。
MAPrandom生成随机(key,value)。
MULTISETrandom生成随机元素。

使用示例

Datagen通常与LIKE子句一起使用来模拟一个表,如下所示。
CREATE TABLE Orders (
    order_number BIGINT,
    price        DECIMAL(32,2),
    buyer        ROW<first_name STRING, last_name STRING>,
    order_time   TIMESTAMP(3)
) WITH (...);

-- create a bounded mock table
CREATE TEMPORARY TABLE GenOrders
WITH (
    'connector' = 'datagen',
    'number-of-rows' = '10'
)
LIKE Orders (EXCLUDING ALL);