4 个版本
0.1.4 | 2023年3月9日 |
---|---|
0.1.2 | 2023年2月17日 |
0.1.1 | 2023年2月9日 |
0.1.0 | 2023年2月9日 |
#2383 in 数据库接口
710KB
18K SLoC
QueryScript
QueryScript 是一种强类型编程语言,基于 SQL 构建。它提供现代工具、模块化和与流行关系数据库的集成。QueryScript 适用于应用业务逻辑、转换、ETL 和可视化。
- SQL 和更多。QueryScript 是一种功能强大的编程语言,具有变量、函数和模块。SQL 是语言中的第一类概念。
- 一次编写,到处运行。 QueryScript 会检查您的数据模型和查询,确保您的代码无需移植即可在任何数据库后端上运行。
- 性能始终如一。 QueryScript 是用 Rust 编写的,可以在您的 Typescript 和 Python 应用程序中本地运行。它将尽可能多的计算推向底层的数据库。
下面,我们将通过一些示例和安装说明进行介绍。您可以在本地运行 QueryScript,这使得在像 VSCode 这样的工具中进行开发变得简单有趣。有关语言更详细的介绍,请访问 QueryScript 网站。
示例
这是一个 QueryScript 的快速示例
-- Variables (including relations) are namespaced and can be imported. The below queries will
-- work for any definition of `users` and `events` as long as they typecheck.
import users, events from schema;
-- You can define variables (including scalars and relations)
-- using `let <name> [<type>] = <expr>`. These expressions are
-- lazily evaluated (and potentially inlined), so there is no
-- cost to defining them.
let active_users = SELECT * FROM users WHERE active;
-- You can run queries inline to help with debugging
SELECT COUNT(*) FROM active_users;
-- You can define functions that operate over values. Just like
-- variables, functions can be inlined and pushed down into the
-- target database, or evaluated directly.
fn username(user_id bigint) {
SELECT name FROM active_users WHERE id = user_id
}
-- Find the users with the most events
SELECT username(user_id), COUNT(*) FROM events GROUP BY 1 ORDER BY 2 DESC LIMIT 10;
-- Find the users who are at risk of churn
SELECT username(user_id), MAX(ts) FROM events GROUP BY 1 HAVING MAX(ts) < NOW() - INTERVAL 1 MONTH;
-- You can also define functions over relations
fn most_popular_events(events) {
SELECT name, COUNT(*) num FROM events ORDER BY 2 DESC
}
-- And see the most popular events globally
most_popular_events(events);
-- Or per user (this will return a sorted array of events
-- for each user)
SELECT username(user_id), most_popular_events(e) FROM events e GROUP BY 1;
安装
目前,安装 QueryScript 的唯一方法是 从源代码构建。我们将在未来几周内启用更流畅的安装方式。
从源代码构建
要从源代码构建 QueryScript,您需要 Git、Rust、Clang++。
git clone https://github.com/qscl/queryscript.git
cd queryscript
git submodule update --init
cargo build --release
QueryScript 编译器将在 target/release/qs
处可用。
构建开发环境
如果您想为 QueryScript 做贡献或进行其他修改,您还需要一些额外的依赖项:Python >= 3.7、Python venv、Git LFS、Node.js、Yarn 和 Docker Compose。
首先,运行上述命令(尽管您可以跳过cargo build --release
)。然后,运行
make develop
除了编译Rust库和在调试模式下编译qs
二进制文件外,此命令还将
- 在虚拟环境中设置一个名为
qsutils
的Python包,其中包含一些用于下载测试数据的实用脚本 - 在虚拟环境中安装pre-commit钩子。
- 安装VSCode扩展的依赖并编译它。
- 通过
git-lfs
下载测试文件
如果您打算做出贡献,请运行make develop
。您可以使用make test
运行测试套件。
依赖项
~43–78MB
~1.5M SLoC