跳转至

指标数据查询API

1.概述

查询指标结果。

通过指标查询 API,用户可以完成:

  1. 查询已经完成定义的指标的结果值。

  2. 在查询过程中,临时为指标添加时间限定、业务限定、快速衍生(计算同环比、计算占比、计算排名)以及控制查询中指标的受影响维度,查询其指标结果值。

2.接口 URL

POSTHttp://{语义层服务地址}/semantic/api/v1.1/metrics/query

提示

如何获取语义层服务地址

指标平台产品界面中,「指标应用」->「API集成」中,环境信息即为指标平台的语义层服务地址。 imagepng

3.1 Header

参数 必填 描述 类型 最大长度
tenant-id 必填 租户ID 指标平台为多租户架构,查询时需要指明资产所在的租户 String 32
auth-type 必填 用户身份认证方式 * UID:使用用户 UID 进行身份认证 * TOKEN:使用 TOKEN 进行身份认证 String 32
auth-value 必填 根据 auth-value 类型填写相应的值 * UID:填写用户的 UID * TOKEN:填写申请的 TOKEN 值 String 32
query-user-account 选填 鉴权用户 使用该用户进行鉴权处理,若为空则使用 auth-value 对应的用户进行鉴权 String 32

如何获取 tenant-id、UID

指标平台产品界面中,「指标应用」->「API集成」中,tenant-id 即为当前账号的租户ID,user-id 即为当前账号的 UID

imagepng

如何获取 TOKEN

TOKEN 获取请参考帮助手册 获取访问凭证

如何获取 query-user-account ?


用户的用户名,即用户的登录名,你可以在个人中心查看自己的用户名 imagepng

也可以在管理设置中,查看每个用户的用户名 imagepng

3.2 Body Params

参数 必填 描述 类型
metrics 必填 查询指标支持使用指标平台已经定义的指标支持使用 metricDefinitions 中临时定义的指标 以及 通过快速计算能力进行扩展的指标 Array[ String ]
metricDefinitions 选填 临时指标在查询中基于已定义的指标临时进行定义,而生成的临时指标 Map< Sting,Stirng >
dimensions 选填 查询维度支持使用已经定义的维度支持对日期类型的维度进行快速粒度切换 Array[ String ]
filters 选填 全局筛选对当前查询中的全部指标,都进行维度上的数据过滤 Array[ String ]
specialMvConfig 选填 用于配置查询时是否启用指定物化表加速,以及如何处理物化表未命中的情况。 Map
resultFilters 选填 结果筛选对查询结果进行筛选,可以选去指标或者维度 Array[String]
timeConstraint 选填 指标日期范围查询指标数据的指标日期范围 String
orders 选填 排序将查询的结果按照指定的顺序排序返回,排序的内容需要包含在 metric 或 dimensions 中 Map
limit 选填 返回结果的条数,默认为 100 int
offset 选填 返回结果的偏移量,默认为1比如 offset=100时,数据则从第100条开始返回 int
queryResultType 选填 返回的数据结果内容,默认为SQL_AND_DATASQL_AND_DATA:同时返回查询的数据结果以及查询SQLSQL:仅返回查询 SQLDATA:仅返回数据结果 String
source 选填 用户添加数据查询来源标识(自定义参数内容) String

3.3 请求示例

{
    "metrics": [  /* 查询的指标列表 */
        "orderCount",  /* orderCount 指标 */
        "orderCount_total"  /* 临时指标 orderCount_total 指标 */
    ],
    "metricDefinitions":{ /* 临时指标 orderCount_total 指标的定义 */
      "orderCount_total":{
        "refMetric":"orderCount", 
        "specifyDimension":{  
          "type":"INCLUDE", 
          "dimensions":"metric_time__day,province" 
          },
        }
    },
    "dimensions": [  /* 查询的维度列表 */
        "metric_time__day", /* metric_time 维度,日粒度 */
        "province",/* province 维度 */
        "city"/* city 维度 */
    ],
    "filters": [],
    "timeConstraint": "([metric_time__month]= DateTrunc(Today(),\"MONTH\"))",
    "limit": 30,
    "offset": 1,
    "queryResultType":"SQL_AND_DATA"
}

4. 响应参数

4.1 响应参数

参数 必填 描述 类型
data 必填 查询返回的数据内容
success 必填 查询的状态 * true:表示查询成功 * false:表示查询失败,需要检查查询的请求参数
code 必填 接口响应码 String
message 选填 报错信息 String
traceid 必填 本次请求的追踪ID String

4.2 响应示例

{
    "data": {
        "queryId": "f8d14bba-918a-410b-b01c-87233fc70940",
        "warning": null,
        "sql": "SELECT `t4`.`f0` AS `metric_time__day`, `t8`.`f1` AS `flOrderCount`\nFROM (SELECT `t1`.`f0`, COALESCE(`t1`.`f0`, CAST('1970-01-01 00:00:00' AS DATETIME)) AS `f1`, (`t1`.`f0`) IS NOT NULL AS `f2`\nFROM (SELECT CAST(DATE_TRUNC('DAY', `tb_order`.`order_date`) AS DATETIME) AS `f0`\nFROM `anymetrics`.`tb_order` AS `tb_order`\nGROUP BY CAST(DATE_TRUNC('DAY', `tb_order`.`order_date`) AS DATETIME)) AS `t1`\nWHERE `t1`.`f0` >= DATE_ADD(DATE_TRUNC('DAY', CURRENT_TIMESTAMP ()), INTERVAL - 365 DAY) AND `t1`.`f0` < DATE_ADD(DATE_TRUNC('DAY', CURRENT_TIMESTAMP ()), INTERVAL 1 DAY)\nORDER BY (`t1`.`f0`) IS NULL, `t1`.`f0`\nLIMIT 10) AS `t4`\nLEFT JOIN (SELECT COUNT(`tb_order0`.`order_id`) AS `f1`, COALESCE(CAST(DATE_TRUNC('DAY', `tb_order0`.`order_date`) AS DATETIME), CAST('1970-01-01 00:00:00' AS DATETIME)) AS `f2`, (CAST(DATE_TRUNC('DAY', `tb_order0`.`order_date`) AS DATETIME)) IS NOT NULL AS `f3`\nFROM `anymetrics`.`tb_order` AS `tb_order0`\nWHERE CAST(DATE_TRUNC('DAY', `tb_order0`.`order_date`) AS DATETIME) >= DATE_ADD(DATE_TRUNC('DAY', CURRENT_TIMESTAMP ()), INTERVAL - 365 DAY) AND CAST(DATE_TRUNC('DAY', `tb_order0`.`order_date`) AS DATETIME) < DATE_ADD(DATE_TRUNC('DAY', CURRENT_TIMESTAMP ()), INTERVAL 1 DAY) AND (`tb_order0`.`product_id` = CAST(22 AS BIGINT) OR `tb_order0`.`product_id` = CAST(27 AS BIGINT) OR `tb_order0`.`product_id` = CAST(19 AS BIGINT))\nGROUP BY CAST(DATE_TRUNC('DAY', `tb_order0`.`order_date`) AS DATETIME)) AS `t8` ON `t4`.`f1` = `t8`.`f2` AND `t4`.`f2` = `t8`.`f3`\nORDER BY (`t4`.`f0`) IS NULL, `t4`.`f0`\nLIMIT 10",
        "table": {
            "columns": {
                "metric_time__day": [
                    {
                        "value": "2022-09-09 00:00:00",
                        "flag": null,
                        "count": 1
                    },
                    {
                        "value": "2022-09-10 00:00:00",
                        "flag": null,
                        "count": 1
                    }
                ],
                "flOrderCount": [
                    {
                        "value": null,
                        "flag": null,
                        "count": 1
                    },
                    {
                        "value": null,
                        "flag": null,
                        "count": 1
                    }
                ]
            }
        },
        "metas": [
            {
                "name": "metric_time__day",
                "dataType": null,
                "dataTypeName": "DATETIME",
                "displaySize": null,
                "schemaName": null,
                "scale": null,
                "precision": null,
                "tableName": null
            },
            {
                "name": "flOrderCount",
                "dataType": null,
                "dataTypeName": "BIGINT",
                "displaySize": null,
                "schemaName": null,
                "scale": null,
                "precision": null,
                "tableName": null
            }
        ]
    },
    "success": true,
    "code": null,
    "message": null,
    "traceId": "add22b18f1524199941fc83ce26dda33.576.16940932763920003"
}

5 请求参数说明

5.1 metrics 参数说明

在 API 查询中,我们需要使用指标的英文名或编码,具体使用英文名或编码,取决于你当前指标平台的配置。本文以 名称 作为唯一标识进行阐述  。

提示

如何配置英文名或编码模式?


在「管理设置」->「平台设置」中,可以设置指标/维度使用 编码 或 名称作为标识。 imagepng

使用双引号("")将需要使用的指标包裹,有以下几种具体的使用方式:

5.1.1 直接引用指标

使用单个指标

"metrics": ["order_count"],

使用多个指标

"metrics": ["order_count","order_amount"],

5.1.2 使用快速计算

指标平台的查询 API 提供了临时指标定义的能力,但是为了便于用户更简便的生成临时指标,我们提供了「语法糖」,使用该快速计算配置与通过 metricDefinitions 定义临时指标逻辑完全一致。在查询 API 中,我们通过快速计算,可以快速定义以下几类场景:

  • 计算指标的同环比:订单额 -> 订单额去年同比值

  • 计算指标的占比:订单额 -> 各城市订单额省内占比

  • 计算指标的排名:订单额 -> 各城市订单额省内排名

  • 为指标添加时间限定:订单额 -> 近7日订单额

5.1.2.1 同环比
/* 语法: 指标名称__sameperiod__偏移粒度__日期标识__同环比方法 */

"order_count__sameperiod__-2_dod__workdays__growth" 表示 "与两个工作日前订单量对比增长率"

使用同环比快速计算时,你需要保障:

查询结构中,metric_time 维度需要在 dimensions 或 timeConstraint 中被使用,若在 timeConstraint 中使用,需要保障其为单值筛选,比如

{
    "metrics": [ 
        "orderCount__sameperiod__yoy__value" 
    ],
    "timeConstraint": "DateTrunc([metric_time],\"MONTH\")= DateTrunc(Today(),\"MONTH\"))",/* metric_time 单值筛选 */
    ...
}

同环比的偏移粒度不可小于metric_time 的日期粒度,比如

{
    "metrics": [ 
        "orderCount__sameperiod__yoy__value" /* 年粒度同环比偏移 */
    ],
    "dimensions": [  
        "metric_time__month" /* 月粒度指标日期 */
    ],
    ...
}
参数 说明 备注
偏移粒度 对比的日期,有以下关键词
 {N}_dod:{N}日偏移,表达日环比时,使用 dod 或 -1_dod 效果相同;对比14日前,则使用 -14_dod。
 {N}_wow:{N}周偏移
 {N}_mom:{N}月偏移
 {N}_qoq:{N}季偏移
 {N}_yoy:{N}年偏移
 {N}_woeow:{N}上周末偏移,表达上周周末时,使用 woeow 或 -1_woeow 效果相同;对比2周前的周末,则使用 -2_woeow。
 {N}_moeom:{N}上月末偏移
 {N}_qoeoq:{N}上季末偏移
 {N}_yoeoy:{N}上年末偏移
 {N}_wosow:{N}上周初偏移,表达上周周初时,使用 wosow 或 -1_wosow 效果相同;对比2周前的周初,则使用 -2_wosow。
 {N}_mosom:{N}上月初偏移
 {N}_qosoq:{N}上季初偏移
 {N}_yosoy:{N}上年初偏移
自定义日历偏移,表达式格式:{N}{自定义日历名字}_{偏移粒度}。如:
 {N}_FY_wow:{N}财年周偏移
 {N}_FY_mom:{N}财年月偏移
 {N}_FY_qoq:{N}财年季偏移
 {N}_FY_yoy:{N}财年年偏移 
{N}_FY_woeow:{N}_上财年周末偏移,表达上财年周周末时,使用 FY_woeow 或 -1_FY_woeow 效果相同;对比2财年周前的周末,则使用 -2_FY_woeow
 {N}_FY_moeom:{N}上财年月末偏移
 {N}_FY_qoeoq:{N}上财年季末偏移
 {N}_FY_yoeoy:{N}上财年年末偏移
 {N}_FY_wosow:{N}上财年周初偏移,表达上财年周周初时,使用 FY_wosow 或 -1_FY_wosow 效果相同;对比2 财年周前的周初,则使用 -2_FY_wosow。
 {N}_FY_mosom:{N}_上财年月初偏移 
 {N}_FY_qosoq:{N}_上财年季初偏移
  {N}_FY_yosoy:{N}_上财年年初偏移
自定义日历如何获取? 
在「管理设置」->「自定义日历」模块中,可以看到维护的自定义日历名称。 imagepng
日期标识 指标平台支持日期标识,比如标识工作日,证券领域的交易日等等,在分析时常会遇到上一个交易日的环比对比。 日期标识如何获取? 
在「管理设置」->「时间限定」模块中,可以看到维护的日期标识名称。 imagepng
同环比方法 同环比方法,有以下关键词
● value:同环比值
● growthvalue:同环比增长值(当前日期-对比日期)
● growth:同环比增长率
● decrease:同环比下降值(对比日期-当前日期)
● decreaserate:同环比下降率

案例

去年同期值:{指标名称}__sameperiod__yoy__value

上交易日同比增长值:{指标名称}__sameperiod__-2_dod__{交易日标识}__growthvalue

52周前同比值:{指标名称}__sameperiod__-52_wow__value

半年前同比值:{指标名称}__sameperiod__-6_mom__value

同比去年年底增长值:{指标名称}__sameperiod__yoeoy__growthvalue

同比本年年初增长值:{指标名称}__sameperiod__0_yosoy__growthvalue

两个财年月前同比值:{指标名称}__sameperiod__-2_{自定义日历名称}_mom__value
5.1.2.2占比
/* 语法: 指标名称__proportion__占比范围维度1,占比范围维度2 */

"order_count__proportion__province" 表示 "在 province 窗口内计算 order_count 的占比值"

注意

使用占比快速计算时,你需要保障: 使用到的占比范围维度,需要被用在 dimensions 结构中

{
    "metrics": [ 
        "order_count__proportion__province" /* 在 province 中计算占比 */
    ],
    "dimensions": [  
        "province",/* province 需要在 dimensions 中被使用 */
        "city"
    ],
    ...
}

计算全局占比时,可以省略 proportion__后的占比维度,比如

{
    "metrics": [ 
        "order_count__proportion" /* 全局占比 */
    ],
    "dimensions": [  
        "province",
        "city"
    ],
    ...
}

案例

语法: 指标名称__proportion__占比范围维度1,占比范围维度2 "order_count__proportion__province" 表示 "在 province 窗口内计算 order_count 的占比值"

5.1.2.3 排名
/* 语法: 指标名称__排名方式__排名顺序__排名范围维度,排名范围维度 */

"order_count__rank__desc__province" 表示 "在 province 窗口内计算 order_count 以 rank(松散排序) desc(降序排名) 的排名值"

注意

使用排名快速计算时,你需要保障:

使用到的排名范围维度,需要被用在 dimensions 结构中

{
    "metrics": [ 
        "order_count__rank__desc__province" /* 在 province 中计算排名 */
    ],
    "dimensions": [  
        "province",/* province 需要在 dimensions 中被使用 */
        "city"
    ],
    ...
}

计算全局占比时,可以省略 rank__desc__后的排名维度,比如

{
    "metrics": [ 
        "order_count__rank__desc" /* 全局排名 */
    ],
    "dimensions": [  
        "province",
        "city"
    ],
    ...
}
参数 说明
排名方式 排名的方式,有以下关键词
● rank:松散排名,排名结果样例 1,1,3,4,5。
● rankDense:密集排名,排名结果样例 1,1,2,3,4。
● rowNumber:序号排名,排名结果样例 1,2,3,4,5。
排名顺序 排名的顺序,有以下关键词
● asc:升序排名,将排序值从小到大排,值越小排名越靠前。
● desc:降序排名,将排序值从打到小排,值越大排名越靠前。

!!! note "案例

省内降序排名值:{指标名称}__rank__desc__province

省内升序排名值:{指标名称}__rank__asc__province

全局降序值:{指标名称}__rank__desc 或 {指标名称}__rank__desc

省内降序排名,相同值排名递增:{指标名称}__rowNumber__desc__province
5.1.2.4 时间限定
/* 语法: 指标名称__period__时间限定 */

"order_count__period__7d" 表示 "order_count 的近7日总和"

注意

使用时间限定快速计算时,你需要保障:

所引用的指标本身没有在指标定义中使用时间限定,比如:对于一个基础指标订单额,可以使用近7日的快速时间限定,计算近7日的订单额,但是不能基于一个近7日订单额指标,再使用时间限定。

参数 说明
时间限定 时间限定,有以下关键词
近N日/周... 类型的时间限定:
{N}min:近N分钟,比如 orderCount__period__10min 表示近10分钟订单额
{N}h:近N小时
{N}d:近N日
{N}w:近N周
{N}m:近N月
{N}q:近N季
{N}y:近N年
本年/月...至今 类型的时间限定:
ytd:本年至今
qtd:本季至今
mtd:本月至今
ytm:本年至本月 
 wtd:本周至今
dt{N}h:本日至当前N小时,该配置的含义为将当日的小时按N作为步长进行切分,比如:orderCount__period__dt2h 表示以2小时作为一个时段将日切分,假设当前为 11点,则 period__dt2h 表示当日00点至12点。
dt{N}min:本日至当前N分钟
当前天/月... 类型的时间限定:
cy:当前年
cq:当前季度
cm:当前月
cw:当前周
cd:当前天
c{N}h:当前N小时,比如:orderCount__period__c3h 表示以3小时作为一个时段将日切分,假设当前为08点,则 period__c3h 表示当日的 07~09 三个小时。
c{N}min:当前N分钟

案例

近7日指标值:{指标名称}__period__7d

本年至今指标值:{指标名称}__period__ytd

本年至本月指标值:{指标名称}__period__ytm

本日至当前10分钟:{指标名称}__period__dt10min

当前月:{指标名称}__period__cm

当前4小时:{指标名称}__period__c4h

5.2 metircDefinitions 参数说明

在 API 查询中,可以通过 metricDefinitions 定义临时的指标,metricDefinitions 中需要以下参数用于定义临时指标

{
    ...
    "metricDefinitions":{ 
      "orderCount_total":{ /* 临时指标的名称 */
        "refMetric":"orderCount", /* 引用的指标 */
        "specifyDimension":{  /* 可用维度控制 */
          "type":"INCLUDE", 
          "dimensions":"metric_time__day,province" 
          },
        "period": " ",/* 时间限定 */
        "preAggs": [ /* 时间均值限定 */
            {
                "granularity": "",
                "calculateType": ""
            }
        ],
        "filters": [], /* 业务限定 */
        "indirections": [] /* 衍生方式 */
      }   
    }
    ...
}
参数 说明
临时指标名称 该临时指标的名称,需要和已定义的指标区分开,若与已定义的指标重名,则系统会优先使用已定义的指标
refMetric 引用的指标 该临时指标引用的指标,需要为在平台中已定义的指标
specifyDimension 可用维度控制 控制临时指标的可用维度
● type
       ○ INCLUDE:该指标受到哪些查询维度的影响,比如查询中使用了维度 province , city;临时指标定义中定义为 INCLUDE province,那么该临时指标只会收到 province 的影响。
       ○ EXCLUDE:该指标排除哪些维度影响,比如查询中使用了维度 province , city;临时指标定义中定义为 EXCLUDE city,那么该临时指标不受 city 的影响,即只受到了 province 的影响。
● dimensions:排除或保留的维度列表,多个维度之间使用逗号(,)分割。
period 时间限定 时间限定提供了四类定义时间限定的类型,有如下关键词:
● 最近N日(to_date)
语法: "period":"to_date 偏移量 偏移粒度 of 0 时间粒度 "
示例: "period":"to_date -6 day of 0 day " 表示 "6日前至今日,一共7日
"偏移粒度 和 时间粒度 提供 yearquartermonthweekday{N}hour{N}minute
本年/月...至今(grain_to_date)
语法: "period":"grain_to_date 偏移量 偏移粒度 of 0 时间粒度 "
示例: "period":"grain_to_date 0 year of 0 day " 表示 "本年至今
"偏移粒度 和 时间粒度 提供 yearquartermonthweekday{N}hour{N}minute 
期初期末(specify_date) 
语法: "period":"SPECIFY_DATE start\|end 时间粒度 of 偏移量 偏移粒度 "
示例: "period":"SPECIFY_DATE end day of -1 month " 表示 "上月的最后一天"
单日期
语法: "period":"relative_date 偏移量 偏移粒度 of 0 时间粒度"
示例: "period":"relative_date 0 month of 0 day" 表示 "当前月"
metricGrain指标时间粒度 { "metricDefinitions":{ "{临时指标名称}":{ "refMetric":"{引用指标名称}", "period": "TO_DATE -10 day of -3 day" "metricGrain":"DAY" } } }
指标时间力度仅适用于控制时间限定的日期粒度,不能够单独使用。
metricGrain 提供 DAY,WEEK,MONTH,QUARTER,YEAR
preAggs 时间均值限定 时间均值限定仅适用于控制时间限定的计算方法,不能够单独使用。比如计算近7日均值 或是 近7日的整体值。
● 当不使用 preAggs 时,则认为时间限定是计算整体的计算结果。
● preAggs 中有两个参数,分别为 granularity 和 calculateType,分别表示时间限定的计算方式
       ○ granularity 提供 DAY,WEEK,MONTH,QUARTER,YEAR
       ○ calculateType 提供 AVG、MAX、MIN
filters 业务限定 同 filter 请求参数,请参考章节 5.4 filter 参数说明
indirections 衍生方式 提供 同环比、占比、排名三种衍生方式设定,如下示例:
案例 昨日日环比
"indirections": [ "sameperiod__dod__value" ]
案例 省份内占比
"indirections": ["proportion__province"]
案例 省份内降序排名
"indirections": ["rank__desc__province"]

5.3 dimensions 参数说明

在 API 查询中,我们需要使用维度的英文名或编码,具体使用英文名或编码,取决于你当前指标平台的配置。本文以 名称 作为唯一标识进行阐述。

在使用维度时,多个维度之间使用逗号(,)分隔

 "dimensions": [
        "metric_time__day", 
        "province",
        "city"
    ],

日期类型的维度,指标平台支持对其粒度进行快速设定。支持以下粒度的快速切换:

  • year:年

  • quarter:季

  • month:月

  • week:周

  • day:日

  • hour:小时

  • minute:分钟

当使用的维度是 metric_time(指标日期)维度时,额外支持其 {N}hour{N}minute粒度设置。

案例 以2小时作为指标粒度,查看指标值


 "dimensions": [
        "metric_time__2hour"
    ],

案例 将财年月作为维度


 "dimensions": [
        "metric_time__{自定义日历名称}_MONTH"
    ],

5.4 filters 参数说明

filters 中支持对维度进行筛选限定。

  • 对于不同数据类型的维度,存在不同的筛选表达方法,本文会阐述重点常用的方法

  • 多个条件之间,可以通过 AND OR 和 括号(``) 来连接,用于描述且或关系

5.4.1 文本维度

匹配方式 示例
等于/不等于 某个值 { "filters": [ " [dim_province]= \"浙江\" AND [dim_city]<> \"杭州\" " ]}
等于/不等于 多个值 { "filters": [ " IN([dim_level],\"一线城市\",\"二线城市\") AND NotIn([dim_city],\"北京\",\"上海\",\"天津\",\"重庆\") " ] }
文本以...开头/以...结尾/包含... { "filters": [ " startWith([dim_name],\"慧园\") AND endWith([dim_name],\"果汁\") AND contains([dim_name],\"高级\") " ] }

5.4.2 数值维度

匹配方式 示例
等于/不等于/大于/小于... 某个值 { "filters": [ " [dim_price]= 2 AND [dim_counts]<> 20 AND [dim_sales]>= 22 " ] }
等于/不等于 多个值 { "filters": [ " IN([dim_price],100,42,50) AND NotIn([dim_counts],11,12,13" ] }

5.4.3 日期维度

匹配方式 示例
等于/不等于/大于/小于... 某个日期 {"filters": [ "['dim_order_date']>=\"2023-08-01\" AND ['dim_order_date']<\"2023-08-08\"" ]}
今日、本月... { "filters": [ " [dim_order_date]= Datetrunc(Now(),\"DAY\") OR [dim_order_date]= Datetrunc(Now(),\"MONTH\") " ] }
上月、去年... { "filters": [ " [dim_order_date]= Dateadd(Datetrunc(Now(),\"MONTH\"),-1,\"MONTH\") OR [dim_order_date]= Dateadd(Datetrunc(Now(),\"YEAR\"),-1,\"YEAR\") " ] }

5.4.4 JSON 格式

匹配方式 示例
等于/不等于 某个值 { "filters": [ " JsonExtract([data],\"province\"= \"浙江\" AND JsonExtract([data],\"city\"= \"浙江\" " ] }
等于/不等于 多个值 { "filters": [ " IN(JsonExtract([data],\"dim_level\"),\"一线城市\",\"二线城市\") AND NotIn(JsonExtract([data],\"city\"),\"北京\",\"上海\",\"天津\",\"重庆\") " ] }
文本以...开头/以...结尾/包含... { "filters": [ " startWith(JsonExtract([data],\"dim_level\"),\"一线\") AND endWith(JsonExtract([data],\"dim_level\"),\"城市\") AND contains(JsonExtract([data],\" city\"),\"江\") " ] }

5.5 resultFilters 参数说明

对查询结果进行筛选,可以指定保留或排除某些维度值或指标值,从而只返回符合条件的记录。

  • 支持对返回结果的 指标值 进行条件过滤,例如大于、小于、等于、不等于等操作。
  • 支持对返回结果的 维度值 进行条件过滤,例如指定某个城市、部门、产品类别等。
  • 支持多条件组合筛选(AND / OR)。
  • 筛选条件仅作用于最终返回结果,不会影响底层数据的计算逻辑(区别于 filters 的全局过滤)。

示例

1、筛选销售额大于 1000 的记录:

"resultFilters": ["[sales_amount] > 1000"]

2、筛选地区为“上海”或“北京”的数据:

"resultFilters": ["[region] IN ('上海','北京')"]

3、同时筛选销售额大于 1000 且地区为“上海”:

"resultFilters": ["[sales_amount] > 1000 AND [region] = '上海'"]

5.6 timeConstraint 参数

注意

在 timeConstraint 仅支持使用 metric_time 维度

metric_time 的筛选,与 filter 中的日期类型维度筛选写法一致。

案例 最近N日


{
    "timeConstraint":"DateTrunc(['metric_time'],\"DAY\") >= DATEADD(DateTrunc(NOW(), \"DAY\"), -{N+1}, \"DAY\") AND ['metric_time__day'] <= DateTrunc(NOW(), \"DAY\")"
}

案例 本年


{
    "timeConstraint":"DateTrunc(['metric_time'], \"YEAR\") = DateTrunc(NOW(), \"YEAR\")"
}

案例 本财年


{
    "timeConstraint":"DateTrunc(['metric_time'], \"FY_YEAR\") = DateTrunc(NOW(), \"FY_YEAR\")"
}

案例  上一个财年月


{
    "timeConstraint": "DateTrunc(['metric_time'], \"FY_MONTH\") = DateAdd(DateTrunc(Now(), \"FYY_MONTH\"), -1, \"FY_MONTH\")"
}

案例  时间范围,前三个财年月至上一个财年月


{
    "timeConstraint":"DateTrunc(['metric_time'], \"FY_MONTH\") >= DateAdd(DateTrunc(Now(), \"FY_MONT\"), -3, \"FYY_MONTH\") AND DateTrunc(['metric_time'], \"FY_MONTH\") <= DateAdd(DateTrunc(Now(), \"FY_MONTH\"), -1, \"FY_MONTH\")"
}

案例  期初期末,当前财年月的第一天


{
     "timeConstraint":"DateTrunc(['metric_time'], \"DAY\") = DateAdd(DateTrunc(DateAdd(Now(), 0, \"FY_MONTH\"), \"FY_MONTH\"), 0, \"DAY\")"
}

5.7 orders 参数

注意

在 orders 仅支持使用 出现在 metrics 或 dimensions 中的维度或指标。排序优先级依次从高到低:如下**排序列 1** 的优先级最高,**排序列 3** 优先级最低

[
    {"排序列1": "asc"},
    {"排序列2": "desc"},
    {"排序列3": "asc"}
]

排序列支持指标或维度,asc升序排列,desc降序排列。

5.8 source 参数

用于标识查询记录的来源

{
    "dimensions": [
        "metric_time__quarter",
        "brand"
    ],
    "metrics": [
        "orderCount"
    ],
    "timeConstraint": "['metric_time__month'] >= dateTrunc(\"2025-04-01\",\"MONTH\")",
    "source":"文档示例"
}

img

5.9 specialMvConfig 参数

参数 类型 说明
hints 数组 传入加速使用的物化表,支持传入多个
penetrateOnMiss 布尔 T:穿透(默认)F:不穿透

specialMvConfig 用于配置查询时是否使用命中指定物化表,以及如何处理物化表未命中的情况。该配置项包含两个重要参数:hintspenetrateOnMiss

参数说明

  • 若 hints 为空,那么 penetrateOnMiss 控制不生效

  • 当 hints 不为空时,则强制本次查询使用 hints 中的数据内容

  • penetrateOnMiss = T 时

    • 需要判断当前 hints 中的物化表指标日期范围是否满足改写需求

      • 满足:改写

        • 判断 hints 中的维度和上卷是否满足改写需求

          • 满足:改写

          • 不满足:穿透查询

      • 不满足:穿透查询

  • penetrateOnMiss = F 时

    • 不需要判断当前 hints 中的物化表指标日期范围是否满足改写需求

    • 判断 hints 中的维度和上卷是否满足改写需求

      • 满足:改写

      • 不满足:穿透查

示例

{
    "metrics": [
        "1015_avg_product_num"
    ],
    "dimensions": [],
    "filters": [],
    "timeConstraint": "(datetrunc([metric_time], \"day\")) = (DATETRUNC(CAST(\"2024-04-14 00:00:00\", \"TIMESTAMP\"), \"DAY\"))",
    "limit": 30,
    "offset": 1,
    "specialMvConfig": {
        "hints": ["split_mv_1015"],
        "penetrateOnMiss": false
    },
    "queryResultType": "SQL_AND_DATA"
}

5.10 其他参数

参数 说明
limit 和 offset 二者组合使用,可以控制获取数据的起始点(offset)以及条数(limit),例如:想要从第101条开始获取100行数据,则有如下写法 { ... "limit": 100, "offset": 101, ... }
queryResultType 用于控制返回结果数据,默认为SQL_AND_DATA:
SQL:结果返回 SQL 不包含结果数组
DATA:返回结果数组和元数据信息,不包含 SQL
SQL_AND_DATA:同时返回上述内容

6.响应参数说明

在查询的响应参数中,data 是最为重要的返回内容,其中包含了本次查询的数据结果以及其他信息。

参数 必填 描述 类型 最大长度
queryid 必填 查询标识 String 32
warning 必填 string
sql 必填 请求数据生成的 SQL 查询语句 string
table 必填 查询的结果数组:
"table": {
"columns": {
"metric_time__day": [
{
"value": "2022-09-09 00:00:00",
"flag": null,
"count": 1
},
{
"value": "2022-09-10 00:00:00",
"flag": null,
"count": 1
}
],
"flOrderCount": [
{
"value": null,
"flag": null,
"count": 1
},
{
"value": null,
"flag": null,
"count": 1
}
]
}
}, 数据以列的形式返回查询结果值,每列表示一个指标/维度的结果值,value为该列的值。
array
metas 必填 返回结果元数据信息 array
hitMvType 必填 是否命中物化视图。枚举值如下: FULL_REWRITE:完全基于物化表改写 HALF_REWRITE:部分基于物化表改写 NOT_REWRITE:未基于物化表改写 enum

7. 请求示例

案例 1:查询产品 ID 为 13、18 ,过去一年内每天的订单量

  • 请求
{
    "queryResultType":"DATA",
    "metrics": [
        "orderCount"
    ],
    "dimensions": [
        "metric_time__day"
    ],
    "filters": [
        "IN(['product_id1'], 13, 18)"
    ],
    "timeConstraint": "DateTrunc(['metric_time'],\"YEAR\") = DATEADD(DateTrunc(NOW(), \"YEAR\"), -1, \"YEAR\") ",
    "limit": 10,
    "offset": 1,
    "orders": [
        {
            "metric_time__day": "asc"
        }
    ]
}
  • 响应
{
    "data": {
        "queryId": "f7ea0af0c0294412be144c9a698617d3",
        "warning": null,
        "sql": null,
        "table": {
            "columns": {
                "orderCount": [
                    {
                        "value": 11,
                        "flag": null,
                        "count": 1
                    },
                    {
                        "value": 9,
                        "flag": null,
                        "count": 1
                    },
                    {
                        "value": 13,
                        "flag": null,
                        "count": 1
                    },
                    {
                        "value": 7,
                        "flag": null,
                        "count": 1
                    },
                    {
                        "value": 2,
                        "flag": null,
                        "count": 1
                    },
                    {
                        "value": 0,
                        "flag": null,
                        "count": 1
                    },
                    {
                        "value": 2,
                        "flag": null,
                        "count": 1
                    },
                    {
                        "value": 8,
                        "flag": null,
                        "count": 1
                    },
                    {
                        "value": 1,
                        "flag": null,
                        "count": 1
                    },
                    {
                        "value": 10,
                        "flag": null,
                        "count": 1
                    }
                ],
                "metric_time__day": [
                    {
                        "value": "2024-01-01",
                        "flag": null,
                        "count": 1
                    },
                    {
                        "value": "2024-01-03",
                        "flag": null,
                        "count": 1
                    },
                    {
                        "value": "2024-01-09",
                        "flag": null,
                        "count": 1
                    },
                    {
                        "value": "2024-01-10",
                        "flag": null,
                        "count": 1
                    },
                    {
                        "value": "2024-01-11",
                        "flag": null,
                        "count": 1
                    },
                    {
                        "value": "2024-01-14",
                        "flag": null,
                        "count": 1
                    },
                    {
                        "value": "2024-01-17",
                        "flag": null,
                        "count": 1
                    },
                    {
                        "value": "2024-01-23",
                        "flag": null,
                        "count": 1
                    },
                    {
                        "value": "2024-01-24",
                        "flag": null,
                        "count": 1
                    },
                    {
                        "value": "2024-01-26",
                        "flag": null,
                        "count": 1
                    }
                ]
            }
        },
        "metas": [
            {
                "id": null,
                "uuid": null,
                "name": "metric_time__day",
                "dataType": null,
                "dataTypeName": "DATE",
                "displaySize": null,
                "schemaName": null,
                "scale": null,
                "precision": null,
                "tableName": null,
                "type": null
            },
            {
                "id": null,
                "uuid": null,
                "name": "orderCount",
                "dataType": null,
                "dataTypeName": "BIGINT",
                "displaySize": null,
                "schemaName": null,
                "scale": null,
                "precision": null,
                "tableName": null,
                "type": null
            }
        ],
        "hitMvType": "NOT_REWRITE",
        "containsErrorColumn": false
    },
    "success": true,
    "code": "200",
    "message": null,
    "traceId": "4308407d40f14298a4fd4f1ab1d0a9a4.252.17446849964940005"
}

案例 2:查询当日的订单量及订单量日环比增长值

  • 请求
{
    "metrics": [
        "order_count",
        "orderCount__sameperiod__dod__growthvalue"

    ],
    "dimensions": [

    ],
    "timeConstraint": "(['metric_time']=TODAY())",
    "filters": [],
    "limit": 30,
    "offset": 1
}
  • 响应
{
    "data": {
        "queryId": "8393e005bf2c4174ada3918b1116b2a7",
        "warning": null,
        "sql": "SELECT CASE WHEN (`t3`.`f0`) IS NOT NULL OR (`t8`.`f0`) IS NOT NULL THEN COALESCE(`t3`.`f0`, 0) - COALESCE(`t8`.`f0`, 0) ELSE NULL END AS `order_count__dod__growthvalue`\nFROM (SELECT COUNT(`t`.`order_id`) AS `f0`\nFROM (SELECT `tn_1578931_fl_sr__default__t_order`.`order_id`, `tn_1578931_fl_sr__default__t_order`.`order_date`, COALESCE(DATE_TRUNC('DAY', `tn_1578931_fl_sr__default__t_order`.`order_date`), CAST('1969-01-01' AS DATE)) AS `f2`, (DATE_TRUNC('DAY', `tn_1578931_fl_sr__default__t_order`.`order_date`)) IS NOT NULL AS `f3`\nFROM `default_catalog`.`aloudatacan`.`tn_1578931_fl_sr__default__t_order` AS `tn_1578931_fl_sr__default__t_order`) AS `t`\nLEFT JOIN (SELECT `smart_date_table__20230101a925000000`.`day_col`, COALESCE(`smart_date_table__20230101a925000000`.`day_col`, CAST('1969-01-01' AS DATE)) AS `f1`, (`smart_date_table__20230101a925000000`.`day_col`) IS NOT NULL AS `f2`\nFROM `aloudatacan`.`smart_date_table__20230101a925000000` AS `smart_date_table__20230101a925000000`) AS `t0` ON `t`.`f2` = `t0`.`f1` AND `t`.`f3` = `t0`.`f2`\nWHERE `t0`.`day_col` = CURRENT_DATE ()AND DATE_TRUNC('DAY', `t`.`order_date`) = CURRENT_DATE ()) AS `t3`\nCROSS JOIN (SELECT COUNT(`t4`.`order_id`) AS `f0`\nFROM (SELECT `tn_1578931_fl_sr__default__t_order0`.`order_id`, `tn_1578931_fl_sr__default__t_order0`.`order_date`, COALESCE(DATE_TRUNC('DAY', `tn_1578931_fl_sr__default__t_order0`.`order_date`), CAST('1969-01-01' AS DATE)) AS `f2`, (DATE_TRUNC('DAY', `tn_1578931_fl_sr__default__t_order0`.`order_date`)) IS NOT NULL AS `f3`\nFROM `default_catalog`.`aloudatacan`.`tn_1578931_fl_sr__default__t_order` AS `tn_1578931_fl_sr__default__t_order0`) AS `t4`\nLEFT JOIN (SELECT `smart_date_table__20230101a9250000000`.`day_col`, COALESCE(`smart_date_table__20230101a9250000000`.`day_col`, CAST('1969-01-01' AS DATE)) AS `f1`, (`smart_date_table__20230101a9250000000`.`day_col`) IS NOT NULL AS `f2`\nFROM `aloudatacan`.`smart_date_table__20230101a925000000` AS `smart_date_table__20230101a9250000000`) AS `t5` ON `t4`.`f2` = `t5`.`f1` AND `t4`.`f3` = `t5`.`f2`\nWHERE DATE_ADD(`t5`.`day_col`, INTERVAL 1 DAY) = CURRENT_DATE ()AND DATE_ADD(DATE_TRUNC('DAY', `t4`.`order_date`), INTERVAL 1 DAY) = CURRENT_DATE ()) AS `t8`\nLIMIT 30",
        "table": {
            "columns": {
                "order_count__dod__growthvalue": [
                    {
                        "value": 0,
                        "flag": null,
                        "count": 1
                    }
                ]
            }
        },
        "metas": [
            {
                "name": "order_count__dod__growthvalue",
                "dataType": null,
                "dataTypeName": "BIGINT",
                "displaySize": null,
                "schemaName": null,
                "scale": null,
                "precision": null,
                "tableName": null
            }
        ]
    },
    "success": true,
    "code": null,
    "message": null,
    "traceId": "f48660e183134e848c0a76008cde36a9.520.17171223773600003"
}

案例 3:查询订单量的年同比增长值

  • 请求
{
    "metrics": [
        "order_count",
        "order_count__yoygrowth"
    ],
    "metricDefinitions":{ 
      "order_count__yoygrowth":{
        "refMetric":"order_count", 
        "indirections": [
          "sameperiod__yoy__growthvalue"
        ] 
      }   
    },
    "dimensions": [
        "metric_time__month"
    ],
    "timeConstraint": "(DateTrunc(['metric_time'], \"MONTH\")= DateTrunc(Today(),\"MONTH\"))",
    "filters": [],
    "limit": 30,
    "offset": 1
}
  • 响应
{
    "data": {
        "queryId": "2299e1ec92b94681b0d9f2a43610cd80",
        "warning": null,
        "sql": "SELECT CASE WHEN (`t4`.`f1`) IS NOT NULL OR (`t10`.`f1`) IS NOT NULL THEN COALESCE(`t4`.`f1`, 0) - COALESCE(`t10`.`f1`, 0) ELSE NULL END AS `order_count__yoy__growthvalue`, CASE WHEN (`t4`.`month_col`) IS NOT NULL THEN `t4`.`month_col` WHEN (`t10`.`f2`) IS NOT NULL THEN `t10`.`f2` ELSE NULL END AS `metric_time__month`\nFROM (SELECT COUNT(`t`.`order_id`) AS `f1`, `t0`.`month_col`, COALESCE(`t0`.`month_col`, CAST('1969-01-01' AS DATE)) AS `f2`, (`t0`.`month_col`) IS NOT NULL AS `f3`\nFROM (SELECT `tn_1578931_fl_sr__default__t_order`.`order_id`, COALESCE(DATE_TRUNC('DAY', `tn_1578931_fl_sr__default__t_order`.`order_date`), CAST('1969-01-01' AS DATE)) AS `f1`, (DATE_TRUNC('DAY', `tn_1578931_fl_sr__default__t_order`.`order_date`)) IS NOT NULL AS `f2`\nFROM `default_catalog`.`aloudatacan`.`tn_1578931_fl_sr__default__t_order` AS `tn_1578931_fl_sr__default__t_order`) AS `t`\nLEFT JOIN (SELECT `smart_date_table__20230101a925000000`.`month_col`, COALESCE(`smart_date_table__20230101a925000000`.`day_col`, CAST('1969-01-01' AS DATE)) AS `f1`, (`smart_date_table__20230101a925000000`.`day_col`) IS NOT NULL AS `f2`\nFROM `aloudatacan`.`smart_date_table__20230101a925000000` AS `smart_date_table__20230101a925000000`) AS `t0` ON `t`.`f1` = `t0`.`f1` AND `t`.`f2` = `t0`.`f2`\nWHERE DATE_TRUNC('MONTH', CURRENT_TIMESTAMP ()) <= `t0`.`month_col` AND DATE_ADD(DATE_TRUNC('MONTH', CURRENT_TIMESTAMP ()), INTERVAL 1 MONTH) > `t0`.`month_col`\nGROUP BY `t0`.`month_col`) AS `t4`\nFULL JOIN (SELECT COUNT(`t5`.`order_id`) AS `f1`, DATE_ADD(`t6`.`month_col`, INTERVAL 1 YEAR) AS `f2`, COALESCE(DATE_ADD(`t6`.`month_col`, INTERVAL 1 YEAR), CAST('1969-01-01 00:00:00' AS DATETIME)) AS `f3`, (DATE_ADD(`t6`.`month_col`, INTERVAL 1 YEAR)) IS NOT NULL AS `f4`\nFROM (SELECT `tn_1578931_fl_sr__default__t_order0`.`order_id`, COALESCE(DATE_TRUNC('DAY', `tn_1578931_fl_sr__default__t_order0`.`order_date`), CAST('1969-01-01' AS DATE)) AS `f1`, (DATE_TRUNC('DAY', `tn_1578931_fl_sr__default__t_order0`.`order_date`)) IS NOT NULL AS `f2`\nFROM `default_catalog`.`aloudatacan`.`tn_1578931_fl_sr__default__t_order` AS `tn_1578931_fl_sr__default__t_order0`) AS `t5`\nLEFT JOIN (SELECT `smart_date_table__20230101a9250000000`.`month_col`, COALESCE(`smart_date_table__20230101a9250000000`.`day_col`, CAST('1969-01-01' AS DATE)) AS `f1`, (`smart_date_table__20230101a9250000000`.`day_col`) IS NOT NULL AS `f2`\nFROM `aloudatacan`.`smart_date_table__20230101a925000000` AS `smart_date_table__20230101a9250000000`) AS `t6` ON `t5`.`f1` = `t6`.`f1` AND `t5`.`f2` = `t6`.`f2`\nWHERE DATE_TRUNC('MONTH', CURRENT_TIMESTAMP ()) <= DATE_ADD(`t6`.`month_col`, INTERVAL 1 YEAR) AND DATE_ADD(DATE_TRUNC('MONTH', CURRENT_TIMESTAMP ()), INTERVAL 1 MONTH) > DATE_ADD(`t6`.`month_col`, INTERVAL 1 YEAR) AND DATE_ADD(DATE_TRUNC('MONTH', CURRENT_TIMESTAMP ()), INTERVAL - 1 YEAR) <= `t6`.`month_col` AND DATE_ADD(DATE_ADD(DATE_TRUNC('MONTH', CURRENT_TIMESTAMP ()), INTERVAL 1 MONTH), INTERVAL - 1 YEAR) > `t6`.`month_col`\nGROUP BY `t6`.`month_col`) AS `t10` ON `t4`.`f2` = `t10`.`f3` AND `t4`.`f3` = `t10`.`f4`\nWHERE DATE_TRUNC('MONTH', CURRENT_TIMESTAMP ()) <= CASE WHEN (`t4`.`month_col`) IS NOT NULL THEN `t4`.`month_col` WHEN (`t10`.`f2`) IS NOT NULL THEN `t10`.`f2` ELSE NULL END AND DATE_ADD(DATE_TRUNC('MONTH', CURRENT_TIMESTAMP ()), INTERVAL 1 MONTH) > CASE WHEN (`t4`.`month_col`) IS NOT NULL THEN `t4`.`month_col` WHEN (`t10`.`f2`) IS NOT NULL THEN `t10`.`f2` ELSE NULL END\nORDER BY (CASE WHEN (`t4`.`month_col`) IS NOT NULL THEN `t4`.`month_col` WHEN (`t10`.`f2`) IS NOT NULL THEN `t10`.`f2` ELSE NULL END) DESC\nLIMIT 30",
        "table": {
            "columns": {
               "order_count__yoy__growthvalue": [
                    {
                        "value": 7,
                        "flag": null,
                        "count": 1
                    }
                ],
                "metric_time__month": [
                    {
                        "value": "2024-05-01 00:00:00",
                        "flag": null,
                        "count": 1
                    }
                ]
            }
        },
        "metas": [
            {
                "name": "order_count__yoy__growthvalue",
                "dataType": null,
                "dataTypeName": "BIGINT",
                "displaySize": null,
                "schemaName": null,
                "scale": null,
                "precision": null,
                "tableName": null
            },
            {
                "name": "metric_time__month",
                "dataType": null,
                "dataTypeName": "DATETIME",
                "displaySize": null,
                "schemaName": null,
                "scale": null,
                "precision": null,
                "tableName": null
            }
        ]
    },
    "success": true,
    "code": null,
    "message": null,
    "traceId": "f48660e183134e848c0a76008cde36a9.519.17171228778140005"
}

案例 4:查询 2024.3.1~~3.7 的订单量以及月同比值(2024.2.1~~2.7)

{
    "metrics": [
        "orderCount",
        "orderCount_momvalue"
    ],
    "metricDefinitions":{ 
      "orderCount_momvalue":{
        "refMetric":"orderCount", 
        "indirections": [
          "sameperiod__mom__value"
        ] 
      }   
    },
    "dimensions": [
       "metric_time__month"
    ],
    "timeConstraint": "(['metric_time']>=date(\"2024-03-01\")) AND (['metric_time']<=date(\"2024-03-07\"))",
    "filters": [],
    "limit": 30,
    "offset": 1
}
  • 响应
{
    "data": {
        "queryId": "a980be9e34d640a6a6afca8842c86b44",
        "warning": null,
        "sql": "SELECT `t20`.`f0` AS `metric_time__month`, `t20`.`f1` AS `orderCount`, `t20`.`f10` AS `orderCount_momvalue`\nFROM (SELECT CASE WHEN (`t6`.`month_col`) IS NOT NULL THEN `t6`.`month_col` WHEN (`t19`.`month_col`) IS NOT NULL THEN `t19`.`month_col` ELSE NULL END AS `f0`, `t6`.`f1`, `t19`.`f10`\nFROM (SELECT `t2`.`month_col`, SUM(CASE WHEN CAST('2024-03-01' AS DATE) <= `t2`.`day_col` AND CAST('2024-03-07' AS DATE) >= `t2`.`day_col` THEN `t0`.`quantity` ELSE NULL END) AS `f1`, COALESCE(`t2`.`month_col`, CAST('1969-01-01' AS DATE)) AS `f2`, (`t2`.`month_col`) IS NOT NULL AS `f3`\nFROM (SELECT `tn_19487697_jmsr__default__fl_order`.`quantity`, `tn_19487697_jmsr__default__fl_order`.`order_date`\nFROM `default_catalog`.`aloudatacan`.`tn_19487697_jmsr__default__fl_order` AS `tn_19487697_jmsr__default__fl_order`\nWHERE `tn_19487697_jmsr__default__fl_order`.`order_date` >= CAST('2024-03-01' AS DATE) AND `tn_19487697_jmsr__default__fl_order`.`order_date` <= CAST('2024-03-07' AS DATE)) AS `t0`\nLEFT JOIN (SELECT `smart_date_table__20230101a448000000`.`month_col`, `smart_date_table__20230101a448000000`.`day_col`\nFROM `default_catalog`.`aloudatacan`.`smart_date_table__20230101a448000000` AS `smart_date_table__20230101a448000000`\nWHERE `smart_date_table__20230101a448000000`.`day_col` >= CAST('2024-03-01' AS DATE) AND `smart_date_table__20230101a448000000`.`day_col` <= CAST('2024-03-07' AS DATE)) AS `t2` ON `t0`.`order_date` = `t2`.`day_col`\nWHERE `t2`.`day_col` >= CAST('2024-03-01' AS DATE) AND `t2`.`day_col` <= CAST('2024-03-07' AS DATE)\nGROUP BY `t2`.`month_col`) AS `t6`\nFULL JOIN (SELECT `t11`.`month_col`, `t18`.`f1` AS `f10`, COALESCE(`t11`.`month_col`, CAST('1969-01-01' AS DATE)) AS `f2`, (`t11`.`month_col`) IS NOT NULL AS `f3`\nFROM (SELECT `t9`.`month_col`, DATE_ADD(`t9`.`month_col`, INTERVAL - 1 MONTH) AS `f1`\nFROM (SELECT `smart_date_table__20230101a4480000000`.`month_col`\nFROM `default_catalog`.`aloudatacan`.`smart_date_table__20230101a448000000` AS `smart_date_table__20230101a4480000000`\nGROUP BY `smart_date_table__20230101a4480000000`.`month_col`, `smart_date_table__20230101a4480000000`.`year_col`, `smart_date_table__20230101a4480000000`.`quarter_col`) AS `t9`\nWHERE `t9`.`month_col` >= CAST('2024-03-01' AS DATE) AND `t9`.`month_col` <= CAST('2024-03-01' AS DATE)) AS `t11`\nLEFT JOIN (SELECT `t15`.`month_col`, SUM(CASE WHEN DATE_ADD(CAST('2024-03-01' AS DATE), INTERVAL - 1 MONTH) <= `t15`.`day_col` AND DATE_ADD(CAST('2024-03-07' AS DATE), INTERVAL - 1 MONTH) >= `t15`.`day_col` THEN `t13`.`quantity` ELSE NULL END) AS `f1`\nFROM (SELECT `tn_19487697_jmsr__default__fl_order0`.`quantity`, `tn_19487697_jmsr__default__fl_order0`.`order_date`\nFROM `default_catalog`.`aloudatacan`.`tn_19487697_jmsr__default__fl_order` AS `tn_19487697_jmsr__default__fl_order0`\nWHERE `tn_19487697_jmsr__default__fl_order0`.`order_date` >= CAST('2024-02-01' AS DATE) AND `tn_19487697_jmsr__default__fl_order0`.`order_date` <= CAST('2024-02-07' AS DATE)) AS `t13`\nLEFT JOIN (SELECT `smart_date_table__20230101a4480000001`.`month_col`, `smart_date_table__20230101a4480000001`.`day_col`\nFROM `default_catalog`.`aloudatacan`.`smart_date_table__20230101a448000000` AS `smart_date_table__20230101a4480000001`\nWHERE `smart_date_table__20230101a4480000001`.`day_col` >= CAST('2024-02-01' AS DATE) AND `smart_date_table__20230101a4480000001`.`day_col` <= CAST('2024-02-07' AS DATE)) AS `t15` ON `t13`.`order_date` = `t15`.`day_col`\nWHERE `t15`.`day_col` >= CAST('2024-02-01' AS DATE) AND `t15`.`day_col` <= CAST('2024-02-07' AS DATE)\nGROUP BY `t15`.`month_col`) AS `t18` ON `t11`.`f1` = `t18`.`month_col`) AS `t19` ON `t6`.`f2` = `t19`.`f2` AND `t6`.`f3` = `t19`.`f3`) AS `t20`\nWHERE DATE_TRUNC('MONTH', CAST('2024-03-01' AS DATE)) <= `t20`.`f0` AND DATE_TRUNC('MONTH', CAST('2024-03-07' AS DATE)) >= `t20`.`f0` AND ((`t20`.`f1`) IS NOT NULL OR (`t20`.`f10`) IS NOT NULL)\nORDER BY (`t20`.`f0`) DESC\nLIMIT 30",
        "table": {
            "columns": {
                "orderCount_momvalue": [
                    {
                        "value": 166,
                        "flag": null,
                        "count": 1
                    }
                ],
                "orderCount": [
                    {
                        "value": 124,
                        "flag": null,
                        "count": 1
                    }
                ],
                "metric_time__month": [
                    {
                        "value": "2024-03-01",
                        "flag": null,
                        "count": 1
                    }
                ]
            }
        },
        "metas": [
            {
                "id": null,
                "uuid": null,
                "name": "metric_time__month",
                "dataType": null,
                "dataTypeName": "DATE",
                "displaySize": null,
                "schemaName": null,
                "scale": null,
                "precision": null,
                "tableName": null,
                "type": null
            },
            {
                "id": null,
                "uuid": null,
                "name": "orderCount",
                "dataType": null,
                "dataTypeName": "BIGINT",
                "displaySize": null,
                "schemaName": null,
                "scale": null,
                "precision": null,
                "tableName": null,
                "type": null
            },
            {
                "id": null,
                "uuid": null,
                "name": "orderCount_momvalue",
                "dataType": null,
                "dataTypeName": "BIGINT",
                "displaySize": null,
                "schemaName": null,
                "scale": null,
                "precision": null,
                "tableName": null,
                "type": null
            }
        ],
        "hitMvType": "NOT_REWRITE",
        "containsErrorColumn": false
    },
    "success": true,
    "code": "200",
    "message": null,
    "traceId": "4308407d40f14298a4fd4f1ab1d0a9a4.250.17446854003390003"
}

案例 5:在指标日期(天)、省份、城市维度下,查询订单量、 省内订单量占比、全国订单量占比

  • 请求
{
    "metrics": [
        "orderCount",
        "orderCount__proportion__metric_time__day,province",
        "orderCount__proportion__metric_time__day"
    ],
    "dimensions": [
       "metric_time__day",
       "province", 
       "city"
    ],
    "timeConstraint": "",
    "filters": [],
    "limit": "",
    "offset": ""
}
  • 响应
{
    "data": {
        "queryId": "5b2daa156a5a4a8f918032be59555097",
        "warning": null,
        "sql": "SELECT `t5`.`f0` AS `YH_fl_order_002_province`, `t5`.`f3` AS `sum_quantity`, CASE WHEN (`t8`.`order_date`) IS NOT NULL THEN `t8`.`order_date` WHEN (`t5`.`f2`) IS NOT NULL THEN `t5`.`f2` ELSE NULL END AS `metric_time__day`, `t5`.`f4` AS `sum_quantity__proportion__metric_time__day,YH_fl_order_002_province`, CASE WHEN `t8`.`f1` = 0 THEN NULL ELSE COALESCE(`t5`.`f30`, 0) / `t8`.`f1` END AS `sum_quantity__proportion__metric_time__day`, `t5`.`city` AS `YH_fl_order_002_city`\nFROM (SELECT CASE WHEN (`t1`.`province`) IS NOT NULL THEN `t1`.`province` WHEN (`t4`.`province`) IS NOT NULL THEN `t4`.`province` ELSE NULL END AS `f0`, `t1`.`f3`, CASE WHEN (`t1`.`order_date`) IS NOT NULL THEN `t1`.`order_date` WHEN (`t4`.`order_date`) IS NOT NULL THEN `t4`.`order_date` ELSE NULL END AS `f2`, CASE WHEN `t4`.`f2` = 0 THEN NULL ELSE COALESCE(`t1`.`f30`, 0) / `t4`.`f2` END AS `f4`, `t1`.`f30`, `t1`.`city`, COALESCE(CASE WHEN (`t1`.`order_date`) IS NOT NULL THEN `t1`.`order_date` WHEN (`t4`.`order_date`) IS NOT NULL THEN `t4`.`order_date` ELSE NULL END, CAST('1969-01-01' AS DATE)) AS `f6`, (CASE WHEN (`t1`.`order_date`) IS NOT NULL THEN `t1`.`order_date` WHEN (`t4`.`order_date`) IS NOT NULL THEN `t4`.`order_date` ELSE NULL END) IS NOT NULL AS `f7`\nFROM (SELECT `tn_597771_correctness_test_qq_datasource__default__YH_fl_order_002`.`province`, SUM(`tn_597771_correctness_test_qq_datasource__default__YH_fl_order_002`.`quantity`) AS `f3`, `tn_597771_correctness_test_qq_datasource__default__YH_fl_order_002`.`order_date`, SUM(`tn_597771_correctness_test_qq_datasource__default__YH_fl_order_002`.`quantity`) AS `f30`, `tn_597771_correctness_test_qq_datasource__default__YH_fl_order_002`.`city`, COALESCE(`tn_597771_correctness_test_qq_datasource__default__YH_fl_order_002`.`province`, '') AS `f5`, (`tn_597771_correctness_test_qq_datasource__default__YH_fl_order_002`.`province`) IS NOT NULL AS `f6`, COALESCE(`tn_597771_correctness_test_qq_datasource__default__YH_fl_order_002`.`order_date`, CAST('1969-01-01' AS DATE)) AS `f7`, (`tn_597771_correctness_test_qq_datasource__default__YH_fl_order_002`.`order_date`) IS NOT NULL AS `f8`\nFROM `default_catalog`.`aloudatacan`.`tn_597771_correctness_test_qq_datasource__default__YH_fl_order_002` AS `tn_597771_correctness_test_qq_datasource__default__YH_fl_order_002`\nGROUP BY `tn_597771_correctness_test_qq_datasource__default__YH_fl_order_002`.`province`, `tn_597771_correctness_test_qq_datasource__default__YH_fl_order_002`.`city`, `tn_597771_correctness_test_qq_datasource__default__YH_fl_order_002`.`order_date`) AS `t1`\nFULL JOIN (SELECT `tn_597771_correctness_test_qq_datasource__default__YH_fl_order_0020`.`province`, `tn_597771_correctness_test_qq_datasource__default__YH_fl_order_0020`.`order_date`, SUM(`tn_597771_correctness_test_qq_datasource__default__YH_fl_order_0020`.`quantity`) AS `f2`, COALESCE(`tn_597771_correctness_test_qq_datasource__default__YH_fl_order_0020`.`province`, '') AS `f3`, (`tn_597771_correctness_test_qq_datasource__default__YH_fl_order_0020`.`province`) IS NOT NULL AS `f4`, COALESCE(`tn_597771_correctness_test_qq_datasource__default__YH_fl_order_0020`.`order_date`, CAST('1969-01-01' AS DATE)) AS `f5`, (`tn_597771_correctness_test_qq_datasource__default__YH_fl_order_0020`.`order_date`) IS NOT NULL AS `f6`\nFROM `default_catalog`.`aloudatacan`.`tn_597771_correctness_test_qq_datasource__default__YH_fl_order_002` AS `tn_597771_correctness_test_qq_datasource__default__YH_fl_order_0020`\nGROUP BY `tn_597771_correctness_test_qq_datasource__default__YH_fl_order_0020`.`province`, `tn_597771_correctness_test_qq_datasource__default__YH_fl_order_0020`.`order_date`) AS `t4` ON `t1`.`f5` = `t4`.`f3` AND `t1`.`f6` = `t4`.`f4` AND `t1`.`f7` = `t4`.`f5` AND `t1`.`f8` = `t4`.`f6`) AS `t5`\nFULL JOIN (SELECT `tn_597771_correctness_test_qq_datasource__default__YH_fl_order_0021`.`order_date`, SUM(`tn_597771_correctness_test_qq_datasource__default__YH_fl_order_0021`.`quantity`) AS `f1`, COALESCE(`tn_597771_correctness_test_qq_datasource__default__YH_fl_order_0021`.`order_date`, CAST('1969-01-01' AS DATE)) AS `f2`, (`tn_597771_correctness_test_qq_datasource__default__YH_fl_order_0021`.`order_date`) IS NOT NULL AS `f3`\nFROM `default_catalog`.`aloudatacan`.`tn_597771_correctness_test_qq_datasource__default__YH_fl_order_002` AS `tn_597771_correctness_test_qq_datasource__default__YH_fl_order_0021`\nGROUP BY `tn_597771_correctness_test_qq_datasource__default__YH_fl_order_0021`.`order_date`) AS `t8` ON `t5`.`f6` = `t8`.`f2` AND `t5`.`f7` = `t8`.`f3`\nORDER BY (CASE WHEN (`t8`.`order_date`) IS NOT NULL THEN `t8`.`order_date` WHEN (`t5`.`f2`) IS NOT NULL THEN `t5`.`f2` ELSE NULL END) DESC\nLIMIT 5",
        "table": {
            "columns": {
                "YH_fl_order_002_province": [
                    {
                        "value": "江苏省",
                        "flag": null,
                        "count": 1
                    },
                    {
                        "value": "安徽省",
                        "flag": null,
                        "count": 1
                    },
                    {
                        "value": "江苏省",
                        "flag": null,
                        "count": 1
                    },
                    {
                        "value": "浙江省",
                        "flag": null,
                        "count": 1
                    },
                    {
                        "value": "江苏省",
                        "flag": null,
                        "count": 1
                    }
                ],
                "YH_fl_order_002_city": [
                    {
                        "value": "南京市",
                        "flag": null,
                        "count": 1
                    },
                    {
                        "value": "合肥市",
                        "flag": null,
                        "count": 1
                    },
                    {
                        "value": "南京市",
                        "flag": null,
                        "count": 1
                    },
                    {
                        "value": "杭州市",
                        "flag": null,
                        "count": 1
                    },
                    {
                        "value": "南京市",
                        "flag": null,
                        "count": 1
                    }
                ],
                "sum_quantity__proportion__metric_time__day": [
                    {
                        "value": 1.0,
                        "flag": null,
                        "count": 1
                    },
                    {
                        "value": 0.27586206896551724,
                        "flag": null,
                        "count": 1
                    },
                    {
                        "value": 0.1724137931034483,
                        "flag": null,
                        "count": 1
                    },
                    {
                        "value": 0.5517241379310345,
                        "flag": null,
                        "count": 1
                    },
                    {
                        "value": 0.5714285714285714,
                        "flag": null,
                        "count": 1
                    }
                ],
                "metric_time__day": [
                    {
                        "value": "2024-03-18",
                        "flag": null,
                        "count": 1
                    },
                    {
                        "value": "2024-03-17",
                        "flag": null,
                        "count": 1
                    },
                    {
                        "value": "2024-03-17",
                        "flag": null,
                        "count": 1
                    },
                    {
                        "value": "2024-03-17",
                        "flag": null,
                        "count": 1
                    },
                    {
                        "value": "2024-03-16",
                        "flag": null,
                        "count": 1
                    }
                ],
                "sum_quantity": [
                    {
                        "value": 20,
                        "flag": null,
                        "count": 1
                    },
                    {
                        "value": 8,
                        "flag": null,
                        "count": 1
                    },
                    {
                        "value": 5,
                        "flag": null,
                        "count": 1
                    },
                    {
                        "value": 16,
                        "flag": null,
                        "count": 1
                    },
                    {
                        "value": 12,
                        "flag": null,
                        "count": 1
                    }
                ],
                "sum_quantity__proportion__metric_time__day,YH_fl_order_002_province": [
                    {
                        "value": 1.0,
                        "flag": null,
                        "count": 1
                    },
                    {
                        "value": 1.0,
                        "flag": null,
                        "count": 1
                    },
                    {
                        "value": 1.0,
                        "flag": null,
                        "count": 1
                    },
                    {
                        "value": 1.0,
                        "flag": null,
                        "count": 1
                    },
                    {
                        "value": 0.8,
                        "flag": null,
                        "count": 1
                    }
                ]
            }
        },
        "metas": [
            {
                "name": "YH_fl_order_002_province",
                "dataType": null,
                "dataTypeName": "VARCHAR",
                "displaySize": null,
                "schemaName": null,
                "scale": null,
                "precision": null,
                "tableName": null
            },
            {
                "name": "sum_quantity",
                "dataType": null,
                "dataTypeName": "BIGINT",
                "displaySize": null,
                "schemaName": null,
                "scale": null,
                "precision": null,
                "tableName": null
            },
            {
                "name": "metric_time__day",
                "dataType": null,
                "dataTypeName": "DATE",
                "displaySize": null,
                "schemaName": null,
                "scale": null,
                "precision": null,
                "tableName": null
            },
            {
                "name": "sum_quantity__proportion__metric_time__day,YH_fl_order_002_province",
                "dataType": null,
                "dataTypeName": "DOUBLE",
                "displaySize": null,
                "schemaName": null,
                "scale": null,
                "precision": null,
                "tableName": null
            },
            {
                "name": "sum_quantity__proportion__metric_time__day",
                "dataType": null,
                "dataTypeName": "DOUBLE",
                "displaySize": null,
                "schemaName": null,
                "scale": null,
                "precision": null,
                "tableName": null
            },
            {
                "name": "YH_fl_order_002_city",
                "dataType": null,
                "dataTypeName": "VARCHAR",
                "displaySize": null,
                "schemaName": null,
                "scale": null,
                "precision": null,
                "tableName": null
            }
        ]
    },
    "success": true,
    "code": "200",
    "message": null,
    "traceId": "626cb523172b457ba5d6b97911aef76e.251.17187792563050015"
}

案例 6:在指标日期(天)、省份、城市维度下,查询订单量、 省内订单量排名、全国订单量排名

  • 请求
{
    "metrics": [
        "orderCount",
        "orderCount__rank__desc__metric_time__day,province",
        "orderCount__rank__desc__metric_time__day"
    ],
    "dimensions": [
       "metric_time__day",
       "province", 
       "city"


    ],
    "timeConstraint": "(['metric_time']>=date(\"2024-03-04\")) AND (['metric_time']<=date(\"2024-03-19\"))",
    "filters": [],
    "limit": 5,
    "offset": ""
}
  • 响应
{
    "data": {
        "queryId": "0355d4b483d44fd4be6ffce03c32a4db",
        "warning": null,
        "sql": "SELECT `t2`.`province` AS `YH_fl_order_002_province`, `t2`.`f3` AS `sum_quantity`, RANK() OVER (PARTITION BY `t2`.`order_date` ORDER BY ((`t2`.`f3`) IS NULL) DESC, (`t2`.`f3`) DESC) AS `sum_quantity__rank__metric_time__day__desc`, `t2`.`order_date` AS `metric_time__day`, `t2`.`f4` AS `sum_quantity__rank__metric_time__day,YH_fl_order_002_province__desc`, `t2`.`city` AS `YH_fl_order_002_city`\nFROM (SELECT `t1`.`province`, `t1`.`f3`, `t1`.`order_date`, RANK() OVER (PARTITION BY `t1`.`order_date`, `t1`.`province` ORDER BY ((`t1`.`f3`) IS NULL) DESC, (`t1`.`f3`) DESC) AS `f4`, `t1`.`city`\nFROM (SELECT `tn_597771_correctness_test_qq_datasource__default__YH_fl_order_002`.`province`, SUM(`tn_597771_correctness_test_qq_datasource__default__YH_fl_order_002`.`quantity`) AS `f3`, `tn_597771_correctness_test_qq_datasource__default__YH_fl_order_002`.`order_date`, `tn_597771_correctness_test_qq_datasource__default__YH_fl_order_002`.`city`\nFROM `default_catalog`.`aloudatacan`.`tn_597771_correctness_test_qq_datasource__default__YH_fl_order_002` AS `tn_597771_correctness_test_qq_datasource__default__YH_fl_order_002`\nGROUP BY `tn_597771_correctness_test_qq_datasource__default__YH_fl_order_002`.`city`, `tn_597771_correctness_test_qq_datasource__default__YH_fl_order_002`.`province`, `tn_597771_correctness_test_qq_datasource__default__YH_fl_order_002`.`order_date`) AS `t1`) AS `t2`\nORDER BY (`t2`.`order_date`) DESC\nLIMIT 5",
        "table": {
            "columns": {
                "province": [
                    {
                        "value": "江苏省",
                        "flag": null,
                        "count": 1
                    },
                    {
                        "value": "江苏省",
                        "flag": null,
                        "count": 1
                    },
                    {
                        "value": "安徽省",
                        "flag": null,
                        "count": 1
                    },
                    {
                        "value": "浙江省",
                        "flag": null,
                        "count": 1
                    },
                    {
                        "value": "江苏省",
                        "flag": null,
                        "count": 1
                    }
                ],
                "orderCount__rank__metric_time__day,province__desc": [
                    {
                        "value": 1,
                        "flag": null,
                        "count": 1
                    },
                    {
                        "value": 1,
                        "flag": null,
                        "count": 1
                    },
                    {
                        "value": 1,
                        "flag": null,
                        "count": 1
                    },
                    {
                        "value": 1,
                        "flag": null,
                        "count": 1
                    },
                    {
                        "value": 2,
                        "flag": null,
                        "count": 1
                    }
                ],
                "orderCount__rank__metric_time__day__desc": [
                    {
                        "value": 1,
                        "flag": null,
                        "count": 1
                    },
                    {
                        "value": 3,
                        "flag": null,
                        "count": 1
                    },
                    {
                        "value": 2,
                        "flag": null,
                        "count": 1
                    },
                    {
                        "value": 1,
                        "flag": null,
                        "count": 1
                    },
                    {
                        "value": 3,
                        "flag": null,
                        "count": 1
                    }
                ],
                "city": [
                    {
                        "value": "南京市",
                        "flag": null,
                        "count": 1
                    },
                    {
                        "value": "南京市",
                        "flag": null,
                        "count": 1
                    },
                    {
                        "value": "合肥市",
                        "flag": null,
                        "count": 1
                    },
                    {
                        "value": "杭州市",
                        "flag": null,
                        "count": 1
                    },
                    {
                        "value": "苏州市",
                        "flag": null,
                        "count": 1
                    }
                ],
                "metric_time__day": [
                    {
                        "value": "2024-03-18",
                        "flag": null,
                        "count": 1
                    },
                    {
                        "value": "2024-03-17",
                        "flag": null,
                        "count": 1
                    },
                    {
                        "value": "2024-03-17",
                        "flag": null,
                        "count": 1
                    },
                    {
                        "value": "2024-03-17",
                        "flag": null,
                        "count": 1
                    },
                    {
                        "value": "2024-03-16",
                        "flag": null,
                        "count": 1
                    }
                ],
                "orderCount": [
                    {
                        "value": 20,
                        "flag": null,
                        "count": 1
                    },
                    {
                        "value": 5,
                        "flag": null,
                        "count": 1
                    },
                    {
                        "value": 8,
                        "flag": null,
                        "count": 1
                    },
                    {
                        "value": 16,
                        "flag": null,
                        "count": 1
                    },
                    {
                        "value": 3,
                        "flag": null,
                        "count": 1
                    }
                ]
            }
        },
        "metas": [
            {
                "name": "province",
                "dataType": null,
                "dataTypeName": "VARCHAR",
                "displaySize": null,
                "schemaName": null,
                "scale": null,
                "precision": null,
                "tableName": null
            },
            {
                "name": "orderCount",
                "dataType": null,
                "dataTypeName": "BIGINT",
                "displaySize": null,
                "schemaName": null,
                "scale": null,
                "precision": null,
                "tableName": null
            },
            {
                "name": "orderCount__rank__metric_time__day__desc",
                "dataType": null,
                "dataTypeName": "BIGINT",
                "displaySize": null,
                "schemaName": null,
                "scale": null,
                "precision": null,
                "tableName": null
            },
            {
                "name": "metric_time__day",
                "dataType": null,
                "dataTypeName": "DATE",
                "displaySize": null,
                "schemaName": null,
                "scale": null,
                "precision": null,
                "tableName": null
            },
            {
                "name": "orderCount__rank__metric_time__day,province__desc",
                "dataType": null,
                "dataTypeName": "BIGINT",
                "displaySize": null,
                "schemaName": null,
                "scale": null,
                "precision": null,
                "tableName": null
            },
            {
                "name": "city",
                "dataType": null,
                "dataTypeName": "VARCHAR",
                "displaySize": null,
                "schemaName": null,
                "scale": null,
                "precision": null,
                "tableName": null
            }
        ]
    },
    "success": true,
    "code": "200",
    "message": null,
    "traceId": "626cb523172b457ba5d6b97911aef76e.243.17187799641780025"
}