Ibis:一个 API 打通 20 多种数据引擎的 Python 库

Ibis:一个 API 打通 20 多种数据引擎的 Python 库

最近在整理数据分析工具时,发现一个项目叫 Ibis。它拿到了 6,500 多 Star,定位是可移植的 Python dataframe 库。简单理解就是,写同样的 Python 代码,底层可以跑在 DuckDB、PostgreSQL、BigQuery、Snowflake 等 20 多种引擎上。

正文顶部截图

它解决了一个老问题

做数据分析的人经常遇到这种场景:本地用 pandas 或 Polars 跑小数据很顺,但数据量一大就得换到数据库或数仓。这时候问题来了,每个引擎的 API 都不一样。从 pandas 切到 Spark 或 BigQuery,代码基本要重写。

Ibis 的思路是提供统一的 dataframe API,分组、过滤、聚合这些操作的写法不变,只改一行 ibis.set_backend() 就能切换底层引擎。本地迭代用 DuckDB,上线部署切到 Snowflake,逻辑代码不用动。

这个设计意图很明确:降低多后端切换的迁移成本。

核心能力

从文档来看,Ibis 有几个实用的特性:

Python 和 SQL 混写

Ibis 会把 dataframe 表达式编译成 SQL。你可以在 Python 里写 group_byagg,然后调用 ibis.to_sql() 查看生成的 SQL。反过来也能在 Python 代码里直接嵌入 SQL 字符串,Ibis 会把它包装成 dataframe 继续链式操作。

惰性求值

默认是惰性执行,不会每次操作都触发计算,适合构建复杂的数据管道。也支持交互模式,探索数据时能看到即时结果。

覆盖够广的后端

支持 20 多个后端,从本地引擎到云数仓都有:

  • 本地/嵌入式:DuckDB、Polars、DataFusion、SQLite
  • 云数仓:BigQuery、Snowflake、Databricks
  • 传统数据库:PostgreSQL、MySQL、Oracle、SQL Server
  • 流处理:Apache Flink
  • 其他:ClickHouse、Trino、Athena 等

README区域截图

实际怎么用

安装很简单,带 DuckDB 和示例数据:

pip install 'ibis-framework[duckdb,examples]'

然后就能用了:

import ibis
ibis.options.interactive = True

t = ibis.examples.penguins.fetch()
g = t.group_by("species", "island").agg(count=t.count()).order_by("count")

想切到别的后端,比如 Polars:

ibis.set_backend("polars")

或者连到 PostgreSQL:

con = ibis.postgres.connect(host="...", database="...")

切换后前面的 dataframe 操作代码基本不用改。

适合谁用

如果你是数据工程师或分析师,工作中需要在本地开发和生产环境之间频繁切换,Ibis 能帮你减少不少重复代码。如果你已经在用 DuckDB 或 Polars 做本地分析,偶尔需要把同样逻辑丢到云数仓跑,这个库很对胃口。

不过也要注意,Ibis 覆盖的后端虽多,但不同引擎的 SQL 方言有差异,某些复杂查询可能无法完全通用。建议先在目标后端做充分测试。

这个项目还在活跃开发中,代码以 Apache 2.0 协议开源。对统一 dataframe API 感兴趣的人可以看看。

posted @ 2026-06-08 11:18  小飞技术快餐  阅读(4)  评论(0)    收藏  举报