开源的浏览器端 BI 工具,用于查询、可视化和分享来自多种 SQL 与 NoSQL 数据源的数据。
tobymao/sqlglot
纯 Python 编写的 SQL 解析、转译、优化与执行引擎,支持 30 多种方言互转。
- Star
- 9,764
- Fork
- 1,387
- 未关闭 Issue
- 13
- 最近提交
- 15小时前
这是什么?
SQLGlot 将 SQL 解析为表达式树,再生成目标方言的语句,因此可以在 DuckDB、Presto/Trino、Spark/Databricks、Snowflake、BigQuery 等方言之间互相转译。它还能格式化 SQL,尽力保留注释,并在语法错误或目标方言不支持某种写法时给出提示或报错。
除转译外,库还提供以编程方式构建和修改查询、遍历与改写语法树的 API,以及在提供 schema 信息时将查询改写为规范形式的优化器。内置的小型内存执行器可以直接在 Python 字典上运行 SQL,适合用于单元测试。用户可以通过继承或独立发布的插件包添加自定义方言。
项目不依赖任何第三方库,纯 Python 实现;另提供可选的 mypyc 编译版本(安装 sqlglot[c]),解析速度更快。
核心功能
- 01支持 30 多种 SQL 方言之间的查询转译。
- 02可格式化 SQL,并支持为所有标识符加引号。
- 03语法错误会给出行号和列号。
- 04目标方言不支持某写法时可发出警告或直接报错。
- 05提供构建、修改和改写 SQL 语法树的 Python API。
- 06内置查询优化器和基于 Python 字典的小型执行器。
适用场景
- 将分析查询从一个数仓引擎(如 Snowflake、BigQuery)迁移到另一个。
- 开发需要兼容多种数据库后端 SQL 的数据工具。
- 分析 SQL 语句,提取其中引用的表和字段。
- 在内存中的 Python 数据上为 SQL 逻辑编写单元测试。
快速上手
- 1
从 PyPI 安装 SQLGlot
pip3 install sqlglot - 2
在 Python 中将 Spark 查询转译为 DuckDB
python -c "import sqlglot; print(sqlglot.transpile('SELECT EPOCH_MS(1618088028295)', read='duckdb', write='hive')[0])"
使用前须知
- 解析器较为宽松,无效 SQL 可能被接受,只会在执行时失败。
- 部分方言之间的转译覆盖不完整,不支持的功能会以尽力而为的方式输出并给出警告。
收录于专题
标签
#sql#parser#transpiler#query-optimizer#data-engineering#python#bigquery#clickhouse#databricks#duckdb
常见问题
- sqlglot 是什么?
- 纯 Python 编写的 SQL 解析、转译、优化与执行引擎,支持 30 多种方言互转。 SQLGlot 将 SQL 解析为表达式树,再生成目标方言的语句,因此可以在 DuckDB、Presto/Trino、Spark/Databricks、Snowflake、BigQuery 等方言之间互相转译。它还能格式化 SQL,尽力保留注释,并在语法错误或目标方言不支持某种写法时给出提示或报错。
- sqlglot 可以免费使用吗?用的什么许可证?
- sqlglot 以 MIT 许可证开源。用于商业产品前,请先确认许可证条款。
- sqlglot 还在维护吗?
- 活跃维护中。sqlglot 最近一次提交是在 2026年11月6日。
- sqlglot 适合用来做什么?
- 将分析查询从一个数仓引擎(如 Snowflake、BigQuery)迁移到另一个。 开发需要兼容多种数据库后端 SQL 的数据工具。 分析 SQL 语句,提取其中引用的表和字段。 在内存中的 Python 数据上为 SQL 逻辑编写单元测试。
- sqlglot 怎么安装和运行?
- 从 PyPI 安装 SQLGlot: pip3 install sqlglot 在 Python 中将 Spark 查询转译为 DuckDB: python -c "import sqlglot; print(sqlglot.transpile('SELECT EPOCH_MS(1618088028295)', read='duckdb', write='hive')[0])"
- 在哪里获取 sqlglot?
- 源代码和安装说明在 GitHub 上:https://github.com/tobymao/sqlglot
概要由 AI 根据项目 README 生成;GitHub 数据每日更新。
相关项目
2.9万+19 本周4641PythonBSD-2-Clause维护活跃更新于 3天前
基于 Rust 和 WASM 的 SQL 转译工具,支持 30 多种 SQL 方言之间的解析、生成、转换与格式化。
999+1 本周76RustMIT更新于 4天前
用 Rust 原生实现的 Delta Lake 读写库,提供 Python 绑定,可配合 pandas 等数据工具使用。
3354+3 本周700RustApache-2.0维护活跃更新于 19小时前
一款命令行工具,用一条命令即可在数据库、文件和 SaaS 平台之间复制数据,无需编写代码。
4040+4 本周169GoOther更新于 20小时前
开源数据搬运平台,用于 ELT 管道,把 API、数据库和文件中的数据同步到数据仓库、数据湖和 AI 应用。
2.2万+38 本周5442PythonOther更新于 15小时前
开源事件数据平台,可自托管的 Segment 替代方案,用于采集事件并分发到数据仓库和各类工具。
5129+7 本周405TypeScriptMIT更新于 22小时前