82 个版本 (41 个稳定版)

2.11.0 2024 年 5 月 20 日
2.10.0 2024 年 3 月 8 日
2.3.0 2023 年 12 月 29 日
1.18.0-beta.22023 年 11 月 12 日
0.0.1 2020 年 12 月 17 日

编码 中排名 #223

Download history 312/week @ 2024-05-17 32/week @ 2024-05-24 6/week @ 2024-06-28 110/week @ 2024-07-05 267/week @ 2024-07-26 41/week @ 2024-08-02

每月下载量 308

MIT/ApacheGPL-3.0 许可协议

710KB
13K SLoC

Chewdata

CI Coverage semantic-release

此应用程序是一个轻量级的 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"

入门

从源代码设置

要求

执行命令

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,您需要将其注入为 JsonYaml 格式

示例

[
 {
    "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