A API de assimilação em lote do Adobe Experience Platform permite assimilar dados na Platform como arquivos em lote. Os dados assimilados podem ser dados de perfil de um arquivo simples (como um arquivo Parquet) ou dados que estejam em conformidade com um esquema conhecido no Experience Data Model Registro do (XDM).
A variável Referência da API de assimilação em lote O fornece informações adicionais sobre essas chamadas de API.
O diagrama a seguir descreve o processo de assimilação em lote:
Os endpoints de API usados neste guia fazem parte do API de assimilação em lote. Antes de continuar, reveja o guia de introdução para obter links para a documentação relacionada, um guia para ler as chamadas de API de exemplo neste documento e informações importantes sobre os cabeçalhos necessários para fazer chamadas com êxito para qualquer API de Experience Platform.
A assimilação de dados em lote tem algumas restrições:
Para carregar um arquivo com mais de 512 MB, ele precisará ser dividido em partes menores. As instruções para carregar um arquivo grande podem ser encontradas no seção de upload de arquivo grande deste documento.
Ao assimilar dados, é importante entender como Experience Data Model Os esquemas de (XDM) funcionam. Para obter mais informações sobre como os tipos de campo XDM são mapeados para formatos diferentes, leia a Guia do desenvolvedor do Registro de esquema.
Há alguma flexibilidade ao assimilar dados - se um tipo não corresponder ao que está no esquema do público-alvo, os dados serão convertidos no tipo de público-alvo expresso. Se não puder, ocorrerá falha no lote com uma TypeCompatibilityException
.
Por exemplo, nem o JSON nem o CSV têm um date
ou date-time
tipo. Como resultado, esses valores são expressos usando Strings formatadas em ISO 8061 ("2018-07-10T15:05:59.000-08:00") ou Horário Unix formatado em milissegundos (1531263959000) e convertido no momento da assimilação para o tipo XDM de destino.
A tabela abaixo mostra as conversões compatíveis ao assimilar dados.
Entrada (linha) vs. Destino (coluna) | String | Byte | Short | Número inteiro | Longo | Duplo | Data | Data e hora | Objeto | Mapa |
---|---|---|---|---|---|---|---|---|---|---|
String | X | X | X | X | X | X | X | X | ||
Byte | X | X | X | X | X | X | ||||
Short | X | X | X | X | X | X | ||||
Número inteiro | X | X | X | X | X | X | ||||
Longo | X | X | X | X | X | X | X | X | ||
Duplo | X | X | X | X | X | X | ||||
Data | X | |||||||||
Data e hora | X | |||||||||
Objeto | X | X | ||||||||
Mapa | X | X |
Booleanos e matrizes não podem ser convertidos em outros tipos.
A variável Data Ingestion A API permite assimilar dados como lotes (uma unidade de dados que consiste em um ou mais arquivos que serão assimilados como uma única unidade) no Experience Platform em três etapas básicas:
Para 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: {ORG_ID}" \
-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 para onde carregar os arquivos. |
Resposta
{
"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}"
}
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 para onde carregar os arquivos. |
Depois de criar um novo lote para upload com sucesso, os arquivos podem ser carregados para um conjunto de dados específico.
É possível fazer upload de 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 do corpo excedido e outras restrições), você poderá alternar para a API de upload de arquivo grande. Essa API faz upload do arquivo em partes e compila os dados usando a chamada de API Upload de arquivo grande concluído.
A assimilação em lote pode ser usada para atualizar dados de forma incremental na Loja de perfis. Para obter mais informações, consulte a seção sobre atualização de um lote no guia do desenvolvedor de assimilação em lote.
Os exemplos abaixo usam o Apache Parquet formato de arquivo. Um exemplo que usa o formato de arquivo JSON pode ser encontrado no guia do desenvolvedor de assimilação em lote.
Após a criação de um lote, os dados podem ser carregados em um conjunto de dados preexistente. O arquivo que está sendo carregado deve corresponder ao esquema 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: {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"
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, ele deve ser dividido em partes menores e carregado uma 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 assimila 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: {ORG_ID}" \
-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
Após a criação do arquivo, é possível fazer upload de todos os blocos subsequentes 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 para onde carregar os arquivos. |
{FILE_NAME} |
Nome do arquivo como ele 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: {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"
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 tiverem sido carregados no lote, o lote poderá ser marcado para conclusão. Ao fazer isso, o Catalog As entradas DataSetFile são criadas para os arquivos concluídos e associadas ao lote gerado acima. A variável Catalog Em seguida, o lote é marcado como bem-sucedido, o que aciona 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: {ORG_ID}" \
-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 aguarda os arquivos serem carregados no 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: {ORG_ID}" \
-H "x-sandbox-name: {SANDBOX_NAME}" \
-H "x-api-key: {API_KEY}"
Resposta
{
"{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"
}
}
}
Propriedade | Descrição |
---|---|
{USER_ID} |
A ID do usuário que criou ou atualizou o lote. |
A variável "status"
é 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 prazo esperado. |
Anulado | Uma operação de anulação foi explicitamente (por meio da API de assimilação em lote) do lote especificado. Quando o lote estiver no estado "Carregado", ele não poderá ser abortado. |
Ativo | O lote foi promovido com sucesso e está disponível para consumo downstream. Esse status pode ser usado alternadamente com "Sucesso". |
Excluído | Os dados do lote foram completamente removidos. |
Falha | Um estado terminal que resulta de uma configuração incorreta e/ou de dados incorretos. Os dados de um lote com falha não apareça. Esse status pode ser usado alternadamente com "Falha". |
Inativo | O lote foi promovido com sucesso, mas foi revertido ou expirou. O lote não está mais disponível para consumo downstream. |
Carregado | Os dados do lote estão concluídos e o lote está pronto para promoção. |
Carregando | Os dados deste lote estão sendo carregados e o lote está no momento não pronto para ser promovido. |
Tentando novamente | Os dados desse lote estão sendo processados. No entanto, devido a um erro de sistema ou transitório, o lote falhou; como resultado, esse lote está sendo repetido. |
Preparado | A fase de preparo do processo de promoção de um lote está concluída e o trabalho de assimilação foi executado. |
Armazenamento temporário | Os dados do lote estão sendo processados. |
Paralisado | Os dados do lote estão sendo processados. No entanto, a promoção em lote foi interrompida após várias tentativas. |