全部产品
云市场

预处理查询

更新时间:2019-07-24 10:34:28

当前版本中,为了保持与历史API,SDK以及生态工具(Grafana)的兼容性, 目前开启预计算查询的机制为引入一个额外的tag来作为查询hint. hint命中后会返回预计算结果, 否则返回原始数据结果.

查询预处理后的数据需要传入一个特殊的tagk=”granularity,并且tagv指示采用何种查询策略:

1. tagv直接指定Rollup间隔和算子,例如“5m.avg”

下面是一个例子(HTTP POST body):

  1. {
  2. "start":1560218801118,
  3. "end":1560218867499,
  4. "queries":[
  5. {
  6. "metric":"system.mem.base",
  7. "aggregator":"avg",
  8. "downsample":"5m-avg",
  9. "filters":[
  10. {
  11. "type":"literal_or",
  12. "tagk":"__granularity__",
  13. "filter":"5m.avg"
  14. },
  15. {
  16. "type":"literal_or",
  17. "tagk":"HostType",
  18. "filter":"N38"
  19. },
  20. ]
  21. }]
  22. }

这个例子中,查询指定metric为“system.mem.base”,包含有标签HostType=”N38”的时间线。如果我们已经为这条时间线配置了预处理规则,那么特殊的标签granularity=”5m.avg”就可以让数据库读取预处理后的数据而不是原始数据。

2. tagv设置为”auto”,自动从Rollup规则中设置聚合间隔和算子

下面是一个例子(HTTP POST body):

  1. {
  2. "start":1560742264,
  3. "end":1560742564,
  4. "queries":[
  5. {
  6. "aggregator":"avg",
  7. "downsample":"1m-sum",
  8. "metric":"test.rollup.t5",
  9. "tags":{
  10. "tagk1":"tagv1",
  11. "tagk2":"tagv2",
  12. "tagk3":"tagv3",
  13. "__granularity__":"auto"
  14. }
  15. }
  16. ]
  17. }

这个例子中,查询指定metric为“system.mem.base”,包含有标签tagk1=”tagv1”, tagk2=”tagv2”, tagk3=”tagv3”的时间线。假设我们已经为这条时间线配置了预处理规则(默认间隔为1m, 默认聚合器为sum),那么此时会按照 “1m.sum”的降采样规则去查询预处理数据(等价于特殊的标签granularity=”1m.sum”)。

3. 查询结果标识

如果需要查看数据库是否读取了预处理后的数据,可以在返回的JSON中查找是否存在“rollupGranularity”,例如下面的例子,返回“rollupGranularity”=“5m.avg”,说明已经使用了预处理的后数据。

  1. [{
  2. "metric":"system.mem.base",
  3. "tags":{"HostType":"N38", ...},
  4. "rollupGranularity":"5m.avg",
  5. "dps":{
  6. "1560908100":26.677781312753666,
  7. "1560908160":29.156335115229304,
  8. ...
  9. }
  10. }]

最后, 需要注意的是,如果没有为某个时间线配置预处理规则,查询会忽略标签granularity,直接返回原始数据。因此,如果在查询中,指定的度量(metric)和标签(tag)有错误,系统无法找到预处理规则,也会直接返回原始数据点。