批量自定义对象导入
使用批量API异步导入大量自定义对象记录。 以逗号、制表符或分号分隔的平面文件提供小于10 MB的记录。 如果文件较大,则API返回HTTP 413状态代码。
文件内容取决于自定义对象定义。 第一行必须为标头,并且每个标头字段都必须匹配一个API名称。 其余每一行都包含一个记录。
批量自定义对象导入仅支持“插入或更新”记录操作。
处理限制
每个批量导入请求都将作为作业添加到先进先出(FIFO)队列。 以下限制适用:
- 最多可同时处理两个作业。
- 队列中最多可以有10个作业,包括正在处理的两个作业。
如果超过10个作业的最大值,则API返回1016, Too many imports错误。
自定义对象示例
在使用批量API之前,请使用Marketo管理UI 创建自定义对象。
此示例使用具有Color、Make、Model和VIN字段的Car自定义对象。 VIN字段用于去重。 管理员UI屏幕突出显示批量API端点所需的API名称。
以下是管理UI中显示的自定义对象字段。
API名称
若要以编程方式检索API名称,请将自定义对象API名称传递给描述自定义对象端点。
/rest/v1/customobjects/{apiName}/describe.json
{
"requestId": "46ff#15a686e66de",
"result": [
{
"name": "car_c",
"displayName": "Car",
"description": "It is a car.",
"createdAt": "2017-02-22T19:55:51Z",
"updatedAt": "2017-02-22T19:55:51Z",
"idField": "marketoGUID",
"dedupeFields": [
"vin"
],
"searchableFields": [
[
"vin"
],
[
"marketoGUID"
]
],
"fields": [
{
"name": "createdAt",
"displayName": "Created At",
"dataType": "datetime",
"updateable": false
},
{
"name": "marketoGUID",
"displayName": "Marketo GUID",
"dataType": "string",
"length": 36,
"updateable": false
},
{
"name": "updatedAt",
"displayName": "Updated At",
"dataType": "datetime",
"updateable": false
},
{
"name": "color",
"displayName": "Color",
"dataType": "string",
"length": 255,
"updateable": true
},
{
"name": "make",
"displayName": "Make",
"dataType": "string",
"length": 255,
"updateable": true
},
{
"name": "model",
"displayName": "Model",
"dataType": "string",
"length": 255,
"updateable": true
},
{
"name": "vin",
"displayName": "VIN",
"dataType": "string",
"length": 255,
"updateable": true
}
]
}
],
"success": true
}
导入文件
以下CSV文件包含三个Car自定义对象记录:
color,make,model,vin
red,bmw,2002,WBA4R7C55HK895912
yellow,bmw,320i,WBA4R7C30HK896061
blue,bmw,325i,WBS3U9C52HP970604
第一行是标题。 第2-4行包含自定义对象数据记录。
创建作业
要创建批量导入作业,请在导入自定义对象端点的路径中包含自定义对象API名称。 包括以下参数:
file:导入文件的名称。format:文件分隔符格式(csv、tsv或ssv)。
POST /bulk/v1/customobjects/{apiName}/import.json?format=csv
Transfer-Encoding: chunked
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryXjWP6BP8Ciq6bPeo
Content-Length: 290
Host: <munchkinId>.mktorest.com
------WebKitFormBoundaryXjWP6BP8Ciq6bPeo
Content-Disposition: form-data; name="file"; filename="custom_object_import.csv"
Content-Type: text/csv
color,make,model,vin
red,bmw,2002,WBA4R7C55HK895912
yellow,bmw,320i,WBA4R7C30HK896061
blue,bmw,325i,WBS3U9C52HP970604
------WebKitFormBoundaryXjWP6BP8Ciq6bPeo--
{
"requestId": "c015#15a68a23418",
"result": [
{
"batchId": 1013,
"status": "Queued",
"objectApiName": "car_c"
}
],
"success": true
}
此示例指定csv格式并命名导入文件custom_object_import.csv。
由于调用是异步调用,因此响应包含batchId,而不是同步自定义对象端点返回的单个成功和失败。 status可以是Queued、Importing或Failed。
保留batchId以检查导入状态并在完成之后检索失败或警告。 batchId的有效期为七天。
以下命令行cURL请求提交示例作业:
curl -X POST -i -F format='csv' -F file='@custom_object_import.csv' -F access_token='<Access Token>' <REST API Endpoint URL>/bulk/v1/customobjects/car_c/import.json
在此示例中,custom_object_import.csv文件包含以下数据:
color,make,model,vin
red,bmw,2002,WBA4R7C55HK895912
yellow,bmw,320i,WBA4R7C30HK896061
blue,bmw,325i,WBS3U9C52HP970604
轮询作业状态
创建导入作业后,每5-30秒轮询一次。 在指向获取导入自定义对象状态端点的路径中传递自定义对象API名称和batchId。
GET /bulk/v1/customobjects/{apiName}/import/{batchId}/status.json
{
"requestId": "2a5#15a68dd9be1",
"result": [
{
"batchId": 1013,
"operation": "import",
"status": "Complete",
"objectApiName": "car_c",
"numOfObjectsProcessed": 3,
"numOfRowsFailed": 0,
"numOfRowsWithWarning": 0,
"importTime": "2 second(s)",
"message": "Import succeeded, 3 records imported (3 members)"
}
],
"success": true
}
此响应显示已完成的导入。 status可以是Complete、Queued、Importing或Failed。
作业完成后,响应将列出已处理、失败和已处理但出现警告的行数。 message属性可以提供其他作业信息。
故障
获取导入自定义对象状态响应中的numOfRowsFailed属性指示失败的行数。 值大于零表示发生故障。
在指向获取导入自定义对象失败端点的路径中传递自定义对象API名称和batchId。 终结点返回一个包含失败详细信息的文件。 如果不存在失败文件,则会返回HTTP 404状态代码。
要演示失败,请通过将标头vin更改为 vin并在逗号和vin之间添加空格来修改标头。
color,make,model, vin
重新导入文件后,状态响应显示numRowsFailed: 3,表示有三次失败。
GET /bulk/v1/customobjects/car_c/import/{batchId}/status.json
{
"requestId": "12260#15a68f491ed",
"result": [
{
"batchId": 1016,
"operation": "import",
"status": "Complete",
"objectApiName": "car_c",
"numOfObjectsProcessed": 0,
"numOfRowsFailed": 3,
"numOfRowsWithWarning": 0,
"importTime": "1 second(s)",
"message": "Import completed with errors, 0 records imported (0 members), 3 failed"
}
],
"success": true
}
有关详细信息,请调用Get Import Custom Object Failures端点:
GET /bulk/v1/customobjects/car_c/import/{batchId}/failures.json
color,make,model, vin,Import Failure Reason
red,bmw,2002,WBA4R7C55HK895912,missing.dedupe.fields
yellow,bmw,320i,WBA4R7C30HK896061,missing.dedupe.fields
blue,bmw,325i,WBS3U9C52HP970604,missing.dedupe.fields
响应显示缺少重复数据删除字段vin。
警告
获取导入自定义对象状态响应中的numOfRowsWithWarning属性指示带有警告的行数。 值大于零表示出现警告。
在指向获取导入自定义对象警告端点的路径中传递自定义对象API名称和batchId。 端点返回一个包含警告详细信息的文件。 如果不存在警告文件,则会返回HTTP 404状态代码。
GET /bulk/v1/customobjects/car_c/import/{batchId}/warnings.json