Skip to content

qross-io/PQL

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

96 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PQL 一种简单优雅的数据处理语言

PQL 是一种跨数据源的过程化查询语言(Procedural Query Language),是一种运行在 JVM 上的中间件语言。PQL 的门槛极低,会 SQL 即可编写数据处理程序。PQL 旨在提供一种最简单的方式对数据处理过程的各种查询语句进行封装,让开发过程更专注于业务逻辑。PQL 中集成了大量附加功能,所有相关功能都可用一条语句实现,简单高效。
PQL 不仅可应用于数据开发(特别是多数据源场景下数据流转非常方便),还可应用于后端开发和模板引擎等场景,可极大简化代码,更简单的处理和呈现数据。PQL 清晰的代码格式易于规范开发流程,方便统一管理。

PQL 概览

PQL 看起来很像存储过程。每条语句使用分号;结尾,更多语法规则见PQL 基本语法

  1. PQL 的 Hello World
    PRINT 'Hello World!';
  1. PQL 支持连接任意 JDBC 数据源并顺序执行 SQL 语句,例如:
    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;
  1. 跨数据源数据流转非常轻松:
    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);
  1. 提供中间数据库缓存处理过程中的数据:
    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;       
  1. 可无障碍使用 JSON 数据
    OUTPUT {
        "data": ${{ SELECT * FROM table1 }},
        "count": @COUNT_OF_LAST_SELECT
    };
  1. 支持各种形式的变量表达式嵌入以对数据进行再加工:
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); 
  1. 支持条件控制语句 IFCASE
    IF $i > 1 THEN
        PRINT 'greater than 1.';
    ELSIF $i < 1 THEN
        PRINT 'less then 1.';
    ELSE
        PRINT 'equals 0.';
    END IF;
  1. 支持 FORWHILE 循环:
    FOR $id, $name IN (SELECT id, name FROM table3) LOOP
        PRINT $id;
        PRINT $name;
        SLEEP 1 SECOND;
    END LOOP;
  1. 支持请求数据接口发送邮件
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";
  1. 支持 ExcelCSVTXT 等文件的读写操作:
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 项目中使用,也可以保存为独立的脚本文件运行。更多更强大的功能请参阅各语句对应的文档。

PQL 应用

统一接口 OneApi

OneApi 是 PQL 的一种应用,可以通过 PQL 编辑 Web 服务的接口,以帮助后端工程师减少大量的重复代码编写工作,快速实现业务逻辑。请参阅 OneApi 文档获取更多信息。

模板引擎 Voyager

Voyager 是 PQL 的另一个应用,和 OneApi 一样,也是应用于 Web 开发。其同类是 FreeMarker 或 Thymeleaf,不过更简单直接,不需要记各种标记语法,直接在网页 HTML 代码中写 SQL 语句进行查询并输出数据。请参阅 Voyager 文档获取更多信息。

任务调度工具 Keeper

Keeper 是一个轻量级但功能强大的任务调度工具,支持运行 PQL 任务,也支持通过 PQL 扩展 Keeper,如事件、依赖等。请参阅 Keeper 文档获取更多信息。

数据管理平台 Master

Master 是一个综合各种数据开发相关功能的管理平台,可以在上面编写 PQL 并直接运行、部署调度任务、管理服务接口等。请参阅Master文档获取更多信息。

PQL 文档目录

PQL 技术支持

PQL 语言免费使用,有任何问题均可联系作者或留言。PQL 每月发布一个新版本,最新版本 1.3.0

官方网站 www.qross.cn
作者邮箱 wu@qross.io

About

An easy and powerful middleware language to organize SQL and process data.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published