databow: 一个使用ADBC驱动程序查询任何数据库的Rust CLI工具
摘要
databow 是一个新的开源 Rust CLI 工具,提供统一的接口,可通过 ADBC 驱动程序查询任何数据库,支持超过30种数据库,包括 PostgreSQL、DuckDB 和 Snowflake。
暂无内容
查看缓存全文
缓存时间: 2026/06/05 11:06
# 介绍 databow
来源:https://columnar.tech/blog/introducing-databow/
TL;DR
databow 是一款全新的开源命令行工具,可用于查询任何拥有 ADBC 驱动的数据库。它基于 Rust 构建,为你提供统一、快速、现代的接口,连接整个数据栈中的 SQL 系统。使用 `uv tool install databow` 即可安装。
在典型的一天里,数据工程师可能需要查询本地嵌入式数据库、分布式云数据仓库以及企业级关系型数据库服务器——每个都有自己专属的 CLI。`psql`、`mysql`、`snowsql`、`bq`、`sqlite3`:标志不同、输出格式不同、各种怪癖也各不相同。在它们之间切换意味着要重新学习语法并重新格式化结果。GUI 工具固然存在,但过于笨重,且会让你脱离终端。
如果有一款快速、现代的 CLI 能够连接到任何数据库,那会怎样?
## 认识 databow
今天,我们很高兴地推出 **databow**——一款基于 ADBC(Arrow Database Connectivity)查询数据库的开源命令行工具。
databow 使用 Rust 构建,查询速度快,占用空间小。它能连接到任何拥有 ADBC 驱动的数据库,为你提供一个统一的接口,覆盖整个数据栈中的 SQL 系统。
## databow 能做什么
### 连接 30+ 种数据库
databow 可与任何拥有 ADBC 驱动的数据库配合使用,包括:
- **事务型数据库:**PostgreSQL、MySQL、MariaDB、SQLite、Oracle Database、Microsoft SQL Server、CockroachDB、YugabyteDB、TiDB
- **分析型数据库:**DuckDB、ClickHouse、Snowflake、BigQuery、Databricks、Amazon Redshift、Teradata
- **湖仓引擎:**Trino、Dremio、StarRocks、Apache Doris
- **时序数据库:**InfluxDB、TimescaleDB、GreptimeDB
随着 ADBC 生态的扩展,这个列表还在不断增长。
### 在交互式 SQL Shell 中运行查询
databow 提供现代化的 REPL,具备你期望的功能:
```
$ databow --driver duckdb
> SELECT * FROM 'sales.parquet' LIMIT 5;
┌────────────┬─────────┬──────────┐
│ date │ product │ revenue │
├────────────┼─────────┼──────────┤
│ 2026-01-15 │ Widget │ 1250.00 │
│ 2026-01-15 │ Gadget │ 890.50 │
│ 2026-01-16 │ Widget │ 1100.00 │
│ 2026-01-16 │ Gizmo │ 2340.00 │
│ 2026-01-17 │ Gadget │ 756.25 │
└────────────┴─────────┴──────────┘
```
- **语法高亮**,自动检测浅色/深色主题
- **多行 SQL 输入**,支持复杂查询
- **整洁对齐的表格**,列宽动态调整
- **命令历史**,方便导航之前的查询
### 导出结果
需要分享查询结果?直接导出为你需要的格式:
```
# 导出为 CSV
databow --driver postgresql --uri "postgres://localhost/analytics" \
--query "SELECT * FROM monthly_report" \
--output report.csv
# 导出为 JSON
databow --profile warehouse --query "SELECT * FROM users" \
--output users.json
# 导出为 Arrow IPC
databow --profile prod-db --query "SELECT * FROM events" \
--output events.arrow
```
### 为自动化赋能
databow 不仅适用于交互式使用,它也被设计成适合集成到脚本和流水线中:
```
# 直接执行查询
databow --driver duckdb --uri warehouse.db --query "SELECT count(*) FROM logs WHERE level = 'ERROR'"
# 从 SQL 文件读取
databow --driver postgresql --uri "postgres://localhost/analytics" \
--file daily_metrics.sql --output metrics.csv
# 从标准输入管道传入查询
echo "SELECT version()" | databow --driver postgresql --uri "$DATABASE_URL"
```
### 通过配置文件加载连接详情
厌倦了每次输入冗长的数据库连接字符串?将你的配置保存在 [ADBC 连接配置文件](https://cookbook.columnar.tech/use-adbc-connection-profiles-in-python/) 中,然后通过名称引用:
```
# 使用已保存的配置
databow --profile production-warehouse --query "SELECT * FROM orders"
```
## 为什么选择 ADBC
databow 基于 ADBC 构建——这是来自 Apache Arrow 项目的 Arrow 数据库连接标准。ADBC 提供了一种与供应商无关的数据库访问 API,类似于 JDBC 和 ODBC 之于传统连接。但 ADBC 从一开始就设计为以 Apache Arrow 格式传输数据。这意味着:
- **高效的数据传输:**结果以 Arrow 列式格式返回,当数据库原生支持 Arrow 时,完全避免了逐行序列化的开销。
- **一致的行为:**同一套 API 跨数据库工作。
- **不断增长的生态:**随着更多数据库添加 ADBC 驱动,databow 会自动支持它们。
通过构建在 ADBC 之上,databow 受益于整个 Arrow 社区的工作。当有新的数据库发布 ADBC 驱动时,databow 用户即可立即使用。
## 快速开始
databow 以单个二进制文件形式发布。使用 uv 或 Cargo 进行安装:
```
# 推荐:使用 uv 安装
uv tool install databow
# 替代方案:使用 Cargo 安装
cargo install databow
```
然后使用 [dbc](https://docs.columnar.tech/dbc/)——一款用于安装和管理 ADBC 驱动的命令行工具——为你的数据库安装 ADBC 驱动。例如,安装 DuckDB 的 ADBC 驱动:
```
dbc install duckdb
```
然后开始查询:
```
databow --driver duckdb
```
## 路线图
我们正在积极开发新功能,让 databow 更加强大:
- **点命令:**用于快速配置和探索的交互式命令
- **更多导出格式:**支持将结果写入 Parquet 等其他文件类型
- **结果集截断:**为大结果集设置可配置的限制,保持终端响应灵敏
- **数据类型显示:**在查询结果旁显示列数据类型,提供更好的模式可见性
相似文章
DuckDB: it's not quack science
DuckDB是一个开源嵌入式分析型数据库,支持直接查询文件、嵌入应用,并提供友好的SQL扩展,在数据分析场景下比传统Unix管道更高效。
@Huahuazo: 搞数据库的兄弟们,注意了——以后真不用再装一桌面的客户端了。 挖到一个宝藏工具 DBX,一个客户端直接打通所有主流数据库: ① MySQL、PostgreSQL、SQLite ② Redis、MongoDB、ClickHouse ③ 连国…
DBX 是一款轻量级多数据库客户端,支持 MySQL、PostgreSQL、Redis、MongoDB 等 60+ 数据库,安装包仅 15MB,内置 AI 助手可自然语言生成 SQL。
DuckDB 1.5.2 – 可在笔记本、服务器、浏览器中运行的 SQL 数据库
DuckDB 1.5.2 带来生产就绪的 DuckLake v1.0 湖仓格式、Iceberg 扩展改进、Jepsen 测试,以及支持文件存储的全新浏览器 Shell。
tursodatabase/turso
Turso Database 是一个用 Rust 编写的进程内 SQL 数据库,兼容 SQLite,具备 MVCC、变更数据捕获、向量支持以及多语言绑定功能。
dbt-labs/dbt-core
dbt Core v2.0 是一个基于 Rust 的彻底重写版本,目前处于 Alpha 阶段。它承诺实现更快的解析速度、更严格的语言规范以及可扩展的 Parquet 工件,使分析师和工程师的数据转换更加高效。