82 个版本 (41 个稳定版)
2.11.0 | 2024 年 5 月 20 日 |
---|---|
2.10.0 | 2024 年 3 月 8 日 |
2.3.0 | 2023 年 12 月 29 日 |
1.18.0-beta.2 | 2023 年 11 月 12 日 |
0.0.1 | 2020 年 12 月 17 日 |
在 编码 中排名 #223
每月下载量 308 次
710KB
13K SLoC
Chewdata
此应用程序是一个轻量级的 ETL,可以用作系统之间的连接器
功能 | 值 | 描述 |
---|---|---|
生成数据 | - | 为测试生成数据 |
支持的格式 | json [E] , jsonl [E] , csv [D] , toml [D] , xml [D] , yaml [E] , text [E] , parquet [D] |
在这些格式中读写 |
多连接器 | mongodb [D] , bucket [D], curl [D] , psql [D], local [E], io [E], inmemory [E] |
读取/写入/清理数据 |
多 HTTP 认证 | basic [D] , bearer [D], jwt [D] |
为 curl 提供不同的认证方式 |
转换数据 | tera [E] | 在飞行中转换数据 |
允许的配置格式 | json [E], yaml [E] |
项目需要一个输入作业配置 |
并行或顺序模式读取数据 | cursor [E] , offset [E] |
使用此类型的分页器,可以以不同的方式读取数据 |
应用程序性能监控 (APM) | apm [D] |
将 APM 日志发送到 Jaeger |
[E] - 默认启用功能。使用
--no-default-features
参数移除默认启用的所有功能。【D】- 功能
D
禁用,必须使用--features
参数启用。
更多信息
- 只需 rustup
- 无垃圾回收器
- 并行工作
- 跨平台
- 使用 async/await 以零成本进行并发执行
- 并行读取本地或桶中的多个文件
- 使用 S3 Select 在多个 csv/json/parquet 文件中搜索数据
- 可部署到 AWS Lambda
- 配置易于版本控制
- 可生成用于测试目的的实时数据
- 控制和验证数据。在专用流中处理错误和有效数据
- 仅启用所需功能:--no-default-features --features "toml psql"
入门
从源代码设置
要求
- Rust
- Docker 和 Docker-compose 用于在本地测试代码
执行命令
git clone https://github.com/jmfiaschi/chewdata.git chewdata
cd chewdata
cp .env.dev .env
vim .env // Edit the .env file
make build
make unit-tests
make integration-tests
如果所有测试都通过,则项目就绪。阅读 Makefile 以了解您可以使用哪些快捷方式。
如果您想通过此部分了解一些示例,请进入 ./examples
从 cargo 包设置
默认安装
此命令将安装具有所有功能的该项目。
cargo install chewdata
最小功能
如果您只需要读取/写入 json 文件,将其转换并存储到本地环境中。
cargo install chewdata --no-default-features
自定义功能
如果您想指定要添加到安装中的某些功能
cargo install chewdata --no-default-features --features "xml bucket"
请参阅 功能文档。
如何更改日志级别
如果您需要更改命令的日志级别,您需要在安装时定义它。
cargo install chewdata --no-default-features --features "tracing/release_max_level_info"
echo '{"field1":"value1"}' | RUST_LOG=trace chewdata '[{"type":"reader","document":{"type":"json"},"connector":{"type":"io"}},{"type":"writer","document":{"type":"json"},"connector":{"type":"io"}}]'
如果您想过滤日志,您可以使用来自 tracing_subscriber 的指令语法。
cargo install chewdata --no-default-features --features "tracing/release_max_level_trace"
echo '{"field1":"value1"}' | RUST_LOG=chewdata=trace chewdata '[{"type":"reader","document":{"type":"json"},"connector":{"type":"io"}},{"type":"writer","document":{"type":"json"},"connector":{"type":"io"}}]'
运行
首先,您可以使用选项 --help
检查命令的工作方式
chewdata --help
...
USAGE:
chewdata [OPTIONS] [JSON]
FLAGS:
-h, --help Prints help information
-V, --version Prints version information
OPTIONS:
-f, --file <FILE> Init steps with file configuration in input
ARGS:
<JSON> Init steps with a json/hjson configuration in input
无配置
可以在没有配置的情况下运行命令,应用程序将等待您输入 json
数据。默认情况下,程序将 json 数据写入输出,并在您输入空值时停止程序。
$ cargo run
$ [{"key":"value"},{"name":"test"}]
$ --enter--
[{"key":"value"},{"name":"test"}]
另一个无配置的示例,带有文件输入
$ cat ./data/multi_lines.json | cargo run
[{...}]
或
$ cat ./data/multi_lines.json | make run
[{...}]
或
$ cat ./data/multi_lines.json | chewdata
[{...}]
带配置
配置对于自定义步骤列表很有用。它支持 hjson
格式,以便对其进行增强。
$ cat ./data/multi_lines.csv | cargo run '[{"type":"reader","document":{"type":"csv"}},{"type":"writer"}]'
[{...}] // Will transform the csv data into json format
或
$ cat ./data/multi_lines.csv | make run json='[{\"type\":\"reader\",\"document\":{\"type\":\"csv\"}},{\"type\":\"writer\"}]'
[{...}] // Will transform the csv data into json format
或
$ cat ./data/multi_lines.csv | chewdata '[{"type":"reader","document":{"type":"csv"}},{"type":"writer"}]'
[{...}] // Will transform the csv data into json format
另一个示例,带有文件配置的参数
$ echo '[{"type":"reader","connector":{"type":"io"},"document":{"type":"csv"}},{"type":"writer"}]' > my_etl.conf.json
$ cat ./data/multi_lines.csv | cargo run -- --file my_etl.conf.json
[{...}]
或
$ echo '[{"type":"reader","connector":{"type":"io"},"document":{"type":"csv"}},{"type":"writer"}]' > my_etl.conf.json
$ cat ./data/multi_lines.csv | make run file=my_etl.conf.json
[{...}]
或
$ echo '[{"type":"reader","connector":{"type":"io"},"document":{"type":"csv"}},{"type":"writer"}]' > my_etl.conf.json
$ cat ./data/multi_lines.csv | chewdata --file my_etl.conf.json
[{...}]
PS:您可以将 Json 配置文件替换为 Yaml 格式。
链式命令
可以链式使用 chewdata 程序
task_A=$(echo '{"variable": "a"}' | chewdata '[{"type":"r"},{"type":"transformer","actions":[{"field":"/","pattern":"{{ input | json_encode() }}"},{"field":"value","pattern":"10"}]},{"type":"w", "doc":{"type":"jsonl"}}]') &&\
task_B=$(echo '{"variable": "b"}' | chewdata '[{"type":"r"},{"type":"transformer","actions":[{"field":"/","pattern":"{{ input | json_encode() }}"},{"field":"value","pattern":"20"}]},{"type":"w", "doc":{"type":"jsonl"}}]') &&\
echo $task_A | VAR_B=$task_B chewdata '[{"type":"r"},{"type":"transformer","actions":[{"field":"var_b","pattern":"{{ get_env(name=\"VAR_B\") }}"},{"field":"result","pattern":"{{ output.var_b.value * input.value }}"},{"field":"var_b","type":"remove"}]},{"type":"w"}]'
[{"result":200}]
它是如何工作的?
此程序执行配置文件中的 steps
,您需要将其注入为 Json
或 Yaml
格式
示例
[
{
"type": "erase",
"connector": {
"type": "local",
"path": "./my_file.out.csv"
}
},
{
"type": "reader",
"connector": {
"type": "local",
"path": "./my_file.csv"
}
},
{
"type": "writer",
"connector": {
"type": "local",
"path": "./my_file.out.csv"
}
},
...
]
这些 steps
按照顺序执行。
所有 steps
通过一个输入和输出上下文队列链接在一起。当一个步骤完成数据处理时,会创建一个新的上下文并将其发送到输出队列。下一个步骤将处理这个新的上下文。步骤1(上下文)-> Q1[上下文] -> 步骤N(上下文)-> QN[上下文] -> 步骤N+1(上下文)每个步骤都是异步执行的。每个队列都有一个限制,可以在步骤的配置中进行自定义。
检查模块 step
,以查看可用的步骤及其配置列表。检查文件夹 /examples,以了解如何使用和构建配置文件的示例。
步骤及其配置列表
如何贡献?
遵循 GitHub 流程。
遵循 语义发布规范
在代码修改后,请运行所有测试。
make test
有用链接
依赖项
~23–51MB
~852K SLoC