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를 기록한 후 유한 재시도 정책에 따라 해당 논리 쿼리를 다시 시작하거나 기술 지원에 문의하세요.
증분 백오프(Incremental Backoff)를 사용하고 전체 타임아웃을 설정하여 간격 없는 폴링을 피하는 것이 좋습니다. 작업 완료 후 페이지를 넘길 때는 최종 결과에서 반환된 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 크로스 사이트 데이터 쿼리를 참조하세요.
- 파라미터 설명
| 파라미터 이름 | type | 필수 | 설명 |
|---|---|---|---|
| queries | array | 예 | 다중 명령 쿼리로, query 객체로 구성된 목록입니다. |
| fieldTagDescNeeded | boolean | field 또는 tag 설명 정보가 필요한지 여부 |
- queries[*] 멤버 파라미터 구조 설명
동기 쿼리와 비교하여 각 query 항목은 async_id를 추가로 지원합니다. 이는 현재 실행 중인 작업을 폴링하는 데에만 사용됩니다.
| 파라미터 이름 | type | 필수 | 설명 |
|---|---|---|---|
async_id |
string | 아니요 | 단일 비동기 작업 ID. 새 쿼리에서는 반드시 생략해야 합니다. 이전에 동일한 인덱스의 결과가 content.data[i].is_running=true이고 content.data[i].async_id가 비어 있지 않은 경우에만 해당 ID를 동일한 queries[i]에 다시 넣어 폴링을 계속합니다. is_running=false 이후에는 즉시 포함을 중지해야 하며, 새 쿼리나 다른 쿼리 항목에 재사용할 수 없습니다. |
| qtype | string | 예 | 쿼리 문 유형 dql: DQL 쿼리 문;promql: PromQL 쿼리 문 |
| query | json | 예 | 쿼리 구조 |
| 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 | 페이지네이션 쿼리 토큰(엔진이 cursor_token 값을 반환). 페이지네이션 쿼리 시 이전 쿼리에서 반환된 next_cursor_token을 이번 쿼리의 cursor_token으로 설정해야 합니다. cursor_token이 없는 요청은 페이지를 넘길 때 동일한 타임스탬프의 데이터가 건너뛰어질 수 있습니다. | |
| query.disable_sampling | bool | 샘플링 비활성화 스위치, 기본값은 false입니다. | |
| query.disable_truncate | bool | 반환 내용 잘림 비활성화 여부, 기본값 false, 잘림 허용을 의미합니다. |
- 응답 포인트 밀도
density파라미터 값 설명
| 선택 가능한 값 | 설명 |
|---|---|
| lower | 비교적 낮음, 60포인트 |
| low | 낮음, 180포인트 |
| medium | 중간, 360포인트 |
| high | 높음, 720포인트 |
-
포인트 밀도 파라미터의 우선순위에 유의하세요. 최대 밀도
density[high]* maxPointCount > interval > density > dql 문의 제어 파라미터 -
일반적인 쿼리 설명
- 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