# Data Reader

DataReader 插件是专门提供用于开发和测试环境中,生产满足一定规则要求的数据的插件。

在实际开发和测试中,我们需要按照一定的业务规则来生产测试数据,而不仅仅是随机内容,比如身份证号码,银行账号,股票代码等。

## 为什么要重复发明轮子

诚然,网络上有相当多的专门的数据生产工具,其中不乏功能强大、性能也强悍。 但这些工具大部分是考虑到了数据生成这一段,而忽略了数据写入到目标端的问题,或者说有些考虑到了,但仅仅只考虑了一种或有限的几种数据库。

恰好 Addax 工具能够提供足够多的目标端写入能力,加上之前的已有的 [streamReader](../streamreader) 已经算是一个简单版的数据生成工具,因此在此功能上 增加一些特定规则,再利用写入端多样性的能力,自然就成为了一个较好的数据生成工具。

## 配置示例

这里我把目前插件支持的规则全部列举到下面的例子中

=== "datareader2stream.json"

`json --8<-- "jobs/datareader.json" `

保存上述内容到 job/datareader2stream.json

然后执行该任务,其输出结果类似如下:

`shell --8<-- "output/datareader.txt" `

## 配置说明

column 的配置和其他插件的配置稍有不同,一个字段由以下配置项组成

配置项 | 是否必须 | 默认值 | 示例 | 说明 |
---------- | -------- | --------------------- | --------------------- | -------------------------------------- |
value | 否 | 无 | Addax | 数据值,在某些情况下为必选项 |
rule | 否 | constant | idCard | 数据生产规则,详细下面的描述 |
type | 否 | string | double | 数据值类型 |
dateFormat | 否 | yyyy-MM-dd HH:mm:ss | yyyy/MM/dd HH:mm:ss | 日期格式,仅在 typedate 时有效 |

### rule 说明

该插件的字段配置核心是 rule 字段,它用来指示应该生成什么样的数据,并依据不同规则,配合其他配置选项来生产满足期望的数据。 当前 rule 的配置均为内置支持的规则,暂不支持自定义,以下详细说明

### constant

constantrule 的默认配置,该规则意味着要生成的数据值由 value 配置项决定,其不做任何变更。比如

```json {

"value": "Addax", "type": "string", "rule": "constant"

}

表示该字段生产的数据值均为 Addax

### incr

incr 配置项的含义和 streamreader 插件中的 incr 含义一致,表示这是一个递增的数据生产规则,比如

```json {

"value": "1,2", "rule": "incr", "type": "long"

}

表示该字段的数据是一个长整形,数值从 1 开始,每次递增 2,也就是形成 1 开始,步长为 2 的递增数列。

该字段更详细的配置规则和注意事项,可以参考 [streamreader](../streamreader) 中的 incr 说明。

### random

random 配置项的含义和 [streamreader](../streamreader) 插件中的 random 含义一致,表示这是一个递增的数据生产规则,比如

```json {

"value": "1,10", "rule": "random", "type": "string"

}

表示该字段的数据是一个长度为 1 到 10 (1 和 10 都包括)随机字符串。

该字段更详细的配置规则和注意事项,可以参考 [streamreader](../streamreader) 中的 random 说明。

规则名称 | 含义 | 示例 | 数据类型 | 说明 |
-------------- | ------------------------------------------ | -------------------------------------- | -------- | ------------------------------------------------ |
address | 随机生成一条基本满足国内实际情况的地址信息 | 辽宁省兰州市徐汇区东山街176号 | string | |
bank | 随机生成一个国内银行名称 | 华夏银行 | string | |
company | 随机生成一个公司的名称 | 万迅电脑科技有限公司 | string | |
creditCard | 随机生成一个信用卡卡号 | 430405198908214042 | string | 16 位 |
debitCard | 随机生成一个储蓄卡卡号 | 6227894836568607 | string | 19 位 |
idCard | 随机生成一个国内身份证号码 | 350600198508222018 | string | 18 位,负责校验规则,头 6 位编码满足行政区划要求 |
lat | 随机生成维度数据 | 48.6648764 | double | 固定 7 位小数 ,也可以用`latitude` 表示 |
lng | 随机生成经度数据 | 120.6018163 | double | 固定 7 位小数,也可以使用`longitude` 表示 |
name | 随机生成一个国内名字 | 池浩 | string | 暂没考虑姓氏在国内的占比度 |
job | 随机生成一个国内岗位名称 | 系统工程师 | string | 数据来源于招聘网站 |
phone | 随机生成一个国内手机号码 | 15292600492 | string | 暂不考虑虚拟手机号 |
stockCode | 随机生成一个 6 位的股票代码 | 687461 | string | 前两位满足国内股票代码编号规范 |
stockAccount | 随机生成一个 10 位的股票交易账户 | 0692522928 | string | 完全随机,不满足账户规范 |
uuid | 随机生成一个 UUID 字符串 | bc1cf125-929b-43b7-b324-d7c4cc5a75d2 | string | 完全随机,不满足账户规范 |
zipCode | 随机生产一个国内邮政编号 | 411105 | long | 不完全满足国内邮政编号规范 |

注意:上述表格中的规则返回的数据类型是固定的,且不支持修改,因此 type 无需配置,配置的类型也会被忽略,因为数据生成来自内部规则,所以 value 也无需配置,配置的内容也会被忽略。