Keyboard shortcuts

Press ← or → to navigate between chapters

Press ? to show this help

Press Esc to hide this help

상태 검사 교체(Replace Check) (V2)

지정한 검사 RID의 구성을 교체합니다. 이미 생성한 검사의 유형을 다른 유형으로 변경하는 작업은 지원하지 않습니다.

경로의 checkRid는 필수 문자열이며 쿼리의 preview=true로 프리뷰 사용을 지정합니다. 필수 ReplaceCheckRequest에는 필수 config와 선택적인 intent 문자열이 있습니다.

교체용 config

교체용 구성은 조회 및 생성용 구성에서 subject와 기존 대상 열 선택 필드를 제외한 형식입니다. type은 기존 검사와 같아야 합니다. 아래 필드는 별도 표시가 없으면 필수입니다.

type교체할 필드생성 구성과의 차이
numericColumnRangenumericBoundsConfigsubject와 columnName 없음
jobStatusstatusCheckConfigsubject 없음
numericColumnMeannumericColumnCheckConfigsubject와 내부 columnName 없음
dateColumnRangedateBoundsConfigsubject와 columnName 없음
jobDurationtimeCheckConfigsubject 없음
approximateUniquePercentagepercentageCheckConfigsubject와 내부 columnName 없음
buildStatusstatusCheckConfigsubject 없음
columnTypecolumnTypeConfigsubject와 내부 columnName 없음
allowedColumnValuesseverity, 선택적인 allowedValues와 allowNullsubject와 columnName 없음
timeSinceLastUpdated트랜잭션 시간용 timeCheckConfigsubject 없음
scheduleStatusstatusCheckConfigsubject 없음
nullPercentagepercentageCheckConfigsubject와 내부 columnName 없음
scheduleDurationtimeCheckConfigsubject 없음
totalColumnCountcolumnCountConfigsubject 없음
numericColumnMediannumericColumnCheckConfigsubject와 내부 columnName 없음
buildDurationtimeCheckConfigsubject 없음
schemaComparisonschemaComparisonConfigsubject 없음. 기대 스키마의 열 이름은 계속 지정
primaryKeyprimaryKeyConfigsubject와 내부 columnNames 없음. severity는 필수

제외한 대상 필드 외의 범위, 추세, 상태, 백분율, 스키마 비교와 심각도 필드는 검사 구성 자료형과 같습니다. 시간 구성에는 timeBounds 또는 medianDeviation, 백분율 구성에는 percentageBounds 또는 medianDeviation, 수치 구성에는 numericBounds 또는 trend, 추세에는 trendType 또는 differenceBounds 중 하나 이상이 필요합니다.

아래 요청은 기존 buildStatus 검사의 상태 조건을 교체하는 가상 예시입니다.

공개 프리뷰이며 쿼리의 preview를 true로 지정해야 합니다. 비운영 개발 용도로 사용하며 사전 통지 없이 변경되거나 제거될 수 있습니다.

HTTP 요청

PUT /api/v2/dataHealth/checks/{checkRid}

작업 식별자는 v2.replaceCheck입니다. Authorization: Bearer <접근 토큰> 헤더로 인증합니다. OAuth 클라이언트에는 api:data-health-write 권한 범위가 필요합니다.

JSON 요청 예시

기존 buildStatus 검사의 조건을 교체하는 가상 요청 예시입니다.

{
  "config": {
    "type": "buildStatus",
    "statusCheckConfig": {
      "severity": "MODERATE",
      "escalationConfig": {
        "failuresToCritical": 1,
        "timeIntervalInSeconds": "30"
      }
    }
  },
  "intent": "Check to ensure builds are passing."
}

응답 구조

응답은 Check입니다. rid와 config는 필수이며, groups, intent, createdBy, updatedTime은 선택 항목입니다.

필드자료형의미
ridstring검사 RID
configtagged union대상과 조건을 포함한 전체 검사 구성
groupslist<CheckGroupRid>검사 그룹 RID 목록
intentstring검사 목적
createdBystring생성 사용자 식별자
updatedTimeISO 8601 string마지막 갱신 시각

전체 18개 검사 유형과 중첩 필드, 범위, 추세와 심각도 조건은 검사 구성 자료형을 따릅니다.

가상 데이터셋의 빌드 상태 검사 응답 예시입니다.

{
  "updatedTime": "2024-09-25T17:29:35.974Z",
  "createdBy": "f05f8da4-b84c-4fca-9c77-8af0b13d11de",
  "groups": [
    "ri.data-health.main.check-group.08e376a8-607d-4f44-b8dd-b4587be6ce9b"
  ],
  "rid": "ri.data-health.main.check.8e27b13a-e21b-4232-ae1b-76ccf5ff42b3",
  "intent": "Check to ensure builds are passing.",
  "config": {
    "type": "buildStatus",
    "subject": {
      "datasetRid": "ri.foundry.main.dataset.c26f11c8-cdb3-4f44-9f5d-9816ea1c82da",
      "branchId": "master"
    },
    "statusCheckConfig": {
      "severity": "MODERATE",
      "escalationConfig": {
        "failuresToCritical": 1,
        "timeIntervalInSeconds": "30"
      }
    }
  }
}

개별 오류

오류 이름오류 코드HTTP의미와 조건추가 매개변수
ModifyingCheckTypeNotSupportedINVALID_ARGUMENT400생성한 검사의 유형을 변경할 수 없습니다.originalCheckType, newCheckType
InvalidTimeCheckConfigINVALID_ARGUMENT400timeBounds 또는 medianDeviation 중 적어도 하나가 필요합니다.없음
InvalidPercentageCheckConfigINVALID_ARGUMENT400percentageBounds 또는 medianDeviation 중 적어도 하나가 필요합니다.없음
InvalidNumericColumnCheckConfigINVALID_ARGUMENT400numericBounds 또는 trend 중 적어도 하나가 필요합니다.없음
InvalidTrendConfigINVALID_ARGUMENT400trendType 또는 differenceBounds 중 적어도 하나가 필요합니다.없음
InvalidTransactionTimeCheckConfigINVALID_ARGUMENT400트랜잭션 시간 구성에 timeBounds 또는 medianDeviation 중 적어도 하나가 필요합니다.없음
CheckTypeNotSupportedINVALID_ARGUMENT400요청한 검사 유형을 Platform API에서 아직 지원하지 않습니다.checkType
ReplaceCheckPermissionDeniedPERMISSION_DENIED403검사 교체 권한이 거부되었습니다.checkRid
CheckNotFoundNOT_FOUND404지정한 검사를 찾을 수 없습니다.checkRid

요청 예제

FOUNDRY_HOST에는 https://를 제외한 Foundry 호스트를, FOUNDRY_TOKEN에는 유효한 토큰을 환경 변수로 제공합니다. 아래 식별자와 입력값은 예시이므로 실제 요청 대상에 맞게 지정합니다.

cURL

curl -X PUT \
	-H "Content-type: application/json" \
	-H "Authorization: Bearer ${FOUNDRY_TOKEN}" \
	"https://${FOUNDRY_HOST}/api/v2/dataHealth/checks/ri.data-health.main.check.8e27b13a-e21b-4232-ae1b-76ccf5ff42b3?preview=true" \
	-d '{"config":{"type":"buildStatus","statusCheckConfig":{"severity":"MODERATE","escalationConfig":{"failuresToCritical":1,"timeIntervalInSeconds":"30"}}},"intent":"Check to ensure builds are passing."}'

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 = {'config': {'type': 'buildStatus',
            'statusCheckConfig': {'severity': 'MODERATE',
                                  'escalationConfig': {'failuresToCritical': 1,
                                                       'timeIntervalInSeconds': '30'}}},
 'intent': 'Check to ensure builds are passing.'}

response = requests.put('https://{}/api/v2/dataHealth/checks/ri.data-health.main.check.8e27b13a-e21b-4232-ae1b-76ccf5ff42b3?preview=true'.format(HOSTNAME), headers=headers, json=request_body)
print(response)

Java

Apache HttpClient 4.5 API와 try-with-resources를 사용하는 예제입니다. 클래스 이름에 맞는 ReplaceCheckExample.java 파일에서 사용합니다.

import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPut;
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 ReplaceCheckExample {
    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()) {
            HttpPut request = new HttpPut("https://" + HOSTNAME + "/api/v2/dataHealth/checks/ri.data-health.main.check.8e27b13a-e21b-4232-ae1b-76ccf5ff42b3?preview=true");
            request.addHeader("content-type", "application/json");
            request.addHeader("authorization", String.format("Bearer %s", TOKEN));
            request.setEntity(new StringEntity("{\"config\":{\"type\":\"buildStatus\",\"statusCheckConfig\":{\"severity\":\"MODERATE\",\"escalationConfig\":{\"failuresToCritical\":1,\"timeIntervalInSeconds\":\"30\"}}},\"intent\":\"Check to ensure builds are passing.\"}", 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/dataHealth/checks/ri.data-health.main.check.8e27b13a-e21b-4232-ae1b-76ccf5ff42b3?preview=true`, {
    method: 'PUT',
    headers: {
        'Content-Type': 'application/json',
        'Authorization': `Bearer ${TOKEN}`,
    },
    body: JSON.stringify({"config":{"type":"buildStatus","statusCheckConfig":{"severity":"MODERATE","escalationConfig":{"failuresToCritical":1,"timeIntervalInSeconds":"30"}}},"intent":"Check to ensure builds are passing."})
}).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/dataHealth/checks/ri.data-health.main.check.8e27b13a-e21b-4232-ae1b-76ccf5ff42b3?preview=true" `
	-Method Put `
	-Headers $headers `
	-ContentType application/json `
	-Body '{"config":{"type":"buildStatus","statusCheckConfig":{"severity":"MODERATE","escalationConfig":{"failuresToCritical":1,"timeIntervalInSeconds":"30"}}},"intent":"Check to ensure builds are passing."}'

$response.content