跳转至

Data Reader

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

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

为什么要重复发明轮子

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

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

配置示例

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

{
  "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

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

$ 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 的配置和其他插件的配置稍有不同,一个字段由以下配置项组成

配置项 是否必须 默认值 示例 说明
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 配置项决定,其不做任何变更。比如

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

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

incr

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

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

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

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

random

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

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

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

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

规则名称 含义 示例 数据类型 说明
address 随机生成一条基本满足国内实际情况的地址信息 辽宁省兰州市徐汇区东山街176号 string
bank 随机生成一个国内银行名称 华夏银行 string
company 随机生成一个公司的名称 万迅电脑科技有限公司 string
creditCard 随机生成一个信用卡卡号 430405198908214042 string 16 位
debitCard 随机生成一个储蓄卡卡号 6227894836568607 string 19 位
email 随机生成一个电子邮件地址 ok2a@gmail.com string
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 也无需配置,配置的内容也会被忽略。