Keyboard shortcuts

Press ← or → to navigate between chapters

Press ? to show this help

Press Esc to hide this help

파일 가져오기 구성 교체(Replace File Import) (V2)

기존 FileImport의 수집 모드, 표시 이름, 하위 폴더와 필터 구성을 교체합니다. 출력 데이터셋 RID와 브랜치 이름은 생성 후 바꿀 수 없으며 이 요청 본문에도 포함하지 않습니다.

유지하려는 하위 폴더와 필터를 포함하여 원하는 구성을 지정합니다. subfolder를 생략하면 원천 루트 폴더가 기본 대상입니다. 사용자 지정 customFilter는 조회만 가능하므로 대체 요청에 넣을 수 없습니다.

HTTP 요청

PUT /api/v2/connectivity/connections/{connectionRid}/fileImports/{fileImportRid}

작업 식별자는 v2.replaceFileImport입니다. OAuth2로 호출하는 타사 애플리케이션에는 api:connectivity-file-import-write 권한 범위가 필요합니다. 각 요청에 Authorization: Bearer <접근 토큰>을 전달합니다.

경로 매개변수

이름자료형필수 여부의미와 조건예시 값
connectionRidstring필수소스라고도 부르는 Connection의 RID입니다.ri.magritte..source.c078b71b-92f9-41b6-b0df-3760f411120b
fileImportRidstring필수배치 동기화라고도 부르는 FileImport의 RID입니다.ri.magritte..extract.27bb4f2b-63b8-44b8-a579-4e2bd65ba158

쿼리 매개변수

지정할 쿼리 매개변수가 없습니다.

요청 본문

본문 형식은 ReplaceFileImportRequest이며 필수입니다.

이름자료형필수 여부의미와 조건예시 값
importModeenum필수원시 파일을 읽고 출력 데이터셋에 반영하는 방식입니다. SNAPSHOT은 이번 실행의 파일만으로 새 데이터셋 상태를 구성합니다. APPEND는 이전 실행의 데이터에 새 파일을 추가합니다. UPDATE는 파일 이름을 기준으로 기존 파일을 교체합니다. 허용값: SNAPSHOT, APPEND, UPDATE.SNAPSHOT
displayNamestring필수My file import
subfolderstring선택외부 시스템에서 가져올 하위 폴더입니다. 생략하면 외부 시스템의 루트 폴더를 사용합니다.subfolder1/subfolder2
fileImportFilterslist<FileImportFilter>선택가져올 파일을 제한하는 필터 목록입니다. 지정한 순서대로 적용하며 순서에 따라 가져오기 성능이 달라질 수 있습니다.

fileImportFilters의 구조

파일 가져오기 필터의 9가지 유형은 type 필드로 구분합니다. 배열 순서대로 원천 파일에 적용하며 customFilter는 조회 전용입니다.

다음 본문의 식별자와 값은 가상 예시입니다.

{
  "importMode": "SNAPSHOT",
  "displayName": "My file import",
  "subfolder": "subfolder1/subfolder2",
  "fileImportFilters": [
    {
      "type": "pathMatchesFilter",
      "regex": "subfolder1/subfolder2/.*"
    }
  ]
}

응답

응답 형식은 FileImport입니다.

이름자료형필수 여부의미와 조건예시 값
ridstring필수배치 동기화라고도 부르는 FileImport의 RID입니다.ri.magritte..extract.27bb4f2b-63b8-44b8-a579-4e2bd65ba158
connectionRidstring필수이 파일 가져오기가 사용하는 Connection, 즉 소스의 RID입니다.ri.magritte..source.c078b71b-92f9-41b6-b0df-3760f411120b
datasetRidstring필수출력 데이터셋의 RID입니다. 파일 가져오기를 생성한 뒤에는 바꿀 수 없습니다.ri.foundry.main.dataset.c26f11c8-cdb3-4f44-9f5d-9816ea1c82da
branchNamestring선택수집한 데이터를 담을 출력 데이터셋 브랜치입니다. 대부분의 플랫폼 인스턴스에서는 기본값이 master입니다. 파일 가져오기를 생성한 뒤에는 바꿀 수 없습니다.master
displayNamestring필수My file import
fileImportFilterslist<FileImportFilter>선택가져올 파일을 제한하는 필터 목록입니다. 지정한 순서대로 적용하며 순서에 따라 가져오기 성능이 달라질 수 있습니다.
importModeenum필수원시 파일을 읽고 출력 데이터셋에 반영하는 방식입니다. SNAPSHOT은 이번 실행의 파일만으로 새 데이터셋 상태를 구성합니다. APPEND는 이전 실행의 데이터에 새 파일을 추가합니다. UPDATE는 파일 이름을 기준으로 기존 파일을 교체합니다. 허용값: SNAPSHOT, APPEND, UPDATE.SNAPSHOT
subfolderstring선택외부 시스템에서 가져올 하위 폴더입니다. 생략하면 외부 시스템의 루트 폴더를 사용합니다.subfolder1/subfolder2

fileImportFilters의 구조

필터 항목의 구조는 요청과 같습니다. 기존 설정의 customFilter도 조회할 수 있습니다.

가상의 파일 가져오기 구성을 교체했을 때의 응답 예시입니다.

{
  "datasetRid": "ri.foundry.main.dataset.c26f11c8-cdb3-4f44-9f5d-9816ea1c82da",
  "importMode": "SNAPSHOT",
  "displayName": "My file import",
  "connectionRid": "ri.magritte..source.c078b71b-92f9-41b6-b0df-3760f411120b",
  "branchName": "master",
  "subfolder": "subfolder1/subfolder2",
  "rid": "ri.magritte..extract.27bb4f2b-63b8-44b8-a579-4e2bd65ba158",
  "fileImportFilters": [
    {
      "type": "pathMatchesFilter",
      "regex": "subfolder1/subfolder2/.*"
    }
  ]
}

개별 오류

오류 이름오류 코드HTTP의미와 조건추가 매개변수
FileSizeFilterMissingGreaterThanAndLessThanINVALID_ARGUMENT400파일 크기 필터의 gt와 lt가 모두 없습니다. 하나 이상을 지정해야 합니다.
FileSizeFilterGreaterThanCannotBeNegativeINVALID_ARGUMENT400파일 크기 필터의 gt는 음수일 수 없습니다.gt
FileSizeFilterLessThanMustBeOneByteOrLargerINVALID_ARGUMENT400파일 크기 필터의 lt는 1바이트 이상이어야 합니다.lt
FileSizeFilterInvalidGreaterThanAndLessThanRangeINVALID_ARGUMENT400gt와 lt 범위를 만족할 파일 크기가 없습니다. gt < lt - 1을 충족해야 합니다.gt, lt
FileAtLeastCountFilterInvalidMinCountINVALID_ARGUMENT400최소 파일 수 필터의 minFilesCount는 0보다 커야 합니다.minFilesCount
FileImportCustomFilterCannotBeUsedToCreateOrUpdateFileImportsINVALID_ARGUMENT400사용자 지정 필터는 조회만 가능하며 현재 파일 가져오기 생성이나 갱신에 사용할 수 없습니다.config
ReplaceFileImportPermissionDeniedPERMISSION_DENIED403파일 가져오기 구성을 교체할 수 없습니다.fileImportRid, connectionRid
FileImportNotFoundNOT_FOUND404지정한 파일 가져오기를 찾을 수 없습니다.fileImportRid, connectionRid

요청 예제

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/connectivity/connections/ri.magritte..source.c078b71b-92f9-41b6-b0df-3760f411120b/fileImports/ri.magritte..extract.27bb4f2b-63b8-44b8-a579-4e2bd65ba158" \
	-d '{"importMode":"SNAPSHOT","displayName":"My file import","subfolder":"subfolder1/subfolder2","fileImportFilters":[{"type":"pathMatchesFilter","regex":"subfolder1/subfolder2/.*"}]}'

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 = {
    "importMode": "SNAPSHOT",
    "displayName": "My file import",
    "subfolder": "subfolder1/subfolder2",
    "fileImportFilters": [
        {
            "type": "pathMatchesFilter",
            "regex": "subfolder1/subfolder2/.*"
        }
    ]
}

response = requests.put('https://{}/api/v2/connectivity/connections/ri.magritte..source.c078b71b-92f9-41b6-b0df-3760f411120b/fileImports/ri.magritte..extract.27bb4f2b-63b8-44b8-a579-4e2bd65ba158'.format(HOSTNAME), headers=headers, json=request_body)
print(response)

Java

Apache HttpClient 4.5 API와 try-with-resources를 사용합니다. 클래스 이름에 맞는 ReplaceFileImportExample.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 ReplaceFileImportExample {
    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/connectivity/connections/ri.magritte..source.c078b71b-92f9-41b6-b0df-3760f411120b/fileImports/ri.magritte..extract.27bb4f2b-63b8-44b8-a579-4e2bd65ba158");
            request.addHeader("content-type", "application/json");
            request.addHeader("authorization", String.format("Bearer %s", TOKEN));
            request.setEntity(new StringEntity("{\"importMode\":\"SNAPSHOT\",\"displayName\":\"My file import\",\"subfolder\":\"subfolder1/subfolder2\",\"fileImportFilters\":[{\"type\":\"pathMatchesFilter\",\"regex\":\"subfolder1/subfolder2/.*\"}]}", 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/connectivity/connections/ri.magritte..source.c078b71b-92f9-41b6-b0df-3760f411120b/fileImports/ri.magritte..extract.27bb4f2b-63b8-44b8-a579-4e2bd65ba158`, {
    method: 'PUT',
    headers: {
        'Content-Type': 'application/json',
        'Authorization': `Bearer ${TOKEN}`,
    },
    body: '{"importMode":"SNAPSHOT","displayName":"My file import","subfolder":"subfolder1/subfolder2","fileImportFilters":[{"type":"pathMatchesFilter","regex":"subfolder1/subfolder2/.*"}]}'
}).then((response) => {
    console.log(response)
});

PowerShell

$ErrorActionPreference = 'Stop'
$TOKEN = $env:FOUNDRY_TOKEN
$HOSTNAME = $env:FOUNDRY_HOST

$headers = @{
    "authorization" = "Bearer $TOKEN"
}

$response = Invoke-WebRequest -Uri "https://$HOSTNAME/api/v2/connectivity/connections/ri.magritte..source.c078b71b-92f9-41b6-b0df-3760f411120b/fileImports/ri.magritte..extract.27bb4f2b-63b8-44b8-a579-4e2bd65ba158" `
	-Method Put `
	-Headers $headers `
	-ContentType application/json `
	-Body "{`"importMode`":`"SNAPSHOT`",`"displayName`":`"My file import`",`"subfolder`":`"subfolder1/subfolder2`",`"fileImportFilters`":[{`"type`":`"pathMatchesFilter`",`"regex`":`"subfolder1/subfolder2/.*`"}]}"

$response.content