데이터셋 실행 작업 조회(Get Dataset Jobs) (V2)
데이터셋에서 실행한 작업(Job)의 RID를 조회합니다. 기본 정렬은 작업 시작 시각의 내림차순입니다. POST 요청이지만 작업을 새로 실행하는 API가 아니라 검색 조건을 본문으로 전달하는 조회입니다.
공개 프리뷰이며 preview=true가 필요합니다. 비운영 개발 용도로 사용하며 사전 통지 없이 변경되거나 제거될 수 있습니다.
경로와 쿼리 매개변수
| 위치 | 이름 | 자료형 | 필수 여부 | 의미 |
|---|---|---|---|---|
| 경로 | datasetRid | string | 필수 | 데이터셋 RID |
| 쿼리 | branchName | string | 선택 | 브랜치 이름. 생략하면 기본 브랜치이며 대부분 master |
| 쿼리 | pageSize | integer | 선택 | 반환할 최대 결과 수. 생략하면 1,000개 기준 |
| 쿼리 | pageToken | string | 선택 | 첫 요청에서는 생략하고 다음 요청에 이전 nextPageToken 전달 |
| 쿼리 | preview | boolean | 선택 필드, 이 작업에는 필요 | 프리뷰 사용을 위해 true 지정 |
요청 본문
본문은 필수 GetDatasetJobsRequest 객체입니다. where와 orderBy는 각각 선택 항목입니다.
where
where는 type으로 or, and, timeFilter 중 하나를 선택합니다.
| type | 필드 | 필수 여부 | 의미 |
|---|---|---|---|
or | items: list<GetDatasetJobsQuery> | 선택 | 하위 쿼리들의 OR 결합 |
and | items: list<GetDatasetJobsQuery> | 선택 | 하위 쿼리들의 AND 결합 |
timeFilter | field | 필수 | SUBMITTED_TIME 또는 FINISHED_TIME |
timeFilter | comparisonType | 필수 | GTE 또는 LT |
timeFilter | value | 필수 | ISO 8601 시각 문자열 |
items의 각 요소도 같은 쿼리 유형이므로 논리식을 중첩할 수 있습니다. 시간 조건에서 GTE는 해당 시각 이상, LT는 해당 시각 미만입니다.
orderBy
orderBy는 GetDatasetJobsSort 배열입니다. 각 항목에는 다음 두 필드가 필요합니다.
| 필드 | 허용 값 |
|---|---|
sortType | BY_STARTED_TIME, BY_FINISHED_TIME |
sortDirection | ASCENDING, DESCENDING |
필터의 SUBMITTED_TIME과 정렬의 BY_STARTED_TIME은 서로 다른 필드 이름이므로 그대로 구분하여 사용합니다.
응답
GetJobResponse에는 선택적인 data와 nextPageToken이 있습니다. data는 JobDetails 배열이며 각 항목의 jobRid는 필수 문자열입니다. 다음 결과가 있으면 토큰으로 이어서 조회합니다.
HTTP 요청
POST /api/v2/datasets/{datasetRid}/jobs
작업 식별자는 v2.getDatasetJobs입니다. Authorization: Bearer <접근 토큰> 헤더로 인증합니다. OAuth 클라이언트에는 api:datasets-read 권한 범위가 필요합니다.
JSON 요청 예시
2020-09-30 이후 제출한 작업을 시작 시각 내림차순으로 찾는 가상 요청 예시입니다.
{
"orderBy": [
{
"sortType": "BY_STARTED_TIME",
"sortDirection": "DESCENDING"
}
],
"where": {
"type": "timeFilter",
"field": "SUBMITTED_TIME",
"comparisonType": "GTE",
"value": "2020-09-30T14:30:00Z"
}
}
JSON 응답 예시
가상 데이터셋의 작업 RID와 다음 페이지 토큰 응답 예시입니다.
{
"data": [
{
"jobRid": "ri.foundry.main.job.aaf94076-d773-4732-a1df-3b638eb50448"
}
],
"nextPageToken": "v1.QnVpbGQgdGhlIEZ1dHVyZTogaHR0cHM6Ly93d3cucGFsYW50aXIuY29tL2NhcmVlcnMvP2xldmVyLXNvdXJjZSU1YiU1ZD1BUElEb2NzI29wZW4tcG9zaXRpb25z"
}
개별 오류
| 오류 이름 | 오류 코드 | HTTP | 의미와 조건 | 추가 매개변수 |
|---|---|---|---|---|
BranchNotFound | NOT_FOUND | 404 | 브랜치를 찾을 수 없거나 토큰이 접근할 수 없습니다. | datasetRid, branchName |
DatasetNotFound | NOT_FOUND | 404 | 데이터셋을 찾을 수 없거나 토큰이 접근할 수 없습니다. | datasetRid |
GetDatasetJobsPermissionDenied | PERMISSION_DENIED | 403 | 데이터셋 실행 작업 조회 권한이 거부되었습니다. | datasetRid |
요청 예제
FOUNDRY_HOST에는 https://를 제외한 Foundry 호스트를, FOUNDRY_TOKEN에는 유효한 토큰을 환경 변수로 제공합니다. 아래 RID, 이름과 파일 경로는 예시이며 실제 작업 대상으로 바꾸어야 합니다.
cURL
curl -X POST \
-H "Content-type: application/json" \
-H "Authorization: Bearer ${FOUNDRY_TOKEN}" \
"https://${FOUNDRY_HOST}/api/v2/datasets/ri.foundry.main.dataset.c26f11c8-cdb3-4f44-9f5d-9816ea1c82da/jobs?branchName=master&preview=true" \
-d '{"orderBy":[{"sortType":"BY_STARTED_TIME","sortDirection":"DESCENDING"}],"where":{"type":"timeFilter","field":"SUBMITTED_TIME","comparisonType":"GTE","value":"2020-09-30T14:30:00Z"}}'
Python
Requests 라이브러리가 설치된 Python 환경에서 사용합니다.
import os
import requests
HOSTNAME = os.environ["FOUNDRY_HOST"]
TOKEN = os.environ["FOUNDRY_TOKEN"]
headers = {
"content-type": "application/json",
"authorization": "Bearer {}".format(TOKEN)
}
request_body = {
"orderBy": [
{
"sortType": "BY_STARTED_TIME",
"sortDirection": "DESCENDING"
}
],
"where": {
"type": "timeFilter",
"field": "SUBMITTED_TIME",
"comparisonType": "GTE",
"value": "2020-09-30T14:30:00Z"
}
}
response = requests.post('https://{}/api/v2/datasets/ri.foundry.main.dataset.c26f11c8-cdb3-4f44-9f5d-9816ea1c82da/jobs?branchName=master&preview=true'.format(HOSTNAME), headers=headers, json=request_body)
print(response)
Java
Apache HttpClient 4.5 API와 try-with-resources를 사용하는 예제입니다. 클래스 이름에 맞는 GetDatasetJobsExample.java 파일에서 사용합니다.
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
public class GetDatasetJobsExample {
public static void main(String[] args) throws Exception {
String HOSTNAME = System.getenv("FOUNDRY_HOST");
String TOKEN = System.getenv("FOUNDRY_TOKEN");
try (CloseableHttpClient httpClient = HttpClientBuilder.create().build()) {
HttpPost request = new HttpPost("https://" + HOSTNAME + "/api/v2/datasets/ri.foundry.main.dataset.c26f11c8-cdb3-4f44-9f5d-9816ea1c82da/jobs?branchName=master&preview=true");
request.addHeader("content-type", "application/json");
request.addHeader("authorization", String.format("Bearer %s", TOKEN));
request.setEntity(new StringEntity("{\"orderBy\":[{\"sortType\":\"BY_STARTED_TIME\",\"sortDirection\":\"DESCENDING\"}],\"where\":{\"type\":\"timeFilter\",\"field\":\"SUBMITTED_TIME\",\"comparisonType\":\"GTE\",\"value\":\"2020-09-30T14:30:00Z\"}}", ContentType.APPLICATION_JSON));
try (CloseableHttpResponse response = httpClient.execute(request)) {
System.out.println(response);
}
}
}
}
JavaScript
fetch를 제공하는 Node.js 환경에서 사용합니다. 서비스 사용자 토큰을 브라우저로 전달하지 않습니다.
const HOSTNAME = process.env.FOUNDRY_HOST;
const TOKEN = process.env.FOUNDRY_TOKEN;
fetch(`https://${HOSTNAME}/api/v2/datasets/ri.foundry.main.dataset.c26f11c8-cdb3-4f44-9f5d-9816ea1c82da/jobs?branchName=master&preview=true`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${TOKEN}`,
},
body: '{"orderBy":[{"sortType":"BY_STARTED_TIME","sortDirection":"DESCENDING"}],"where":{"type":"timeFilter","field":"SUBMITTED_TIME","comparisonType":"GTE","value":"2020-09-30T14:30:00Z"}}'
}).then((response) => {
console.log(response)
});
PowerShell
$TOKEN = $env:FOUNDRY_TOKEN
$HOSTNAME = $env:FOUNDRY_HOST
$headers = @{
"authorization" = "Bearer $TOKEN"
}
$response = Invoke-WebRequest -Uri "https://$HOSTNAME/api/v2/datasets/ri.foundry.main.dataset.c26f11c8-cdb3-4f44-9f5d-9816ea1c82da/jobs?branchName=master&preview=true" `
-Method Post `
-Headers $headers `
-ContentType application/json `
-Body "{`"orderBy`":[{`"sortType`":`"BY_STARTED_TIME`",`"sortDirection`":`"DESCENDING`"}],`"where`":{`"type`":`"timeFilter`",`"field`":`"SUBMITTED_TIME`",`"comparisonType`":`"GTE`",`"value`":`"2020-09-30T14:30:00Z`"}}"
$response.content