Skip to content

Data Reader

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

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

为什么要重复发明轮子

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

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

配置示例

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

json
{
  "job": {
    "setting": {
      "speed": {
        "byte": -1,
        "channel": 1
      },
      "errorLimit": {
        "record": 0,
        "percentage": 0.02
      }
    },
    "content": {
      "reader": {
        "name": "datareader",
        "parameter": {
          "column": [
            {
              "value": "1,100,",
              "rule": "random",
              "type": "double"
            },
            {
              "value": "DataX",
              "type": "string"
            },
            {
              "value": "1",
              "rule": "incr",
              "type": "long"
            },
            {
              "value": "1989/06/04 00:00:01,-1",
              "rule": "incr",
              "type": "date",
              "dateFormat": "yyyy/MM/dd hh:mm:ss"
            },
            {
              "value": "test",
              "type": "bytes"
            },
            {
              "rule": "address"
            },
            {
              "rule": "bank"
            },
            {
              "rule": "company"
            },
            {
              "rule": "creditCard"
            },
            {
              "rule": "debitCard"
            },
            {
              "rule": "idCard"
            },
            {
              "rule": "lat"
            },
            {
              "rule": "lng"
            },
            {
              "rule": "name"
            },
            {
              "rule": "job"
            },
            {
              "rule": "phone"
            },
            {
              "rule": "stockCode"
            },
            {
              "rule": "stockAccount"
            }
          ],
          "sliceRecordCount": 10
        }
      },
      "writer": {
        "name": "streamwriter",
        "parameter": {
          "print": true,
          "encoding": "UTF-8"
        }
      }
    }
  }
}

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

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

txt
$ bin/addax.sh job/datareader2stream.json
  ___      _     _
 / _ \    | |   | |
/ /_\ \ __| | __| | __ ___  __
|  _  |/ _` |/ _` |/ _` \ \/ /
| | | | (_| | (_| | (_| |>  <
\_| |_/\__,_|\__,_|\__,_/_/\_\

:: Addax version ::    (v4.0.2-SNAPSHOT)

2021-08-13 17:02:00.888 [        main] INFO  VMInfo               - VMInfo# operatingSystem class => com.sun.management.internal.OperatingSystemImpl
2021-08-13 17:02:00.910 [        main] INFO  Engine               -
{
	"content":
		{
			"reader":{
				"parameter":{
					"column":[
						{
							"rule":"random",
							"type":"double",
							"scale": "2",
							"value":"1,100,"
						},
						{
							"type":"string",
							"value":"DataX"
						},
						{
							"rule":"incr",
							"type":"long",
							"value":"1"
						},
						{
							"dateFormat":"yyyy/MM/dd hh:mm:ss",
							"rule":"incr",
							"type":"date",
							"value":"1989/06/04 00:00:01,-1"
						},
						{
							"type":"bytes",
							"value":"test"
						},
						{
							"rule":"address"
						},
						{
							"rule":"bank"
						},
						{
							"rule":"company"
						},
						{
							"rule":"creditCard"
						},
						{
							"rule":"debitCard"
						},
						{
							"rule":"idCard"
						},
						{
							"rule":"lat"
						},
						{
							"rule":"lng"
						},
						{
							"rule":"name"
						},
						{
							"rule":"job"
						},
						{
							"rule":"phone"
						},
						{
							"rule":"stockCode"
						},
						{
							"rule":"stockAccount"
						}
					],
					"sliceRecordCount":10
				},
				"name":"datareader"
			},
			"writer":{
				"parameter":{
					"print":true,
					"encoding":"UTF-8"
				},
				"name":"streamwriter"
			}
	},
	"setting":{
		"errorLimit":{
			"record":0,
			"percentage":0.02
		},
		"speed":{
			"byte":-1,
			"channel":1
		}
	}
}

2021-08-13 17:02:00.937 [        main] INFO  PerfTrace            - PerfTrace traceId=job_-1, isEnable=false, priority=0
2021-08-13 17:02:00.938 [        main] INFO  JobContainer         - Addax jobContainer starts job.
2021-08-13 17:02:00.940 [        main] INFO  JobContainer         - Set jobId = 0
2021-08-13 17:02:00.976 [       job-0] INFO  JobContainer         - Addax Reader.Job [datareader] do prepare work .
2021-08-13 17:02:00.977 [       job-0] INFO  JobContainer         - Addax Writer.Job [streamwriter] do prepare work .
2021-08-13 17:02:00.978 [       job-0] INFO  JobContainer         - Job set Channel-Number to 1 channels.
2021-08-13 17:02:00.979 [       job-0] INFO  JobContainer         - Addax Reader.Job [datareader] splits to [1] tasks.
2021-08-13 17:02:00.980 [       job-0] INFO  JobContainer         - Addax Writer.Job [streamwriter] splits to [1] tasks.
2021-08-13 17:02:01.002 [       job-0] INFO  JobContainer         - Scheduler starts [1] taskGroups.
2021-08-13 17:02:01.009 [ taskGroup-0] INFO  TaskGroupContainer   - taskGroupId=[0] start [1] channels for [1] tasks.
2021-08-13 17:02:01.017 [ taskGroup-0] INFO  Channel              - Channel set byte_speed_limit to -1, No bps activated.
2021-08-13 17:02:01.017 [ taskGroup-0] INFO  Channel              - Channel set record_speed_limit to -1, No tps activated.

7.65	DataX	1	1989-06-04 00:00:01	test	天津市南京县长寿区光明路263号	交通银行	易动力信息有限公司	6227894836568607	6235712610856305437	450304194808316766	31.3732613	-125.3507716	龚军	机电工程师	13438631667	726929	8741848665
18.58	DataX	2	1989-06-03 00:00:01	test	江苏省太原市浔阳区东山路33号	中国银行	时空盒数字信息有限公司	4096666711928233	6217419359154239015	220301200008188547	48.6648764	104.8567048	匡飞	化妆师	18093137306	006845	1815787371
16.16	DataX	3	1989-06-02 00:00:01	test	台湾省邯郸市清河区万顺路10号	大同商行	开发区世创科技有限公司	4096713966912225	6212977716107080594	150223196408276322	29.0134395	142.6426842	支波	审核员	13013458079	020695	3545552026
63.89	DataX	4	1989-06-01 00:00:01	test	上海市辛集县六枝特区甘园路119号	中国农业银行	泰麒麟传媒有限公司	6227893481508780	6215686558778997167	220822196208286838	-71.6484635	111.8181273	敬坤	房地产客服	13384928291	174445	0799668655
79.18	DataX	5	1989-05-31 00:00:01	test	陕西省南京市朝阳区大胜路170号	内蒙古银行	晖来计算机信息有限公司	6227535683896707	6217255315590053833	350600198508222018	-24.9783587	78.017024	蒋杨	固定资产会计	18766298716	402188	9633759917
14.97	DataX	6	1989-05-30 00:00:01	test	海南省长春县璧山区碧海街147号	华夏银行	浙大万朋科技有限公司	6224797475369912	6215680436662199846	220122199608190275	-3.5088667	-40.2634359	边杨	督导/巡店	13278765923	092780	2408887582
45.49	DataX	7	1989-05-29 00:00:01	test	台湾省潜江县梁平区七星街201号	晋城商行	开发区世创信息有限公司	5257468530819766	6213336008535546044	141082197908244004	-72.9200596	120.6018163	桑明	系统工程师	13853379719	175864	8303448618
8.45	DataX	8	1989-05-28 00:00:01	test	海南省杭州县城北区天兴路11号	大同商行	万迅电脑科技有限公司	6227639043120062	6270259717880740332	430405198908214042	-16.5115338	-39.336119	覃健	人事总监	13950216061	687461	0216734574
15.01	DataX	9	1989-05-27 00:00:01	test	云南省惠州市和平区海鸥街201号	内蒙古银行	黄石金承信息有限公司	6200358843233005	6235730928871528500	130300195008312067	-61.646097	163.0882369	卫建华	电话采编	15292600492	001658	1045093445
55.14	DataX	10	1989-05-26 00:00:01	test	辽宁省兰州市徐汇区东山街176号	廊坊银行	创汇科技有限公司	6227605280751588	6270262330691012025	341822200908168063	77.2165746	139.5431377	池浩	多媒体设计	18693948216	201678	0692522928

2021-08-13 17:02:04.020 [       job-0] INFO  AbstractScheduler    - Scheduler accomplished all tasks.
2021-08-13 17:02:04.021 [       job-0] INFO  JobContainer         - Addax Writer.Job [streamwriter] do post work.
2021-08-13 17:02:04.022 [       job-0] INFO  JobContainer         - Addax Reader.Job [datareader] do post work.
2021-08-13 17:02:04.025 [       job-0] INFO  JobContainer         - PerfTrace not enable!
2021-08-13 17:02:04.028 [       job-0] INFO  StandAloneJobContainerCommunicator - Total 10 records, 1817 bytes | Speed 605B/s, 3 records/s | Error 0 records, 0 bytes |  All Task WaitWriterTime 0.000s |  All Task WaitReaderTime 0.000s | Percentage 100.00%
2021-08-13 17:02:04.030 [       job-0] INFO  JobContainer         -
任务启动时刻                    : 2021-08-13 17:02:00
任务结束时刻                    : 2021-08-13 17:02:04
任务总计耗时                    :                  3s
任务平均流量                    :              605B/s
记录写入速度                    :              3rec/s
读出记录总数                    :                  10
读写失败总数                    :                   0

配置说明

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

配置项是否必须默认值示例说明
valueAddax数据值,在某些情况下为必选项
ruleconstantidCard数据生产规则,详细下面的描述
typestringdouble数据值类型
dateFormatyyyy-MM-dd HH:mm:ssyyyy/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 中的 incr 说明。

random

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

json
{
  "value": "1,10",
  "rule": "random",
  "type": "string"
}

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

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

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

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