在项目中,我想很多人都会有各种数据导出,在构建数据仓库 ETL 报表分析系统的过程中,从不同数据源大量的数据同步,关联数据处理,不要太繁琐烦人。
https://github.com/snower/syncany
支持特性:
- 使用 json 文件轻松定义导出规则
- 支持从 execl、json 文件、csv 文件、mysql、mongodb、postgresql 读入数据
- 支持输出到 execl、json 文件、csv 文件、mysql、mongodb、postgresql、elasticsearch
- 支持从不同数据源读入关联数据,比如自动读取 mysql 订单 uid 关联 mongodb 用户信息
- 支持简单表达式对值进行处理
- 支持简单 case 语法翻译枚举类型
- 支持删除插入和插入更新删除两中同步类型
数据同步完成后,我想 kibana、superset、Grafana 都是很不错易于使用的图表系统了,直接写入 Execl 也可以大幅解放烦琐的数据导出需求。
简单导出规则示例:
{
"extends": ["json/database.json", "json/log.json"],
"name": "user_order",
"input": "&.mysql_order.user_order::order_id",
"output": "&.exports.用户订单.xlsx#订单列表::订单号",
"querys": {
"order_at|datetime": [">=", "<"]
},
"schema": {
"订单号": "$.order_id",
"用户 ID": "$.uid",
"用户名": ["$.uid|ObjectId", "&.mongo_user.user::_id", "$.username"],
"用户昵称": ["$.uid|ObjectId", "&.mongo_user.user::_id", "$.nickname"],
"订单类型": {
"name": "case_valuer",
"key": "order_type",
"case": {
"groupbuy": "团购订单"
},
"default_case": "普通订单"
},
"订单金额(元)": ["@div", "$.total_fee", 100],
"订单状态": ["$.status", "&.json.status.json::status", "$.verbose_name"],
"下单时间": "$.order_at|datetime %Y-%m-%d %H:%M:%S"
}
}
也可看详细 demo 示例: https://github.com/snower/syncany/tree/master/examples/demo