在数据驱动的时代,数据迁移和集成几乎是每个开发者和数据团队都会遇到的日常任务。无论是将生产数据库同步到数据仓库,还是在不同系统之间搬运数据,传统方案往往意味着编写大量代码、配置复杂的ETL工具,或者支付昂贵的SaaS费用。
今天要介绍的开源工具 ingestr,正是为了解决这个痛点而生。
什么是 ingestr?
ingestr 是一个命令行工具,允许你用单行命令将数据从任何数据源复制到任何目标,无需编写任何代码。
它的核心理念极其简单:指定一个来源、指定一个目标,剩下的交给 ingestr。
bash
ingestr ingest \
--source-uri 'postgresql://...' \
--source-table 'public.some_data' \
--dest-uri 'bigquery://...' \
--dest-table 'ingestr.some_data'
就这么简单。一行命令,数据就从 PostgreSQL 飞到了 BigQuery。
为什么需要 ingestr?
在 ingestr 出现之前,数据 ingestion 领域的工具生态存在明显的空白:
- 付费工具大多以 UI 驱动,UI 驱动的工作流对自动化数据管道很不友好。
- 开源替代品(如 Airbyte)同样以 UI 为主,而且还需要自己维护一套基础设施。
- 库级别的方案(如 dlt)虽然灵活,但最终你还是得写代码来搞定 ingestion。
ingestr 的团队在 2024 年初开始构建这个项目,目标是打造一个有主见的、最简单的数据摄入方式。你只需要告诉它源和目标在哪里,它就会帮你把数据搬过去。
事实证明这个方向是对的------ingestr 目前已经在 GitHub 上收获了 超过 3,700 颗星,被数百个组织内部使用。
核心特性
✨ 零代码,单命令
ingestr 最核心的价值就是零代码。你不需要写 Python 脚本、不需要配置 YAML 文件、不需要学习复杂的 DSL。只需要一条命令,数据就能从源端流向目标端。
➕ 增量加载
ingestr 支持三种增量加载模式:
- Append:追加新数据
- Merge:合并更新
- Delete+Insert:删除后插入
这意味着你不需要每次都全量同步整个表,只需摄入新增或变更的数据,大幅提升效率并降低成本。
🐍 单命令安装
安装 ingestr 非常简单。推荐使用 uv:
bash
pip install uv
uvx ingestr
或者全局安装:
bash
uv pip install --system ingestr
传统的 pip 安装也可以,但速度会慢一个数量级。
🐍 Python SDK
除了命令行,ingestr 还提供了 Python SDK,可以直接在 Python 代码中调用:
python
import ingestr
ingestr.ingest(
[{"id": 1, "name": "Ada"}, {"id": 2, "name": "Grace"}],
dest_uri="duckdb:///tmp/warehouse.duckdb",
dest_table="main.people",
)
支持 pandas DataFrame、Polars DataFrame、PyArrow Table 等多种数据格式,数据通过 Arrow IPC 流高效传输。
从 Python 到 Go:性能的重构
ingestr 最初是用 Python 构建的,原型只花了一个周末就做出来了。但随着用户规模的增长和数据集变大,Python 版本的性能瓶颈逐渐显现:
- Python 本身在处理大量数据时速度有限。
- 底层依赖的 dlt 在早期版本中性能也不够理想。
因此,ingestr 团队决定从零开始用 Go 重构,目标是打造更快、更可靠、更好用的数据摄入工具。重构后的 v1 版本在性能和可靠性上都有了质的飞跃。
支持的生态
ingestr 支持极为丰富的数据源和目标:
数据库:PostgreSQL、MySQL、SQL Server、BigQuery、Snowflake、Redshift、DuckDB、ClickHouse、MongoDB、Oracle、SQLite、Trino 等 20 多种。
对象存储与文件:S3、GCS、本地 CSV、JSONL、Parquet 等。
SaaS 平台:GitHub、Salesforce、Shopify、Slack、Stripe、Notion、Google Sheets、HubSpot、Zendesk 等数十个平台。
消息队列:Kafka、Kinesis 等。
无论是传统关系型数据库、云数据仓库,还是现代 SaaS 应用,ingestr 基本都能覆盖。
典型使用场景
ingestr 可以解决多种数据迁移和集成需求:
- 从遗留系统迁移到现代数据库,提升分析能力
- 将应用数据库与数据分析平台同步,支持批量或增量同步
- 数据库备份,确保数据安全
- 快速搭建测试或开发环境,轻松克隆现有数据库
- 支持需要实时数据更新的应用场景
由于 ingestr 是轻量级的 CLI 工具,你可以轻松地把它放进 cronjob、GitHub Actions、Airflow 或其他调度器中,快速获得内置的数据摄入能力。
总结
ingestr 是一款理念清晰、使用简单、生态丰富的开源数据摄入工具。它用最朴素的方式------一条命令------解决了数据迁移中最常见的问题。
如果你正在寻找一个零代码、轻量级、可自动化的数据迁移方案,ingestr 值得一试。
- GitHub:https://github.com/bruin-data/ingestr
- 文档:https://bruin-data.github.io/ingestr/
- 社区:Bruin Data Community Slack