语法支持
日志服务支持基础的 SELECT 查询,具体查询语法是
select_expr [, select_expr] ...
[WHERE where_condition]
[GROUP BY {col_name | expr}, ... ]
[ORDER BY {col_name | expr} [ASC | DESC], ...]
[LIMIT [offset,] row_count]
说明:SQL查询语法使用限制详见使用限制。
下面是一个查询语句示例
SELECT id,sum(cost) AS result
WHERE price>500
GROUP BY id
运算符
比较函数
运算符 |
含义 |
< |
小于 |
> |
大于 |
<= |
小于或等于 |
>= |
大于或等于 |
= |
等于 |
<> |
不等于 |
BETWEEN |
查询处于两个参数之间的数据 |
IS NULL or IS NOT NULL |
判断参数是否是Null值 |
逻辑运算函数
运算符 |
含义 |
AND |
只有左右运算数都是true时,结果才为true |
OR |
左右运算数任一个为true,结果为true |
NOT |
右侧运算数为false时,结果才为true |
真值表
a |
b |
a AND b |
a OR b |
TRUE |
TRUE |
TRUE |
TRUE |
TRUE |
FALSE |
FALSE |
TRUE |
TRUE |
NULL |
NULL |
TRUE |
FALSE |
TRUE |
FALSE |
TRUE |
FALSE |
FALSE |
FALSE |
FALSE |
FALSE |
NULL |
FALSE |
NULL |
NULL |
TRUE |
NULL |
TRUE |
NULL |
FALSE |
FALSE |
NULL |
数学计算函数
运算符 |
含义 |
+ |
两个参数相加 |
- |
两个参数相减 |
* |
两个参数相乘 |
/ |
两个参数相除求整数 |
% |
两个参数相除求余数 |
log10(x) |
返回以10为底,x的对数 |
round(x) |
x四舍五入 |
聚合函数
运算符 |
含义 |
示例 |
avg(x) |
计算x列的算数平均值 |
select avg(request_time) as avg_times |
count(*) |
表示所有的行数 |
select count(*) where method = GET |
max(x) |
返回最大值 |
select max(request_time) as max_times |
min(x) |
返回最小值 |
select min(request_time) as min_times |
sum(x) |
返回x列的和 |
select sum(request_time) as sum_times |
stats(x) |
返回x列的聚合计算结果,包括avg、max、min、sum等 |
- |
data_histogram(x,interval) |
根据指定间隔获取所有匹配的值 |
select data_histogram(timestamp) where status_code=200 |
percentiles |
指定分位符 |
percentiles=[0.25 , 0.5 ,0.75] |
其他函数
运算符 |
含义 |
示例 |
floor |
返回小于或等于指定数值表达式的最大整数,向下取整 |
select floor(num) as nt |
split |
按指定符号分割字符串,返回分割后的元素个数 |
select split(newtype,’,’) as nt |
trim |
用来移除掉一个字串中的字头或字尾 |
select trim(newtype) as nt |
log |
返回x的自然对数,x相对于基数e的对数 |
- |
log10 |
返回x的基数为10的对数 |
- |
substring |
用来截取字符串中的一部分字符 |
select floor(floor(substring(time,0,14)/100)/5)*5 as nt |
round |
返回数字表达式并四舍五入为指定的长度或精度 |
- |
sqrt |
用来求给定值的平方根 |
- |
concat_ws |
将多个字符串连接成一个字符串,但是可以一次性指定分隔符 |
- |
+ |
加运算 |
- |
- |
减运算 |
- |
* |
乘运算 |
- |
/ |
除运算 |
- |
date_format |
用于以不同的格式显示日期或时间数据 |
- |
coalesce |
返回最近的一个为非空值的值 |
select name, coalesce(age2, age1) as myAge |
if |
用于条件判断 |
select name, if(age <= 18, ‘Y’, ‘O’) as myGender |
percentile_ranks |
计算当前值按百分比计算所处在百分位位置 |
select percentile_ranks(age, 3, 8, 12, alias=rankAge) |
movingavg |
滑动平均或移动平均,预测时间序列 |
select income / 10 AS myincome, sum(income / 10) AS incomeSum, movingavg(field=incomeSum,window=3,alias=incomeSume_avg) |
rollingstd |
计算滚动标准差 |
select income / 10 AS myincome, sum(income / 10) AS incomeSum, rollingstd(field=incomeSum,window=2,alias=incomeSume_avg) |
parse |
将字符串转换为数字和日期和时间格式 |
select parse(hobby, ‘(?\S+)球’, ‘NOT_MATCH’) AS ballType, COUNT(_index) |
now |
返回当前的日期和时间 |
select * FROM myindex WHERE time >= date(date_add(date(now()), interval -100 day)) AND time <= now() |
date |
提取日期或日期/时间表达式的日期部分 |
select * WHERE time >= date(date_add(date(now()), interval -100 day)) AND time <= now() |
date_add |
向日期添加指定的时间间隔 |
select * WHERE time >= date(date_add(date(now()), interval -100 day)) AND time <= now() |
查询语法示例
查询说明 |
示例 |
术语聚合 |
SELECT COUNT(*) GROUP BY gender |
多重聚合 |
SELECT * GROUP BY (gender, state, age),(state),(age) |
范围聚合 |
SELECT COUNT (age) GROUP BY range(age, 20 , 25 , 30 , 35 , 40 ) |
日期直方图聚合 |
SELECT online GROUP BY date_histogram(field=‘insert_time’,‘interval’=‘1d’,‘alias’=‘yourAlias’,‘extended_bounds’=’{“min”:“1547083500000”,“max”:“1547343000000”}’,format=‘epoch_millis’) |
日期范围聚合 |
SELECT online GROUP BY date_histogram(field=‘insert_time’,‘interval’=‘1d’,‘alias’=‘yourAlias’,‘extended_bounds’=’{“min”:“1547083500000”,“max”:“1547343000000”}’,format=‘epoch_millis’) |
脚本化指标 |
SELECT scripted_metric( ’ map_script ’ = ’ yourMapScript ’ , ’ init_script ’ = ’ yourInitScript ’ , ’ combine_script ’ = ’ yourCombineScript ’ , ’ reduce_script ’ = ’ yourReduceScript ’ ) |
基本查询和条件 |
SELECT * ORDER BY balance DESC LIMIT 500 ;SELECT balance, include(’*Name’), exclude(‘lastName’) |