databow: 一个使用ADBC驱动程序查询任何数据库的Rust CLI工具

Hacker News Top 工具

摘要

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

Lobsters Hottest

DuckDB是一个开源嵌入式分析型数据库,支持直接查询文件、嵌入应用,并提供友好的SQL扩展,在数据分析场景下比传统Unix管道更高效。

tursodatabase/turso

GitHub Trending (daily)

Turso Database 是一个用 Rust 编写的进程内 SQL 数据库,兼容 SQLite,具备 MVCC、变更数据捕获、向量支持以及多语言绑定功能。

dbt-labs/dbt-core

GitHub Trending (daily)

dbt Core v2.0 是一个基于 Rust 的彻底重写版本,目前处于 Alpha 阶段。它承诺实现更快的解析速度、更严格的语言规范以及可扩展的 Parquet 工件,使分析师和工程师的数据转换更加高效。