Star 5.3k!纯Python开发的高效SQL 解析器!

目前从事大数据相关的开发,都离不开SQL,不管是关系型数据库还是非关系型数据,在做不同数据库间迁移或者转换的时候都会用到SQL转换。今天来为大家分享一个有趣的开源项目,SQLGlot,一个纯Python开发的SQL转换器,目前GitHub上已经5.3k星了,感兴趣可以关注看看。

项目介绍

SQLGlot 是一个全面的 SQL 解析器、转译器、优化器和引擎,纯由Python开发。

该项目可以用于格式化 SQL 或在 DuckDB、Presto/Trino、Spark/Databricks、Snowflake 和 BigQuery 等 21 种不同的方言之间进行转换。其目标是读取多种 SQL 输入,并在目标方言中输出正确语法和语义上的 SQL。这是一个非常全面的通用 SQL 解析器,具有强大的测试套件。它还相当高效,并且纯粹使用 Python 编写。可以轻松定制解析器、分析查询、遍历表达式树,并以程序方式构建 SQL。语法错误会被突出显示,方言不兼容性则会根据配置发出警告或引发。然而,SQLGlot 并不旨在成为 SQL 验证器,因此可能无法检测到某些语法错误。

GitHub地址:GitHub - tobymao/sqlglot: Python SQL Parser and Transpiler

官方文档:sqlglot API documentation

使用安装

使用pip安装:

pip3 install "sqlglot[rs]"

# Without Rust tokenizer (slower):
# pip3 install sqlglot

使用案例

格式转换

SQLGlot可以轻松从一种方言翻译成另一种方言。例如,日期/时间函数因方言而异,并且可能难以处理:

import sqlglot
sqlglot.transpile("SELECT EPOCH_MS(1618088028295)", read="duckdb", write="hive")[0]
'SELECT FROM_UNIXTIME(1618088028295 / POW(10, 3))'

SQLGlot 甚至可以转换自定义时间格式:

import sqlglot
sqlglot.transpile("SELECT STRFTIME(x, '%y-%-m-%S')", read="duckdb", write="hive")[0]
"SELECT DATE_FORMAT(x, 'yy-M-ss')"

标识符分隔符和数据类型也可以翻译:

import sqlglot

# Spark SQL requires backticks (`) for delimited identifiers and uses `FLOAT` over `REAL`
sql = """WITH baz AS (SELECT a, c FROM foo WHERE a = 1) SELECT f.a, b.b, baz.c, CAST("b"."a" AS REAL) d FROM foo f JOIN bar b ON f.a = b.a LEFT JOIN baz ON f.a = baz.a"""

# Transl
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Halo 咯咯

有你的支持我会更加努力。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值