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 生命周期(重要)
- 发起一个新的逻辑查询时,必须省略
queries[i].async_id。服务端若转为异步执行,会在同一位置返回content.data[i].is_running=true和非空content.data[i].async_id。 - 仅当
is_running严格等于true且async_id非空时,才使用该 ID 轮询同一任务。轮询请求应保持该项的qtype、query、目标工作空间及targetRegion不变,并把 ID 放回对应的queries[i].async_id。 - 当
is_running=false时,本次任务已结束;即使响应结构里仍出现async_id字段,调用方也不得在下一次新查询中继续携带旧 ID。新查询、修改过查询语句/时间范围的查询都必须再次省略async_id。 async_id只属于一个查询项和一次任务,不是会话 ID,也不是分页游标。批量查询时,content.data[i]与queries[i]按数组下标对应,禁止把一个查询项的 ID 用到另一个查询项。为降低映射错误,异步调用建议每次只提交一个 query。- 如果
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、 常见查询说明
- 未恢复事件查询
- OpenAPI 跨站点数据查询 注: openapi 接口进行数据查询时, 默认为 管理员 角色. 需注意可能受到 数据访问规则限制
请求例子¶
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