PQL 快速入门
PQL基础
数据流转
输出文件
PQL 中的语句
分支和循环
更优雅的数据操作
PQL 高级特性
系统函数
自定义函数
扩展操作
其他语言相关
附录
PQL 是一种跨数据源的过程化查询语言(Procedural Query Language),是一种运行在 JVM 上的中间件语言。PQL 的门槛极低,会 SQL 即可编写数据处理程序。PQL 旨在提供一种最简单的方式对数据处理过程的各种查询语句进行封装,让开发过程更专注于业务逻辑。PQL 中集成了大量附加功能,所有相关功能都可用一条语句实现,简单高效。PQL 不仅可应用于数据开发(特别是多数据源场景下数据流转非常方便),还可应用于后端开发和模板引擎等场景,可极大简化代码,更简单的处理和呈现数据。PQL 清晰的代码格式易于规范开发流程,方便统一管理。
PQL 源码地址 https://github.com/qross-io/PQL,中央仓库依赖地址 io.qross:pql:2.5.0,因功能已经非常稳定,不定期更新。
PQL 看起来很像存储过程。每条语句使用分号;
结尾,详细语法规则见 PQL 基本语法
PQL 的 Hello World
:
PRINT 'Hello World!';
PQL 支持连接任意 JDBC 数据源并顺序执行 SQL 语句,例如:
xxxxxxxxxx
OPEN mysql.qross;
INSERT INTO scores (name, score) VALUES ('Tom', 89);
UPDATE students SET age=18 WHERE id=1;
SELECT * FROM scores ORDER BY score LIMIT 10;
跨数据源数据流转非常轻松:
xxxxxxxxxx
OPEN hive.cluster1;
GET # SELECT name, COUNT(0) AS amount FROM table1 GROUP BY name;
SAVE TO mysql.result;
PUT # INSERT INTO table2 (name, amount) VALUES (&name, #amount);
提供中间数据库缓存处理过程中的数据:
xxxxxxxxxx
OPEN mysql.db1;
CACHE 'table1' # SELECT id, name FROM table1;
OPEN mysql.db2;
CACHE 'table2' # SELECT id, score FROM table2;
OPEN CACHE;
SELECT A.id, A.name, B.score FROM table1 A INNER JOIN table2 B ON A.id=B.id;
可无障碍使用 JSON 数据:
xxxxxxxxxx
OUTPUT {
"data": ${{ SELECT * FROM table1 }},
"count": @COUNT_OF_LAST_SELECT
};
xxxxxxxxxx
SET $name := SELECT name FROM table1 WHERE id=#{id};
SELECT * FROM table2 WHERE name=$name AND create_time>=${ @NOW MINUS 1 DAY }
-> INSERT IF EMPTY (name, score) VALUES ('N/A', 0);
xxxxxxxxxx
IF $i > 1 THEN
PRINT 'greater than 1.';
ELSIF $i < 1 THEN
PRINT 'less then 1.';
ELSE
PRINT 'equals 0.';
END IF;
xxxxxxxxxx
FOR $id, $name IN (SELECT id, name FROM table3) LOOP
PRINT $id;
PRINT $name;
SLEEP 1 SECOND;
END LOOP;
REQUEST JSON API 'http://www.domain.com/api?id=1'
PARSE '/data' AS TABLE;
SEND MAIL "test mail"
CONTENT "hello world"
TO "user@domain.com";
xxxxxxxxxx
OPEN mysql.db1;
GET # SELECT * FROM table1;
SAVE AS NEW EXCEL "example.xlsx" USE TEMPLATE "template.xlsx";
PREP # INSERT INTO sheet1 (A, B, C) VALUES ('姓名', '年龄', '分数');
PUT # INSERT INTO sheet1 ROW 2 (A, B, C) VALUES (id, '#name', &title);
PQL 的最大的特点就是“简单”,可以在你的任何 Java 或 Scala 项目中使用,也可以保存为独立的脚本文件运行。更多更强大的功能请参阅各语句对应的文档。
参考链接