syncany
简单易用的数据同步转换导出框架。
在构建ETL和报表系统的过程中,存在大量需要从各个子系统收集整理数据的过程,常规写同步脚本非常繁琐。
syncany支持mysql、mongodb、postgresql、redis、elasticsearch、influxdb、clickhouse、execl、beanstalk等数据源读入或写结果数据,同时支持从不同DB不同数据库类型读入关联数据,并对数据进行转换计算,之后配合superset等图形报表框架,快速完成复杂报表分析系统搭建。
https://pysyncany.readthedocs.io/
安装
pip3 install syncany
配置示例
{
"extends": ["examples/demo/json/database.json", "examples/demo/json/log.json"],
"name": "demo",
"input": "<<&.data.demo.json::_id",
"output": ">>&.stdio.&1::site_id use I",
"querys": {
"start_date": {">=": "2021-01-01"}
},
"schema": {
"site_id": ["#yield", "$.sites", [
":#aggregate", "$.*|int", "$$.*|int"
]],
"site_name": ["#yield", "$.sites", [
":#aggregate", "$.*|int", [
"$$.*|int", ["&.data.sites.json::site_id", {"status|int": {">=": 0}}], ":$.name"
]
]],
"site_amount": ["#yield", "$.sites", [
":#aggregate", "$.*|int", [
"$$.*|int", "&.data.orders.json::site_id", [
":#foreach|int", "$.*|array", [
"#if", ["@lte", "$.status", 0], ["#make", {"value": "$.amount"}], "#continue"
], [
":@sum", "$.*|array", "value"
]
]
]
]],
"timeout_at": ["#yield", "$.sites", [
":#aggregate", "$.*|int", {
"#case": "$$$.vip_type",
"1": "$.timeout_at",
"#end": "$$$.rules.:0.timeout_time"
}
]],
"vip_timeout_at": ["#yield", "$.sites", [
":#aggregate", "$.*|int", {
"#match": "$$$.vip_type",
"/2/": "$$.vip_timeout_at",
"#end": "$$$.rules.:0.timeout_time"
}
]]
}
}
运行示例
# 克隆并在项目目录下执行即可看到输出,具体输入数据请查看examples/demo/data
python3 ./bin/syncany examples/demo/demo.json --start_date__gte="2021-01-01"
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ site_id ┃site_name ┃site_amount ┃timeout_at ┃vip_timeout_at ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┩
│ 8 │黄豆网 │17.04 │16:00:00 │11:00:00 │
│ 15 │青菜网 │7.2 │15:00:00 │10:00:00 │
│ 21 │去啥网 │0 │16:00:00 │11:00:00 │
│ 26 │汽车网 │0 │16:00:00 │11:00:00 │
│ 28 │火箭网 │0 │15:00:00 │10:00:00 │
│ 34 │卫星网 │11.2 │16:40:00 │11:20:00 │
└─────────────────────────────┴────────────────────────────────┴───────────────────────────────────────┴───────────────────────────────────┴───────────────────────────────────────────────┘
2021-03-18 17:33:54,570 2377 INFO demo loader: DBLoader <- &.data.demo.json::_id loader_querys: 1 loader_rows: 6
2021-03-18 17:33:54,570 2377 INFO demo join_count: 2 join_querys: 14 join_rows: 13
2021-03-18 17:33:54,571 2377 INFO demo outputer: DBInsertOutputer -> &.stdio.&1::site_id outputer_querys: 0 outputer_operators: 1 outputer_load_rows: 0 outputer_rows: 6
2021-03-18 17:33:54,571 2377 INFO demo finish examples/demo/demo.json demo 96.28ms
License
syncany uses the MIT license, see LICENSE file for the details.
Metadata
Release files for syncany 0.2.30
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| syncany-0.2.30.tar.gz | 123.8 kB | Without provenance | Details for syncany-0.2.30.tar.gz |
Release files / syncany-0.2.30.tar.gz
| Download URL | syncany-0.2.30.tar.gz |
|---|---|
| Size | 123.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
d87d58e2e2c6bb41e8d7982669c4c5ff0e6f4657af076d8739e4db39acb76db3
|
|
BLAKE2b-256 checksum How to use checksums |
4ec587de0c655d55382b53610fa68ce2af6769d4aa52965f057356dd8674f959
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.1
|
Security for syncany 0.2.30
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.