跳转至

DQL 数据异步查询



POST /api/v1/df/asynchronous/query_data

概述

Body 请求参数

参数名 类型 必选 说明
queries array 多命令查询,其内容为 query 对象组成的列表;新查询不传 async_id,轮询时仅给仍在运行的对应 query 项传回服务端返回的 async_id
允许为空: False
fieldTagDescNeeded boolean 是否需要 field 或者 tag 描述信息
允许为空: False

参数补充说明

查询说明


本接口同时支持 POST 和 GET,两种方式使用相同的 JSON object 参数结构:POST 将完整参数放在 application/json request body;GET 在 query string 中通过 body=<完整 JSON object 字符串> 传递并进行 URL 编码。顶层不接受 string、array、null、number 或 boolean。

异步查询最终响应的 content.data[i].warnings[] 可能包含 DQLDataAccessScopeRestricted。details[0].metadata.namespace 本期固定为 logging;restriction=partial 表示仅返回有权限索引的数据, restriction=all 表示相关日志索引均无权限并返回空结果。HTTP 状态码和请求参数不变。

async_id 生命周期(重要)

  1. 发起一个新的逻辑查询时,必须省略 queries[i].async_id。服务端若转为异步执行,会在同一位置返回 content.data[i].is_running=true 和非空 content.data[i].async_id。
  2. 仅当 is_running 严格等于 true 且 async_id 非空时,才使用该 ID 轮询同一任务。轮询请求应保持该项的 qtype、query、目标工作空间及 targetRegion 不变,并把 ID 放回对应的 queries[i].async_id。
  3. 当 is_running=false 时,本次任务已结束;即使响应结构里仍出现 async_id 字段,调用方也不得在下一次新查询中继续携带旧 ID。新查询、修改过查询语句/时间范围的查询都必须再次省略 async_id。
  4. async_id 只属于一个查询项和一次任务,不是会话 ID,也不是分页游标。批量查询时,content.data[i] 与 queries[i] 按数组下标对应,禁止把一个查询项的 ID 用到另一个查询项。为降低映射错误,异步调用建议每次只提交一个 query。
  5. 如果 is_running=true 但 async_id 为空,视为不可轮询的异常响应;不要填入历史 ID,应记录 traceId 并按有限重试策略重新发起该逻辑查询或联系技术支持。

建议采用递增退避并设置总超时,避免无间隔轮询。任务完成后,如需翻页,应使用最终结果返回的 search_after、next_cursor_time 或 next_cursor_token,不要使用 async_id 代替分页参数。

首次请求(不传 async_id)

{
  "queries": [
    {
      "qtype": "dql",
      "query": {
        "q": "L::re(`.*`):(`message`)",
        "timeRange": [1772516130000, 1772519730000],
        "limit": 100,
        "workspaceUUIDs": ["wksp_target"],
        "targetRegion": "region_code"
      }
    }
  ]
}

仅在运行中时轮询同一任务

{
  "queries": [
    {
      "async_id": "async_task_id_from_content_data_0",
      "qtype": "dql",
      "query": {
        "q": "L::re(`.*`):(`message`)",
        "timeRange": [1772516130000, 1772519730000],
        "limit": 100,
        "workspaceUUIDs": ["wksp_target"],
        "targetRegion": "region_code"
      }
    }
  ]
}

跨站点查询还需遵守“一个请求只查询一个 targetRegion”的限制。目标工作空间与站点编码的获取及完整调用流程参考:OpenAPI 跨站点数据查询。

1、 参数说明

参数名 type 必选 说明
queries array Y 多命令查询,其内容为 query 对象组成的列表
fieldTagDescNeeded boolean 是否需要 field 或者 tag 描述信息

2、 queries[*]成员参数结构说明

与同步查询相比,每个 query 项额外支持 async_id;它只用于轮询当前仍在运行的任务。

参数名 type 必选 说明
async_id string N 单次异步任务 ID。新查询必须省略;仅当上次同下标结果满足 content.data[i].is_running=true 且 content.data[i].async_id 非空时,才把该 ID 放回同一个 queries[i] 继续轮询。is_running=false 后立即停止携带,禁止复用于新查询或其他查询项
qtype string Y 查询语句的类型
dql: DQL 查询语句;
promql: PromQL 查询语句
query json Y 查询结构
query.q string 与 qtype 类型保持一致的 查询语句,例如 dql 或者 promql 查询语句
query.ignore_cache boolean 是否禁用缓存,默认 false,表示使用缓存
query.promqlType enum qtype=promql 时生效,可选值 instantQuery、rangeQuery,默认 rangeQuery
query.highlight boolean 是否显示高亮数据
query.timeRange array 时间范围的时间戳列表;DQL / PromQL 的起止时间须使用相同单位(秒、毫秒、微秒或纳秒),混用时返回 HTTP 400 ft.TimeRangeUnitMismatch;分页游标保持独立
query.disableMultipleField bool 是否打开单列模式,默认为 true
query.showLabel bool 是否显示对象的 labels,默认 false
query.funcList array 再次聚合修饰 DQL 返回值;disableMultipleField=false 时当前参数无效
query.slimit integer 时间线分组大小,只针对指标查询有效
query.soffset integer 时间线分组偏移量
query.limit integer 分页大小
query.offset integer 分页偏移量
query.orderby array 排序列表,结构为 {fieldName: method};指标集查询只支持 fieldName=time,method 可选 desc、asc
query.sorderby array 排序列表,sorderby 的 column 是一个表达式,支持所有返回单个值的聚合函数 min max last avg p90 p95 count, {fieldName:method},结构和 orderby 一致
query.order_by array 排序列表,结构为[{"column": "field", "order": "DESC"}], doris 引擎兼容字段
query.sorder_by array 排序列表,结构为[{"column": "field", "order": "DESC"}], doris 引擎兼容字段
query.density string 响应的点密度, 优先级小于 autoDensity 且大于 dql 语句中设置的密度
query.interval number 时间分片间隔,只接受可转换为 Kodo int64 范围内且不小于 1ms 整数毫秒的正数;默认单位为秒,可通过 interval_unit 指定为毫秒
query.interval_unit string interval 的单位,可选 s、ms,默认 s
query.search_after array 分页查询标记。相同参数上次请求响应结果中的 search_after 值作为本次请求的参数。
query.maxPointCount integer 最大点数
query.workspaceUUID string 要查询的单个授权方工作空间 UUID;* 表示查询 targetRegion 内全部已授权空间
query.workspaceUUIDs array 要查询的授权方工作空间 UUID 列表;非空时优先于 query.workspaceUUID。同一列表必须属于同一个站点;["*"] 表示查询 targetRegion 内全部已授权空间。建议不要同时传两个字段
query.targetRegion string 授权方工作空间所属站点的 regionCode;从 /wksp_share/granted_ws_list 中与目标 workspaceUUID 同组的 regionCode 获取。显式跨站点查询建议传入,查询 * 时必须传入;轮询期间不得改变
query.output_format string lineprotocol: 行协议输出,默认不填的话,默认保持现有输出格式不变
query.cursor_time integer 分段查询阈值:第一次分段查询时设置为 end_time;之后传入响应中的 next_cursor_time
query.cursor_token string 分页查询 token(由引擎返回 cursor_token 的值): 分页查询时,需要将上次查询返回的 next_cursor_token 设置为本次查询的 cursor_token;不带 cursor_token 的请求可能会造成翻页时相同时间戳的数据被跳过。
query.disable_sampling bool 采样禁用开关, 默认值为 false
query.disable_truncate bool 是否禁用返回内容截断,默认 false,表示允许截断

3、 响应点密度density 参数值说明

可选值 说明
lower 较低,60个点
low 低,180个点
medium 中等,360个点
high 高,720个点
  • 注意点密度参数的优先级,最大密度density[high] * maxPointCount > interval > density > dql 语句中的控制参数

4、 常见查询说明

请求例子

curl 'https://openapi.guance.com/api/v1/df/asynchronous/query_data' \
-H 'Content-Type: application/json' \
-H 'DF-API-KEY: <DF-API-KEY>' \
--data-raw '{"queries":[{"qtype":"dql","query":{"q":"L::re(`.*`):(`message`)","timeRange":[1772516130000,1772519730000],"limit":100}}]}' \
--compressed

响应

{
    "code": 200,
    "content": {
        "data": [
            {
                "async_id": "async_task_id",
                "is_running": true
            }
        ]
    },
    "errorCode": "",
    "message": "",
    "success": true,
    "traceId": "TRACE-XXXX"
}

文档评价

文档内容是否对您有帮助?