文档

TQL简介

更新时间:

TQL(Tag Query Language)整合分析提供的基于OLP的标签查询语言,实现基于标签的分析查询。TQL屏蔽了物理模型和存储,使用户更容易的使用标签用于分析查询。TQL兼容SQL ANSIC SELECT标准。

TQL简介

TQL只有select查询,语法定义如下:

SELECT [distinct] entityCode.tagCode, ...
FROM entityCode
where SQL_WHERE_CONDITION
group by SQL_GROUP_EXPR
[having SQL_HAVING_EXPR]
order by SQL_ORDER_EXPR
limit LIMIT, OFFSET;

标签一般定义为:entity.tag

关系一般定义为:link.entity.tag

简单查询

标签select的列不支持select *,TQL的查询语法兼容标准的SQL查询语法。

说明

本文以表格user为例,对TQL查询语句进行举例说明。

create table user (
  id int COMMENT '主键',
  name varchar(255) COMMENT '姓名',
  gender varchar(255) COMMENT '性别',
  category varchar(255) COMMENT '爱好'
);

  1. 简单select

    select user.age from user where user.id > 0;
  2. group by

    select count(user.category),user.category from user 
    group by user.category;
  3. window函数

    select count(user.category) over
    ( partition by user.category order by user.age) from user;
  4. 使用变量

    select user.age from user where user.age > ${age, number};

TQL使用举例

比如:

select user.name, user.gender from user where user.gender = 'man';

比如上句查询语句,通过将“man”设定为一个参数。

select user.name, user.gender from user where user.gender = ${gender, string, 'man'};

上面的变量有以下几层含义:

  • ${}:在语法上,$符号后面的内容用{}包裹,代表着此处是一个变量;

  • gender:代表此变量的名字为gender;

  • string:代表次变量的类型为string,可支持string、bool、number、tag四种,如果是tag,则为标签变量;

  • 'man':代表了默认值,当调用API时,没有传入参数则会默认设置为“man”。

特别的,类型和默认值都可以省略,比如:

${gender, string}           ---> ok
${gender}                   ---> ok
${gender,'man'}             ---> ok
${}                         ---> error
${gender, string, bad, bad} ---> error

普通变量

定义:${VAR_NAME[,TYPE, DEFAULT_VALUE]}

用例

替换查询变量

-- 变量名为name,类型为string,默认是jack。
select user.name from user where user.name = ${name, string, 'jack'};
-- 不设置默认值,如果调用API的时候不指定name的值,查询会报错。
select user.name from user where user.name = ${name, string};

替换select列表中的标签

-- 变量可以是查询列表中的column值,即标签的值。
select user.name, ${name} from user where user.name = 'jack' ;
-- 可以设置默认值, 注意并没有引号。
select user.name, ${name, user.gender} from user where user.name = 'jack' ;
-- 设置的类型会被忽略,效果和上一条一样。
select user.name, ${name, string, user.gender} from user where user.name = 'jack';

替换order by,group by,limit等

-- 设置group by的变量。
select user.name, user.gender from user where user.name = 'jack' group by ${g_var, user.name}; 
-- 设置order by的变量。
select user.name, user.gender from user where user.name = 'jack' order by ${o_var} ;
-- 设置limit的变量。
select user.name, user.gender from user where user.name = 'jack' limit ${l_var, 1000};

函数变量

变量除了可以替换查询条件中的字符串,数字等,同时也可以替换函数。

定义:$FUNC_NAME{ARGS...}

用例

只有函数

-- 替代的函数参数名为m_func,并在函数中写入了一个user.age作为参数。
-- m_func传入max,则解析为 max(user.age)。
-- m_func传入min,则解析为 min(use.age)。
select $m_func{user.age}, user.gender from user;

使用限制

  • 变量只能是数字,下划线(_),字母组成,且只能以字母开头,不区分大小写。

  • 变量的长度最多为199字符。

  • 变量不能是sql的任何关键字。

  • 变量的值是字符串,比如 where user.gender ='man', 变量记为 ${gender, string, 'man'}。

  • 变量的传值会被转义,不能使用sql关键字,或者if,case when等条件语句,函数变量的值中不允许有空格。

变量校验正则

/[a-zA-Z][\w]{0,199}/