This documentation is for an unreleased version of Apache Flink. We recommend you use the latest stable version.
DataGen
DataGen SQL 连接器 #
Scan Source: 有界 Scan Source: 无界
DataGen 连接器允许基于内存生成数据来创建表。 在本地开发时,若不访问外部系统(如 Kafka),这会非常有用。 可以使用计算列语法灵活地生成记录。
DataGen 连接器是内置的,不需要额外的依赖项。
用法 #
默认情况下,DataGen 表将创建无限数量的行,每列都有一个随机值。 还可以指定总行数,从而生成有界表。
DataGen 连接器可以生成符合其 schema 的数据,应该注意的是,它按如下方式处理长度受限的字段:
- 对于固定长度的数据类型(char、binary),字段长度只能由 schema 定义,且不支持自定义;
- 对于可变长度数据类型 (varchar、varbinary),字段默认长度由 schema 定义,且自定义长度不能大于 schema 定义;
- 对于超长字段(string、bytes),字段默认长度为 100,但可以定义为小于 2^31 的长度。
还支持序列生成器,您可以指定序列的起始和结束值。 如果表中有任一列是序列类型,则该表将是有界的,并在第一个序列完成时结束。
时间类型字段对应的值始终是本地机器当前系统时间。
CREATE TABLE Orders (
order_number BIGINT,
price DECIMAL(32,2),
buyer ROW<first_name STRING, last_name STRING>,
order_time TIMESTAMP(3)
) WITH (
'connector' = 'datagen'
)
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)
此外,对于可变长度类型(varchar、string、varbinary 和 bytes),您可以指定是否生成可变长度的数据。
CREATE TABLE Orders (
order_number BIGINT,
price DECIMAL(32,2),
buyer ROW<first_name STRING, last_name STRING>,
order_time TIMESTAMP(3),
seller VARCHAR(150)
) WITH (
'connector' = 'datagen',
'fields.seller.var-len' = 'true'
)
字段类型 #
Type | Supported Generators | Notes |
---|---|---|
BOOLEAN | random | |
CHAR | random / sequence | |
VARCHAR | random / sequence | |
BINARY | random / sequence | |
VARBINARY | random / sequence | |
STRING | random / sequence | |
DECIMAL | random / sequence | |
TINYINT | random / sequence | |
SMALLINT | random / sequence | |
INT | random / sequence | |
BIGINT | random / sequence | |
FLOAT | random / sequence | |
DOUBLE | random / sequence | |
DATE | random | 总是解析为本地机器的当前日期。 |
TIME | random | 总是解析为本地机器的当前时间。 |
TIMESTAMP | random | 解析为相对于本地机器的当前时间戳向过去偏移的时间戳。偏移的最大值可以通过 'max-past' 选项指定。 |
TIMESTAMP_LTZ | random | 解析为相对于本地机器的当前时间戳向过去偏移的时间戳。偏移的最大值可以通过 'max-past' 选项指定。 |
INTERVAL YEAR TO MONTH | random | |
INTERVAL DAY TO MONTH | random | |
ROW | random | 生成具有随机字段数据的行。 |
ARRAY | random | 生成具有随机元素的数组。 |
MAP | random | 生成具有随机元素的 Map。 |
MULTISET | random | 生成具有随机元素的多重集。 |
连接器参数 #
参数 | 是否必选 | 默认值 | 数据类型 | 描述 |
---|---|---|---|---|
connector |
必须 | (none) | String | 指定要使用的连接器,这里是 'datagen'。 |
rows-per-second |
可选 | 10000 | Long | 每秒生成的行数,用以控制数据发出速率。 |
number-of-rows |
可选 | (none) | Long | 生成数据的总行数。默认情况下,该表是无界的。 |
scan.parallelism |
可选 | (none) | Integer | 定义算子并行度。不设置将使用全局默认并发。 |
fields.#.kind |
可选 | random | String | 指定 '#' 字段的生成器。可以是 'sequence' 或 'random'。 |
fields.#.min |
可选 | (Minimum value of type) | (Type of field) | 随机生成器的最小值,适用于数字类型。 |
fields.#.max |
可选 | (Maximum value of type) | (Type of field) | 随机生成器的最大值,适用于数字类型。 |
fields.#.max-past |
可选 | 0 | Duration | 随机生成器生成相对当前时间向过去偏移的最大值,适用于 timestamp 类型。 |
fields.#.length |
可选 | 100 | Integer | 随机生成器生成字符的长度,适用于 varchar、varbinary、string、bytes、array、map、multiset。 请注意对于可变长字段(varchar、varbinary),默认长度由 schema 定义,且长度不可设置为大于它; 对于超长字段(string、bytes),默认长度是 100 且可设置为小于 2^31 的长度; 对于结构化字段(数组、Map、多重集),默认元素数量为 3 且可以自定义。 |
fields.#.var-len |
可选 | false | Boolean | 是否生成变长数据,请注意只能用于变长类型(varchar、string、varbinary、bytes)。 |
fields.#.start |
可选 | (none) | (Type of field) | 序列生成器的起始值。 |
fields.#.end |
可选 | (none) | (Type of field) | 序列生成器的结束值。 |
fields.#.null-rate |
optional | (none) | (Type of field) | 空值比例。 |