Keyboard shortcuts

Press ← or → to navigate between chapters

Press ? to show this help

Press Esc to hide this help

원시 파일 가져오기 생성(Create File Import) (V2)

지정한 Connection에서 외부 원시 파일을 가져오는 FileImport 구성을 만듭니다. 출력 데이터셋 RID와 수집 모드, 표시 이름이 필요합니다. 연결이 파일 가져오기를 지원해야 합니다.

출력 datasetRid와 branchName은 생성 후 바꿀 수 없습니다. 대부분의 플랫폼 인스턴스에서 브랜치 기본값은 master이며, 실제 대상 브랜치를 확인하여 지정합니다. 수집을 시작할 때는 Execute File Import를 사용합니다.

HTTP 요청

POST /api/v2/connectivity/connections/{connectionRid}/fileImports

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

경로 매개변수

이름자료형필수 여부의미와 조건예시 값
connectionRidstring필수소스라고도 부르는 Connection의 RID입니다.ri.magritte..source.c078b71b-92f9-41b6-b0df-3760f411120b

쿼리 매개변수

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

요청 본문

CreateFileImportRequest 본문은 필수입니다. subfolder를 생략하면 원천 루트 폴더가 대상이 됩니다. 필터의 정규식도 소스 루트 기준의 상대 경로를 사용합니다.

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

fileImportFilters의 구조

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

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

{
  "datasetRid": "ri.foundry.main.dataset.c26f11c8-cdb3-4f44-9f5d-9816ea1c82da",
  "importMode": "SNAPSHOT",
  "displayName": "My file import",
  "branchName": "master",
  "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의미와 조건추가 매개변수
ConnectionDetailsNotDeterminedINTERNAL500연결이 지원하는 가져오기 유형 등의 연결 정보를 확인하지 못했습니다.connectionRid, connectionType
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
FileImportNotSupportedForConnectionINVALID_ARGUMENT400해당 연결은 파일 가져오기를 지원하지 않습니다.connectionRid
DatasetNotFoundNOT_FOUND404데이터셋이 없거나 호출 토큰으로 접근할 수 없습니다.datasetRid
CreateFileImportPermissionDeniedPERMISSION_DENIED403파일 가져오기를 생성할 수 없습니다.connectionRid
ConnectionNotFoundNOT_FOUND404지정한 연결을 찾을 수 없습니다.connectionRid

요청 예제

FOUNDRY_HOST에는 https://를 제외한 Foundry 호스트를, FOUNDRY_TOKEN에는 유효한 토큰을 환경 변수로 제공합니다. 예시 식별자와 매개변수 값은 실제 작업 대상에 맞게 바꿉니다.

가상 하위 폴더 subfolder1/subfolder2를 선택하는 예제입니다. 정규식 subfolder1/subfolder2/.*도 같은 루트 기준 경로에 맞췄습니다. 데이터셋 RID, 브랜치, 폴더와 선택 조건은 실제 작업 대상으로 바꿉니다.

cURL

curl -X POST \
	-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" \
	-d '{"datasetRid":"ri.foundry.main.dataset.c26f11c8-cdb3-4f44-9f5d-9816ea1c82da","importMode":"SNAPSHOT","displayName":"My file import","branchName":"master","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 = {
    "datasetRid": "ri.foundry.main.dataset.c26f11c8-cdb3-4f44-9f5d-9816ea1c82da",
    "importMode": "SNAPSHOT",
    "displayName": "My file import",
    "branchName": "master",
    "subfolder": "subfolder1/subfolder2",
    "fileImportFilters": [
        {
            "type": "pathMatchesFilter",
            "regex": "subfolder1/subfolder2/.*"
        }
    ]
}

response = requests.post('https://{}/api/v2/connectivity/connections/ri.magritte..source.c078b71b-92f9-41b6-b0df-3760f411120b/fileImports'.format(HOSTNAME), headers=headers, json=request_body)
print(response)

Java

Apache HttpClient 4.5 API와 try-with-resources를 사용합니다. 클래스 이름에 맞는 CreateFileImportExample.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 CreateFileImportExample {
    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/connectivity/connections/ri.magritte..source.c078b71b-92f9-41b6-b0df-3760f411120b/fileImports");
            request.addHeader("content-type", "application/json");
            request.addHeader("authorization", String.format("Bearer %s", TOKEN));
            request.setEntity(new StringEntity("{\"datasetRid\":\"ri.foundry.main.dataset.c26f11c8-cdb3-4f44-9f5d-9816ea1c82da\",\"importMode\":\"SNAPSHOT\",\"displayName\":\"My file import\",\"branchName\":\"master\",\"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`, {
    method: 'POST',
    headers: {
        'Content-Type': 'application/json',
        'Authorization': `Bearer ${TOKEN}`,
    },
    body: '{"datasetRid":"ri.foundry.main.dataset.c26f11c8-cdb3-4f44-9f5d-9816ea1c82da","importMode":"SNAPSHOT","displayName":"My file import","branchName":"master","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" `
	-Method Post `
	-Headers $headers `
	-ContentType application/json `
	-Body "{`"datasetRid`":`"ri.foundry.main.dataset.c26f11c8-cdb3-4f44-9f5d-9816ea1c82da`",`"importMode`":`"SNAPSHOT`",`"displayName`":`"My file import`",`"branchName`":`"master`",`"subfolder`":`"subfolder1/subfolder2`",`"fileImportFilters`":[{`"type`":`"pathMatchesFilter`",`"regex`":`"subfolder1/subfolder2/.*`"}]}"

$response.content