DataGen SQL 连接器

Scan Source: 有界 Scan Source: 无界

DataGen 连接器允许基于内存生成数据来创建表。 在本地开发时,若不访问外部系统(如 Kafka),这会非常有用。 可以使用计算列语法灵活地生成记录。

DataGen 连接器是内置的,不需要额外的依赖项。

用法

默认情况下,DataGen 表将创建无限数量的行,每列都有一个随机值。 还可以指定总行数,从而生成有界表。

DataGen 连接器可以生成符合其 schema 的数据,应该注意的是,它按如下方式处理长度受限的字段:

  • 对于固定长度的数据类型(char、binary),字段长度只能由 schema 定义,且不支持自定义;
  • 对于可变长度数据类型 (varchar、varbinary),字段默认长度由 schema 定义,且自定义长度不能大于 schema 定义;
  • 对于超长字段(string、bytes),字段默认长度为 100,但可以定义为小于 2^31 的长度。

还支持序列生成器,您可以指定序列的起始和结束值。 如果表中有任一列是序列类型,则该表将是有界的,并在第一个序列完成时结束。

时间类型字段对应的值始终是本地机器当前系统时间。

  1. CREATE TABLE Orders (
  2. order_number BIGINT,
  3. price DECIMAL(32,2),
  4. buyer ROW<first_name STRING, last_name STRING>,
  5. order_time TIMESTAMP(3)
  6. ) WITH (
  7. 'connector' = 'datagen'
  8. )

DataGen 连接器通常与 LIKE 子句结合使用,以模拟物理表。

  1. CREATE TABLE Orders (
  2. order_number BIGINT,
  3. price DECIMAL(32,2),
  4. buyer ROW<first_name STRING, last_name STRING>,
  5. order_time TIMESTAMP(3)
  6. ) WITH (...)
  7. -- create a bounded mock table
  8. CREATE TEMPORARY TABLE GenOrders
  9. WITH (
  10. 'connector' = 'datagen',
  11. 'number-of-rows' = '10'
  12. )
  13. LIKE Orders (EXCLUDING ALL)

此外,对于可变长度类型(varchar、string、varbinary 和 bytes),您可以指定是否生成可变长度的数据。

  1. CREATE TABLE Orders (
  2. order_number BIGINT,
  3. price DECIMAL(32,2),
  4. buyer ROW<first_name STRING, last_name STRING>,
  5. order_time TIMESTAMP(3),
  6. seller VARCHAR(150)
  7. ) WITH (
  8. 'connector' = 'datagen',
  9. 'fields.seller.var-len' = 'true'
  10. )

字段类型

TypeSupported GeneratorsNotes
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解析为相对于本地机器的当前时间戳向过去偏移的时间戳。偏移的最大值可以通过 ‘max-past’ 选项指定。
TIMESTAMP_LTZrandom解析为相对于本地机器的当前时间戳向过去偏移的时间戳。偏移的最大值可以通过 ‘max-past’ 选项指定。
INTERVAL YEAR TO MONTHrandom
INTERVAL DAY TO MONTHrandom
ROWrandom生成具有随机字段数据的行。
ARRAYrandom生成具有随机元素的数组。
MAPrandom生成具有随机元素的 Map。
MULTISETrandom生成具有随机元素的多重集。

连接器参数

参数是否必选默认值数据类型描述
connector
必须(none)String指定要使用的连接器,这里是 ‘datagen’。
rows-per-second
可选10000Long每秒生成的行数,用以控制数据发出速率。
number-of-rows
可选(none)Long生成数据的总行数。默认情况下,该表是无界的。
scan.parallelism
可选(none)Integer定义算子并行度。不设置将使用全局默认并发。
fields.#.kind
可选randomString指定 ‘#’ 字段的生成器。可以是 ‘sequence’ 或 ‘random’。
fields.#.min
可选(Minimum value of type)(Type of field)随机生成器的最小值,适用于数字类型。
fields.#.max
可选(Maximum value of type)(Type of field)随机生成器的最大值,适用于数字类型。
fields.#.max-past
可选0Duration随机生成器生成相对当前时间向过去偏移的最大值,适用于 timestamp 类型。
fields.#.length
可选100Integer随机生成器生成字符的长度,适用于 varchar、varbinary、string、bytes、array、map、multiset。 请注意对于可变长字段(varchar、varbinary),默认长度由 schema 定义,且长度不可设置为大于它; 对于超长字段(string、bytes),默认长度是 100 且可设置为小于 2^31 的长度; 对于结构化字段(数组、Map、多重集),默认元素数量为 3 且可以自定义。
fields.#.var-len
可选falseBoolean是否生成变长数据,请注意只能用于变长类型(varchar、string、varbinary、bytes)。
fields.#.start
可选(none)(Type of field)序列生成器的起始值。
fields.#.end
可选(none)(Type of field)序列生成器的结束值。
fields.#.null-rate
optional(none)(Type of field)空值比例。