일괄 처리 수집 API 개요
Adobe Experience Platform 일괄 처리 수집 API 를 사용하면 데이터를 플랫폼에 일괄 처리 파일로 수집할 수 있습니다. 수집되는 데이터는 플랫 파일(예: Parquet 파일)의 프로필 데이터이거나 Experience Data Model (XDM) 레지스트리의 알려진 스키마를 준수하는 데이터일 수 있습니다.
일괄 처리 수집 API 참조에서 이러한 API 호출에 대한 추가 정보를 제공합니다.
다음 다이어그램은 일괄 처리 수집 프로세스를 간략하게 설명합니다.
시작하기
이 안내서에 사용된 API 끝점은 일괄 처리 수집 API의 일부입니다. 계속하기 전에 시작 안내서를 검토하여 관련 문서에 대한 링크, 이 문서의 샘플 API 호출 읽기 지침 및 Experience Platform API를 성공적으로 호출하는 데 필요한 필수 헤더에 대한 중요 정보를 확인하십시오.
Data Ingestion개 필수 구성 요소
- 업로드할 데이터는 Parquet 또는 JSON 형식이어야 합니다.
- Catalog services에서 만들어진 데이터 세트입니다.
- Parquet 파일의 콘텐츠는 업로드할 데이터 세트 스키마의 하위 집합과 일치해야 합니다.
- 인증 후에는 고유한 액세스 토큰을 보유하십시오.
일괄 처리 수집 모범 사례
- 권장되는 배치 크기는 256MB에서 100GB 사이입니다.
- 각 배치에는 최대 1,500개의 파일이 포함되어야 합니다.
일괄 처리 수집 제한
일괄 데이터 수집에는 몇 가지 제한 사항이 있습니다.
- 배치당 최대 파일 수: 1500
- 최대 배치 크기: 100GB
- 행당 최대 속성 또는 필드 수: 10000
- 분당 데이터 레이크의 사용자당 최대 배치 수: 2000
유형
데이터를 수집할 때 Experience Data Model (XDM) 스키마가 작동하는 방식을 이해하는 것이 중요합니다. XDM 필드 유형이 다른 형식으로 매핑되는 방법에 대한 자세한 내용은 스키마 레지스트리 개발자 안내서를 참조하십시오.
데이터 수집 시 약간의 유연성이 있습니다. 유형이 대상 스키마의 유형과 일치하지 않으면 데이터는 표현된 대상 유형으로 변환됩니다. 그렇지 않으면 TypeCompatibilityException
(으)로 일괄 처리가 실패합니다.
예를 들어 JSON과 CSV에 date
또는 date-time
유형이 없습니다. 그 결과, 이러한 값은 ISO 8601 형식의 문자열("2018-07-10T15:05:59.000-08:00") 또는 밀리초 형식의 Unix 시간(1531263959000)을 사용하여 표현되며 수집 시 대상 XDM 유형으로 변환됩니다.
아래 표는 데이터 수집 시 지원되는 전환을 보여 줍니다.
API 사용
Data Ingestion API를 사용하면 다음 세 가지 기본 단계를 통해 데이터를 Experience Platform에 배치(단일 단위로 수집할 하나 이상의 파일로 구성된 데이터 단위)로 수집할 수 있습니다.
- 새 배치를 만듭니다.
- 데이터의 XDM 스키마와 일치하는 지정된 데이터 세트에 파일을 업로드합니다.
- 일괄 처리 종료를 알립니다.
일괄 처리 만들기
데이터를 데이터 세트에 추가하려면 먼저 일괄 처리에 연결해야 하며, 나중에 지정된 데이터 세트에 업로드됩니다.
POST /batches
요청
curl -X POST "https://platform.adobe.io/data/foundation/import/batches" \
-H "Content-Type: application/json" \
-H "x-gw-ims-org-id: {ORG_ID}" \
-H "x-sandbox-name: {SANDBOX_NAME}" \
-H "Authorization: Bearer {ACCESS_TOKEN}" \
-H "x-api-key: {API_KEY}"
-d '{
"datasetId": "{DATASET_ID}"
}'
datasetId
응답
{
"id": "{BATCH_ID}",
"imsOrg": "{ORG_ID}",
"updated": 0,
"status": "loading",
"created": 0,
"relatedObjects": [
{
"type": "dataSet",
"id": "{DATASET_ID}"
}
],
"version": "1.0.0",
"tags": {},
"createdUser": "{USER_ID}",
"updatedUser": "{USER_ID}"
}
id
relatedObjects.id
파일 업로드
업로드할 새 배치를 생성하면 파일을 특정 데이터 세트에 업로드할 수 있습니다.
Small File Upload API를 사용하여 파일을 업로드할 수 있습니다. 그러나 파일이 너무 크고 게이트웨이 제한이 초과된 경우(예: 확장 시간 초과, 본문 크기 요청 초과 및 기타 제한) 대용량 파일 업로드 API로 전환할 수 있습니다. 이 API는 파일을 청크 단위로 업로드하며, 큰 파일 업로드 완료 API 호출을 사용하여 데이터를 함께 결합합니다.
작은 파일 업로드
일괄 처리가 생성되면 기존 데이터 세트에 데이터를 업로드할 수 있습니다. 업로드 중인 파일은 참조된 XDM 스키마와 일치해야 합니다.
PUT /batches/{BATCH_ID}/datasets/{DATASET_ID}/files/{FILE_NAME}
{BATCH_ID}
{DATASET_ID}
{FILE_NAME}
요청
curl -X PUT "https://platform.adobe.io/data/foundation/import/batches/{BATCH_ID}/datasets/{DATASET_ID}/files/{FILE_NAME}.parquet" \
-H "content-type: application/octet-stream" \
-H "x-gw-ims-org-id: {ORG_ID}" \
-H "x-sandbox-name: {SANDBOX_NAME}" \
-H "Authorization: Bearer {ACCESS_TOKEN}" \
-H "x-api-key: {API_KEY}" \
--data-binary "@{FILE_PATH_AND_NAME}.parquet"
{FILE_PATH_AND_NAME}
응답
#Status 200 OK, with empty response body
대용량 파일 업로드 - 파일 만들기
큰 파일을 업로드하려면 파일을 더 작은 청크로 분할하여 한 번에 하나씩 업로드해야 합니다.
POST /batches/{BATCH_ID}/datasets/{DATASET_ID}/files/{FILE_NAME}?action=initialize
{BATCH_ID}
{DATASET_ID}
{FILE_NAME}
요청
curl -X POST "https://platform.adobe.io/data/foundation/import/batches/{BATCH_ID}/datasets/{DATASET_ID}/files/part1=a/part2=b/{FILE_NAME}.parquet?action=initialize" \
-H "x-gw-ims-org-id: {ORG_ID}" \
-H "x-sandbox-name: {SANDBOX_NAME}" \
-H "Authorization: Bearer {ACCESS_TOKEN}" \
-H "x-api-key: {API_KEY}"
응답
#Status 201 CREATED, with empty response body
대용량 파일 업로드 - 후속 부분 업로드
파일이 만들어지면 파일의 각 섹션에 대해 하나씩 반복된 PATCH 요청을 수행하여 모든 후속 청크를 업로드할 수 있습니다.
PATCH /batches/{BATCH_ID}/datasets/{DATASET_ID}/files/{FILE_NAME}
{BATCH_ID}
{DATASET_ID}
{FILE_NAME}
요청
curl -X PATCH "https://platform.adobe.io/data/foundation/import/batches/{BATCH_ID}/datasets/{DATASET_ID}/files/part1=a/part2=b/{FILE_NAME}.parquet" \
-H "content-type: application/octet-stream" \
-H "x-gw-ims-org-id: {ORG_ID}" \
-H "x-sandbox-name: {SANDBOX_NAME}" \
-H "Authorization: Bearer {ACCESS_TOKEN}" \
-H "x-api-key: {API_KEY}" \
-H "Content-Range: bytes {CONTENT_RANGE}" \
--data-binary "@{FILE_PATH_AND_NAME}.parquet"
{FILE_PATH_AND_NAME}
응답
#Status 200 OK, with empty response
신호 일괄 처리 완료
모든 파일이 배치에 업로드되면 배치를 완료하라는 신호를 보낼 수 있습니다. 이렇게 하면 완료된 파일에 대해 Catalog DataSetFile 항목이 생성되고 위에서 생성된 배치와 연결됩니다. 그런 다음 Catalog 배치가 성공으로 표시되어 사용 가능한 데이터를 수집하도록 다운스트림 흐름을 트리거합니다.
요청
POST /batches/{BATCH_ID}?action=COMPLETE
{BATCH_ID}
curl -X POST "https://platform.adobe.io/data/foundation/import/batches/{BATCH_ID}?action=COMPLETE" \
-H "x-gw-ims-org-id: {ORG_ID}" \
-H "x-sandbox-name: {SANDBOX_NAME}" \
-H "Authorization: Bearer {ACCESS_TOKEN}" \
-H "x-api-key: {API_KEY}"
응답
#Status 200 OK, with empty response
배치 상태 확인
파일이 배치에 업로드되기를 기다리는 동안 배치 상태를 확인하여 진행 상황을 확인할 수 있습니다.
API 형식
GET /batch/{BATCH_ID}
{BATCH_ID}
요청
curl GET "https://platform.adobe.io/data/foundation/catalog/batch/{BATCH_ID}" \
-H "Authorization: Bearer {ACCESS_TOKEN}" \
-H "x-gw-ims-org-id: {ORG_ID}" \
-H "x-sandbox-name: {SANDBOX_NAME}" \
-H "x-api-key: {API_KEY}"
응답
{
"{BATCH_ID}": {
"imsOrg": "{ORG_ID}",
"created": 1494349962314,
"createdClient": "MCDPCatalogService",
"createdUser": "{USER_ID}",
"updatedUser": "{USER_ID}",
"updated": 1494349963467,
"externalId": "{EXTERNAL_ID}",
"status": "success",
"errors": [
{
"code": "err-1494349963436"
}
],
"version": "1.0.3",
"availableDates": {
"startDate": 1337,
"endDate": 4000
},
"relatedObjects": [
{
"type": "batch",
"id": "foo_batch"
},
{
"type": "connection",
"id": "foo_connection"
},
{
"type": "connector",
"id": "foo_connector"
},
{
"type": "dataSet",
"id": "foo_dataSet"
},
{
"type": "dataSetView",
"id": "foo_dataSetView"
},
{
"type": "dataSetFile",
"id": "foo_dataSetFile"
},
{
"type": "expressionBlock",
"id": "foo_expressionBlock"
},
{
"type": "service",
"id": "foo_service"
},
{
"type": "serviceDefinition",
"id": "foo_serviceDefinition"
}
],
"metrics": {
"foo": 1337
},
"tags": {
"foo_bar": [
"stuff"
],
"bar_foo": [
"woo",
"baz"
],
"foo/bar/foo-bar": [
"weehaw",
"wee:haw"
]
},
"inputFormat": {
"format": "parquet",
"delimiter": ".",
"quote": "`",
"escape": "\\",
"nullMarker": "",
"header": "true",
"charset": "UTF-8"
}
}
}
{USER_ID}
"status"
필드는 요청된 배치의 현재 상태를 보여 줍니다. 배치는 다음 상태 중 하나를 가질 수 있습니다.