基本语法

Query DSL(Domain Specific Language) 用来描述数据查询条件,适用基于数据库实现的数据分析引擎,如 Xu 等。

数据结构

数据查询的数据类型为 Object QueryDSL,通过 select, wheres 等字段描述查询条件,解析器将其转换为对应的 SQL语句

数据表 service :

idindustriescityscorecreated_atupdated_at
1"互联网"北京992021-10-03 13:40:52NULL
2"互联网"上海682021-10-03 13:40:52NULL
3"互联网"北京922021-10-03 13:40:52NULL
4"互联网"上海872021-10-03 13:40:52NULL
5"互联网"北京712021-10-03 13:46:06NULL

输入 Query DSL:

function Service() {
var query = new Query();
var data = query.Get({
comment: "统计各行业最高分",
select: ["industries", "city", ":MAX(score) as high_score"],
from: "service",
wheres: [
{ ":created_at": "创建时间", ">=": "2021-01-01" },
{ ":created_at": "创建时间", "<=": "2025-01-01" },
{ ":updated_at": "更新时间", is: "null" },
{
wheres: [
{ ":type": "类型", "=": 1 },
{ "or:type": "或类型", "=": 2 },
],
},
],
orders: "high_score desc",
limit: 100,
groups: ["industries", "city"],
});
return data;
}

解析后的 SQL语句 为 (MySQL 8):

SELECT `industries`, `city`, MAX(`score`) AS `high_score`
FROM `service`
WHERE `created_at` >= '2021-01-01'
AND `created_at` <= '2025-01-01'
AND `updated_at` is null
AND (`type` = ?)
GROUP BY `industries`, `city`
ORDER BY `high_score` DESC

输出:

industriescityhigh_score
旅游北京99
教育北京99
旅游上海87
教育上海87

Object QueryDSL 字段说明

字段类型说明必填项
selectArray\<Field Expression>选择字段列表 文档
fromString查询数据表名称或数据模型 文档
wheresArray\<Object Where>数据查询条件 文档
ordersArray\<Object Order>排序条件 文档
offsetInt记录开始位置 文档
limitInt读取数据的数量 文档
pageInt分页查询当前页面页码 文档
pagesizeInt每页读取记录数量 文档
data-onlyBool设定为 true, 查询结果为 Array\<Object Record>; 默认为 false, 查询结果为 Array\<Object Paginate>, 仅在设定 pagepagesize时有效。
groupsArray\<Object Group>聚合字段和统计层级设置。 文档
havingsArray\<Object Having>聚合查询结果筛选, 仅在设定 groups 时有效。文档
unionsArray\<Object QueryDSL>联合查询。多个查询将结果合并为一张表 文档
queryObject QueryDSL子查询。按 QueryDSL 描述查询逻辑,生成一张二维数据表或数值。 查看子查询文档
joinsArray\<Object Join>表连接。连接数据量较大的数据表时 不推荐使用文档
sqlObject SQLSQL 语句。非必要,勿使用文档
commentString查询条件注释,用于帮助理解查询条件逻辑和在开发平台中呈现。

基本语法

Query DSL(Domain Specific Language) 用来描述数据查询条件,适用基于数据库实现的数据分析引擎,如 Xu 等。

数据结构

数据查询的数据类型为 Object QueryDSL,通过 select, wheres 等字段描述查询条件,解析器将其转换为对应的 SQL语句

数据表 service :

idindustriescityscorecreated_atupdated_at
1"互联网"北京992021-10-03 13:40:52NULL
2"互联网"上海682021-10-03 13:40:52NULL
3"互联网"北京922021-10-03 13:40:52NULL
4"互联网"上海872021-10-03 13:40:52NULL
5"互联网"北京712021-10-03 13:46:06NULL

输入 Query DSL:

function Service() {
var query = new Query();
var data = query.Get({
comment: "统计各行业最高分",
select: ["industries", "city", ":MAX(score) as high_score"],
from: "service",
wheres: [
{ ":created_at": "创建时间", ">=": "2021-01-01" },
{ ":created_at": "创建时间", "<=": "2025-01-01" },
{ ":updated_at": "更新时间", is: "null" },
{
wheres: [
{ ":type": "类型", "=": 1 },
{ "or:type": "或类型", "=": 2 },
],
},
],
orders: "high_score desc",
limit: 100,
groups: ["industries", "city"],
});
return data;
}

解析后的 SQL语句 为 (MySQL 8):

SELECT `industries`, `city`, MAX(`score`) AS `high_score`
FROM `service`
WHERE `created_at` >= '2021-01-01'
AND `created_at` <= '2025-01-01'
AND `updated_at` is null
AND (`type` = ?)
GROUP BY `industries`, `city`
ORDER BY `high_score` DESC

输出:

industriescityhigh_score
旅游北京99
教育北京99
旅游上海87
教育上海87

Object QueryDSL 字段说明

字段类型说明必填项
selectArray\<Field Expression>选择字段列表 文档
fromString查询数据表名称或数据模型 文档
wheresArray\<Object Where>数据查询条件 文档
ordersArray\<Object Order>排序条件 文档
offsetInt记录开始位置 文档
limitInt读取数据的数量 文档
pageInt分页查询当前页面页码 文档
pagesizeInt每页读取记录数量 文档
data-onlyBool设定为 true, 查询结果为 Array\<Object Record>; 默认为 false, 查询结果为 Array\<Object Paginate>, 仅在设定 pagepagesize时有效。
groupsArray\<Object Group>聚合字段和统计层级设置。 文档
havingsArray\<Object Having>聚合查询结果筛选, 仅在设定 groups 时有效。文档
unionsArray\<Object QueryDSL>联合查询。多个查询将结果合并为一张表 文档
queryObject QueryDSL子查询。按 QueryDSL 描述查询逻辑,生成一张二维数据表或数值。 查看子查询文档
joinsArray\<Object Join>表连接。连接数据量较大的数据表时 不推荐使用文档
sqlObject SQLSQL 语句。非必要,勿使用文档
commentString查询条件注释,用于帮助理解查询条件逻辑和在开发平台中呈现。