查询指标数据

最近更新时间:2025-12-04 12:05:51

我的收藏

完整语法

select * from query(model='模型名称',metric=[指标名称列表], group_by=[TimeDimension(日期维度名称,day),Dimension(维度名称)], where=[Dimension(维度名称)='维度值' AND TimeDimension(日期维度名称,day)='维度值'],order_by=
[TimeDimension(日期维度名称,grain) desc,Dimension(维度名称)], limit=10)
为方便后续语句举例说明,假设:
定义模型:order_model
定义指标:30daysOrderAmount
维度:product_name,取值(p001,p002)
性别:gender,取值(Female,Male)
时间维度:order_date,时间粒度为 day

函数

为了区分指标、普通维度、时间维度,SemQL 语句需要用不同函数标注处理。

Dimension 函数

Dimension(维度英文名)

TimeDimension 函数

TimeDimension(日期维度英文名,grain)
当模型中仅有一个时间维度时,可用关键字 TimeOutput 代替真实的日期维度名称,即 TimeOutput(grain)
参数 grain 为时间粒度,可选值:year,quarter,month,week,day,hour,minute,second。

Metric 函数

TimeDimension(指标英文名,Dimension(维度英文名))
Dimension 函数可以有多个,例如:TimeDimension(指标英文名,Dimension(维度英文名1),Dimension(维度英文名2))

metric 语句

METRIC 用来指定查询哪个指标,参数值为指标的英文名,多个指标用英文逗号分隔。
句法:
select * from query(metric=[指标1,指标2,指标3], group_by=[Dimension(维度1),Dimension(维度2)],limit=10)
示例:
--获取指标metric(30daysOrderAmount)10条数据
SELECT * FROM query(metric=[30daysOrderAmount],limit=10)

where 语句

where 子句用于指定 SQL 查询中数据的筛选条件,只返回满足条件的结果。
支持的操作符:
= 等于
<> 不等于
> 大于
< 小于
>= 大于等于
<= 小于等于
BETWEEN ... AND ... 在范围之间
IN (...) 在列表中
LIKE '模式' 模糊匹配
IS NULL 判空
AND、OR 逻辑与/或
NOT 逻辑非
句法:
--where语句后可跟多个表达式,多个表达式之间默认连接逻辑为AND
select * from query(metric=[指标1], where=[表达式1,表达式2)
--也可只跟一个表达式,表达式中包含AND/OR连接逻辑,注意与上面的区别
select * from query(metric=[指标1], where=[表达式1 AND 表达式2 or 表达式3)
示例:
--获取2025年指标metric(30daysOrderAmount),男性购买的商品名称包含洗发的数据,product_name分组
SELECT * FROM query(metric=[30daysOrderAmount],group_by=[Dimension(product_name)], where=[Dimension(product_name) like '%s洗发%s' and Dimension(gender) in ('Male')])
--上面的语句也可写为
SELECT * FROM query(metric=[30daysOrderAmount],group_by=[Dimension(product_name)], where=[Dimension(product_name) like '%s洗发%s',Dimension(gender) in ('Male')])


model 语句

model 用来指定查询哪个模型,仅查询维度值且不查询指标时使用该参数,参数值为模型的英文名,与 group_by 语句结合使用,不与 metric 语句共同使用。
句法:
select * from query(model='模型名', group_by=[Dimension(维度1),Dimension(维度2)]
示例:
--获取2025年男性购买的商品名称数据
SELECT * FROM query(model='order_model',group_by=[Dimension(product_name)],where=[Dimension(gender) in ('Male')])

group_by 语句

group_by 用于将查询结果按一个或多个字段进行分组,可以跟多个分组,之间用英文逗号分隔开。
参数 grain 为时间粒度,可选值: year, quarter, month, week, day, hour, minute, second。
句法:
SELECT * FROM query(metric=[指标1],group_by=[TimeDimension(日期维度名称,grain),Dimension(维度名称)]])
--如果该模型仅有一个时间维度,上述语句也可以写为
SELECT * FROM query(metric=[指标1],group_by=[TimeOutput(grain),Dimension(维度名称)]])
示例:
--获取2025年指标metric(30daysOrderAmount)根据性别gender和时间(月)分组数据
SELECT * FROM query(metric=[30daysOrderAmount],group_by=[TimeDimension(order_date,month),Dimension(gender)])
--如果该模型仅有一个时间维度order_date,上述语句也可以写为
SELECT * FROM query(metric=[30daysOrderAmount],group_by=[TimeOutput(month),Dimension(gender)])

order_by 语句

order_by 用来指定查询结果的排序方式,可以跟多个排序方式,之间用英文逗号分隔开,默认升序 asc。
参数 grain 为时间粒度,可选值: year, quarter, month, week, day, hour, minute, second。
句法:
SELECT * FROM query(metric=[指标1,指标2],order_by=[TimeDimension(日期维度名称,grain) desc,Dimension(维度名称)]])
--如果该模型仅有一个时间维度,上述语句也可以写为
SELECT * FROM query(metric=[指标1,指标2],order_by=[TimeOutput(grain) desc,Dimension(维度名称)]])
示例:
--获取2025年指标metric(30daysOrderAmount),product_name分组,性别为男性,并按照order_date倒序,product_name正序进行排序
SELECT * FROM query(metric=[30daysOrderAmount],group_by=[Dimension(product_name)],order_by=
[TimeDimension(order_date,day) desc,Dimension(product_name)],where=[Dimension(gender)='Male'])
--如果该模型仅有一个时间维度,上述语句也可以写为
SELECT * FROM query(metric=[30daysOrderAmount],group_by=[Dimension(product_name)],order_by=
[TimeOutput(day) desc,Dimension(product_name)],where=[Dimension(gender)='Male'])

limit 语句

limit 用于限定指标查询返回的数据行数,通常用于分页或只取部分数据。
示例:
--查询30daysOrderAmount指标的前5条数据
select * from query(metric=[30daysOrderAmount],limit=5)

time_start 语句

time_start 用于限定指标查询的起始时间,时间格式为2010-10-21T00:00:00,如不填,开始时间默认为2010-01-01T00:00:00。
示例:
--获取2025年至今以来指标metric(30daysOrderAmount)10条数据
SELECT * FROM query(metric=[30daysOrderAmount],time_start='2025-01-01T00:00:00',limit=10)

time_end 语句

time_end 用于限定指标查询的结束时间,时间格式为2025-10-21T00:00:00,如不填,结束时间默认为 now()。
示例:
--获取2025年指标metric(30daysOrderAmount)的10条数据
SELECT * FROM query(metric=[30daysOrderAmount],time_start='2025-01-01T00:00:00',time_end='2025-12-30T00:00:00',limit=10)