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 |
|
960 在 编码
36KB
815 行
DataGen
一个易于使用的工具,用于批量生成假/模拟数据,并导出为Avro、CSV、Json或直接作为表导入您的数据库(即将推出!)。
DataGen 是一个用 Rust 编写的命令行应用程序,用于生成假数据,并提供从您的个人桌面与社交网络互动的手段。
功能
- 导出数据为文件
- CSV
- Avro
- Json
- Parquet
- 将数据导出到数据库
- Postgres
- MySQL
- 支持 Int、Long、Double、Float、String、Date、DateTime
- 支持
one_of
从列表中生成随机值 - 支持
min
和max
用于数值和日期字段 - 支持
mean
和std
用于数值字段 - 支持为 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 "^"
Avro
datagen avro "<output_dir>/output.avro" "<schema_yaml_dir>/schema_simple.yaml" 100
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
开发设置
- 克隆仓库
- 运行
cargo build
- 运行
cargo test -- --color always --nocapture
- 运行程序(&利润!)
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
贡献
你想帮忙吗? 太棒了!
- 这是我第一个Rust项目。如果你是一位经验丰富的Rust程序员,我将不胜感激地进行代码审查。
- 如果你有兴趣添加新的接收器到项目/报告错误/添加功能/添加文档,提前感谢你。你的努力非常受重视。
依赖项
~10MB
~179K SLoC