#database-table #fake-data #avro #date #min-max #generate #json

bin+lib datagen

一个易于使用的工具,用于批量生成假数据,并导出为Avro、Parquet或直接作为表导入您的数据库

4 个版本

0.1.4 2019年11月16日
0.1.3 2019年6月19日
0.1.2 2019年6月19日
0.1.1 2019年6月5日
0.1.0 2019年6月5日

960编码

MIT 许可证

36KB
815

DataGen

一个易于使用的工具,用于批量生成假/模拟数据,并导出为Avro、CSV、Json或直接作为表导入您的数据库(即将推出!)。

Build Status

DataGen 是一个用 Rust 编写的命令行应用程序,用于生成假数据,并提供从您的个人桌面与社交网络互动的手段。

功能

  • 导出数据为文件
    • CSV
    • Avro
    • Json
    • Parquet
  • 将数据导出到数据库
    • Postgres
    • MySQL
  • 支持 Int、Long、Double、Float、String、Date、DateTime
  • 支持 one_of 从列表中生成随机值
  • 支持 minmax 用于数值和日期字段
  • 支持 meanstd 用于数值字段
  • 支持为 Date 和 DateTime 数据类型自定义日期格式
  • 通过尊重主键属性生成唯一的记录
  • 通过主键/外键生成多个数据集
  • 支持更丰富的类型 - 日期、映射、数组、嵌套记录

安装

目前,安装仅通过 Cargo 完成。请按照 https://www.rust-lang.net.cn/tools/install 的说明安装 Cargo。

一旦安装了 cargo,您可以使用以下命令从 crates.io 拉取二进制文件


cargo install datagen

注意:二进制文件将放置在您的 <HOME_DIR>/.cargo/bin/,Cargo 安装将将其放置在您的 PATH 中。如果没有,请将其添加到您的 PATH 中。

用法示例

CSV

datagen csv "<output_dir>/output.csv" "<schema_yaml_dir>/schema.yaml" 100 "^"

asciicast

Avro

datagen avro "<output_dir>/output.avro" "<schema_yaml_dir>/schema_simple.yaml" 100

asciicast

Json

datagen json "<output_dir>/output.json" "<schema_yaml_dir>/all_examples.yaml" 100

Schema YAML

---
name: person_schema
dataset:
  name: person_table
  columns:
    - {name: id, not_null: false, dtype: int}
    - {name: name, dtype: name}
    - {name: age, dtype: age}
    - {name: adult, default: 'false', dtype: boolean}
    - {name: gender, dtype: string, one_of: ["M", "F"]}
    - {name: dob, dtype: "date", min: "01/01/1950" , max: "03/01/2014", format: "%d/%m/%Y"}
    - {name: event_date, dtype: "datetime", min: "2014-11-28 12:00:09" , max: "2014-11-30 12:00:09", format: "%Y-%m-%d %H:%M:%S"}
    - {name: score, dtype: "int", mean: 1.00, std: 0.36}
    - {name: distance, dtype: "int", min: 19000, max: 221377}
    - {name: weight, dtype: "float", min: 1.00, max: 500.00}

日期格式说明符可以来自: https://docs.rs/chrono/0.4.9/chrono/format/strftime/index.html#specifiers

YAML模式示例位于 <PROJECT_ROOT>/test_data/schema_options.yaml

开发设置

  1. 克隆仓库
  2. 运行 cargo build
  3. 运行 cargo test -- --color always --nocapture
  4. 运行程序(&利润!)
CSV
cargo run -- "csv" "<output_dir>/output.csv" "<schema_yaml_dir>/schema.yaml" 100 ";"
Avro
cargo run -- "avro" "<output_dir>/output.avro" "<schema_yaml_dir>/schema_simple.yaml" 100
Json
cargo run -- "json" "<output_dir>/output.json" "<schema_yaml_dir>/schema.yaml" 100

发布历史

  • 0.1.0

    • 支持CSV(无标题)
    • 支持Avro(原始类型)
  • 0.1.1

    • 支持CSV的自定义分隔符
  • 0.1.3

    • 添加了Json支持
    • 支持语义类型(名称、日期、纬度、电话等)
  • 0.1.4

    • 支持one_of等。

              - {name: "day_of_week", dtype: "string", one_of:["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]} 
      
    • 支持数值列的最小值和最大值

              - {name: "age", dtype: "int", min: 1 , max: 130}
      
    • 支持日期和时间(以及最小值和最大值)

             - {name: "event_time", dtype: "datetime", min: "2014-11-28 12:00:09" , max: "2014-11-30 12:00:09", format: "%Y-%m-%d %H:%M:%S"}
             - {name: "dob", dtype: "date", min: "01/01/1920" , max: "03/01/2019", format: "%d/%m/%Y"}
      
    • 支持语义类型(名称、日期、纬度、电话等)

元数据

Arun Manivannan – @arunma[email protected]

在MIT许可下分发。更多信息请参阅 LICENSE

https://github.com/arunma/datagen

贡献

你想帮忙吗? 太棒了

  1. 这是我第一个Rust项目。如果你是一位经验丰富的Rust程序员,我将不胜感激地进行代码审查。
  2. 如果你有兴趣添加新的接收器到项目/报告错误/添加功能/添加文档,提前感谢你。你的努力非常受重视。

依赖项

~10MB
~179K SLoC