A Batch Ingestion API permite que você ingira dados no Adobe Experience Platform como arquivos em lote. Os dados que estão sendo ingeridos podem ser os dados do perfil de um arquivo simples em um sistema CRM (como um arquivo parquet) ou dados que estão em conformidade com um schema conhecido no registro Experience Data Model (XDM).
A referência da API de ingestão de dados fornece informações adicionais sobre essas chamadas de API.
O diagrama a seguir descreve o processo de ingestão em lote:
A Data Ingestion API permite que você ingira dados como lotes (uma unidade de dados que consiste em um ou mais arquivos para serem ingeridos como uma única unidade) Experience Platform em três etapas básicas:
Para carregar um arquivo maior que 512 MB, o arquivo precisará ser dividido em partes menores. As instruções para carregar um arquivo grande podem ser encontradas aqui.
Este guia fornece exemplos de chamadas de API para demonstrar como formatar suas solicitações. Isso inclui caminhos, cabeçalhos necessários e cargas de solicitação formatadas corretamente. O JSON de amostra retornado em respostas de API também é fornecido. Para obter informações sobre as convenções usadas na documentação para chamadas de API de amostra, consulte a seção sobre como ler chamadas de API de exemplo no guia de Experience Platform solução de problemas.
Para fazer chamadas para Platform APIs, você deve primeiro concluir o tutorial deautenticação. A conclusão do tutorial de autenticação fornece os valores para cada um dos cabeçalhos necessários em todas as chamadas de Experience Platform API, como mostrado abaixo:
{ACCESS_TOKEN}
{API_KEY}
{IMS_ORG}
Todos os recursos em Experience Platform são isolados para caixas de proteção virtuais específicas. Todas as solicitações para Platform APIs exigem um cabeçalho que especifique o nome da caixa de proteção em que a operação ocorrerá:
{SANDBOX_NAME}
Para obter mais informações sobre caixas de proteção em Platform, consulte a documentação de visão geral dacaixa de proteção.
Todas as solicitações que contêm uma carga (POST, PUT, PATCH) exigem um cabeçalho adicional:
Antes que os dados possam ser adicionados a um conjunto de dados, eles devem estar vinculados a um lote, que será carregado posteriormente em um conjunto de dados especificado.
POST /batches
Solicitação
curl -X POST "https://platform.adobe.io/data/foundation/import/batches" \
-H "Content-Type: application/json" \
-H "x-gw-ims-org-id: {IMS_ORG}" \
-H "x-sandbox-name: {SANDBOX_NAME}" \
-H "Authorization: Bearer {ACCESS_TOKEN}" \
-H "x-api-key : {API_KEY}"
-d '{
"datasetId": "{DATASET_ID}"
}'
Propriedade | Descrição |
---|---|
datasetId |
A ID do conjunto de dados no qual os arquivos serão carregados. |
Resposta
{
"id": "{BATCH_ID}",
"imsOrg": "{IMS_ORG}",
"updated": 0,
"status": "loading",
"created": 0,
"relatedObjects": [
{
"type": "dataSet",
"id": "{DATASET_ID}"
}
],
"version": "1.0.0",
"tags": {},
"createdUser": "{USER_ID}",
"updatedUser": "{USER_ID}"
}
Propriedade | Descrição |
---|---|
id |
A ID do lote que acabou de ser criado (usada em solicitações subsequentes). |
relatedObjects.id |
A ID do conjunto de dados no qual os arquivos serão carregados. |
Depois de criar com êxito um novo lote para upload, os arquivos podem ser carregados em um conjunto de dados específico.
Você pode carregar arquivos usando a API de Upload de Arquivo Pequeno. No entanto, se os arquivos forem muito grandes e o limite do gateway for excedido (como tempos limite estendidos, solicitações de tamanho de corpo excedido e outras restrições), você poderá alternar para a API de Upload de Arquivo Grande. Essa API carrega o arquivo em blocos e une os dados usando a chamada API Large File Upload Complete.
Os exemplos abaixo usam o formato de arquivo parquet . Um exemplo que usa o formato de arquivo JSON pode ser encontrado no guia do desenvolvedor de ingestão emlote.
Depois que um lote é criado, os dados podem ser carregados em um conjunto de dados preexistente. O arquivo que está sendo carregado deve corresponder ao schema XDM referenciado.
PUT /batches/{BATCH_ID}/datasets/{DATASET_ID}/files/{FILE_NAME}
Propriedade | Descrição |
---|---|
{BATCH_ID} |
A ID do lote. |
{DATASET_ID} |
A ID do conjunto de dados para carregar arquivos. |
{FILE_NAME} |
O nome do arquivo como ele será visto no conjunto de dados. |
Solicitação
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: {IMS_ORG}" \
-H "x-sandbox-name: {SANDBOX_NAME}" \
-H "Authorization: Bearer {ACCESS_TOKEN}" \
-H "x-api-key : {API_KEY}" \
--data-binary "@{FILE_PATH_AND_NAME}.parquet"
Propriedade | Descrição |
---|---|
{FILE_PATH_AND_NAME} |
O caminho e o nome do arquivo a ser carregado no conjunto de dados. |
Resposta
#Status 200 OK, with empty response body
Para carregar um arquivo grande, o arquivo deve ser dividido em partes menores e carregado um de cada vez.
POST /batches/{BATCH_ID}/datasets/{DATASET_ID}/files/{FILE_NAME}?action=initialize
Propriedade | Descrição |
---|---|
{BATCH_ID} |
A ID do lote. |
{DATASET_ID} |
A ID do conjunto de dados que está assimilando os arquivos. |
{FILE_NAME} |
O nome do arquivo como ele será visto no conjunto de dados. |
Solicitação
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: {IMS_ORG}" \
-H "x-sandbox-name: {SANDBOX_NAME}" \
-H "Authorization: Bearer {ACCESS_TOKEN}" \
-H "x-api-key: {API_KEY}"
Resposta
#Status 201 CREATED, with empty response body
Depois que o arquivo é criado, todos os blocos subsequentes podem ser carregados fazendo solicitações PATCH repetidas, uma para cada seção do arquivo.
PATCH /batches/{BATCH_ID}/datasets/{DATASET_ID}/files/{FILE_NAME}
Propriedade | Descrição |
---|---|
{BATCH_ID} |
A ID do lote. |
{DATASET_ID} |
A ID do conjunto de dados no qual os arquivos serão carregados. |
{FILE_NAME} |
Nome do arquivo como será visto no conjunto de dados. |
Solicitação
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: {IMS_ORG}" \
-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"
Propriedade | Descrição |
---|---|
{FILE_PATH_AND_NAME} |
O caminho e o nome do arquivo a ser carregado no conjunto de dados. |
Resposta
#Status 200 OK, with empty response
Depois que todos os arquivos forem carregados no lote, o lote poderá ser sinalizado para conclusão. Ao fazer isso, as entradas Catalog DataSetFile são criadas para os arquivos concluídos e associadas ao lote gerado acima. O Catalog lote é marcado como bem-sucedido, o que aciona os fluxos downstream para assimilar os dados disponíveis.
Solicitação
POST /batches/{BATCH_ID}?action=COMPLETE
Propriedade | Descrição |
---|---|
{BATCH_ID} |
A ID do lote a ser carregado no conjunto de dados. |
curl -X POST "https://platform.adobe.io/data/foundation/import/batches/{BATCH_ID}?action=COMPLETE" \
-H "x-gw-ims-org-id: {IMS_ORG}" \
-H "x-sandbox-name: {SANDBOX_NAME}" \
-H "Authorization: Bearer {ACCESS_TOKEN}" \
-H "x-api-key : {API_KEY}"
Resposta
#Status 200 OK, with empty response
Enquanto espera que os arquivos sejam carregados para o lote, o status do lote pode ser verificado para ver seu progresso.
Formato da API
GET /batch/{BATCH_ID}
Propriedade | Descrição |
---|---|
{BATCH_ID} |
A ID do lote que está sendo verificado. |
Solicitação
curl GET "https://platform.adobe.io/data/foundation/catalog/batch/{BATCH_ID}" \
-H "Authorization: Bearer {ACCESS_TOKEN}" \
-H "x-gw-ims-org-id: {IMS_ORG}" \
-H "x-sandbox-name: {SANDBOX_NAME}" \
-H "x-api-key: {API_KEY}"
Resposta
{
"{BATCH_ID}": {
"imsOrg": "{IMS_ORG}",
"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"
}
}
}
Propriedade | Descrição |
---|---|
{USER_ID} |
A ID do usuário que criou ou atualizou o lote. |
O "status"
campo é o que mostra o status atual do lote solicitado. Os lotes podem ter um dos seguintes estados:
Status | Descrição |
---|---|
Abandonado | O lote não foi concluído no período de tempo esperado. |
Abortado | Uma operação abort foi chamada explicitamente (por meio da API de assimilação em lote) para o lote especificado. Quando o lote estiver em um estado "Carregado", ele não poderá ser abortado. |
Ativo | O lote foi promovido com êxito e está disponível para consumo a jusante. Esse status pode ser usado alternadamente com "Sucesso". |
Excluído | Os dados do lote foram completamente removidos. |
Falha | Um estado de terminal que resulta de uma configuração incorreta e/ou de dados inválidos. Os dados de um lote com falha não serão exibidos. Esse status pode ser usado alternadamente com "Falha". |
Inativo | O lote foi promovido com êxito, mas foi revertido ou expirou. O lote não está mais disponível para consumo a jusante. |
Carregado | Os dados do lote estão completos e o lote está pronto para promoção. |
Carregando | Os dados para este lote estão sendo carregados e o lote não está pronto para ser promovido no momento. |
Tentando novamente | Os dados deste lote estão sendo processados. No entanto, devido a um erro transitório ou do sistema, o lote falhou - como resultado, esse lote está sendo repetido. |
Preparado | A fase de preparo do processo de promoção para um lote está concluída e o trabalho de ingestão foi executado. |
Armazenamento temporário | Os dados do lote estão sendo processados. |
Parado | Os dados do lote estão sendo processados. No entanto, a promoção em lote parou após várias tentativas. |