Bulk API 2.0
Process large data volumes with ingest and query jobs.
Bulk Insert
Go
// Create an ingest job
job, err := client.Bulk().CreateJob(ctx, bulk.CreateJobRequest{
Object: "Account",
Operation: bulk.OperationInsert,
ContentType: bulk.ContentTypeCSV,
})
// Upload CSV data
records := []map[string]string{
{"Name": "Acme Corp", "Industry": "Technology"},
{"Name": "Global Inc", "Industry": "Finance"},
}
err = client.Bulk().UploadCSV(ctx, job.ID, records, []string{"Name", "Industry"})
// Close job and wait for completion
client.Bulk().CloseJob(ctx, job.ID)
job, err = client.Bulk().WaitForCompletion(ctx, job.ID, 5*time.Second)
fmt.Printf("Processed: %d, Failed: %d\n",
job.NumberRecordsProcessed, job.NumberRecordsFailed)
Operations
| Operation | Description |
|---|---|
OperationInsert |
Insert new records |
OperationUpdate |
Update existing records |
OperationUpsert |
Insert or update by external ID |
OperationDelete |
Delete records (softDelete) |
OperationHardDelete |
Permanently delete records |
Bulk Update
Go
job, _ := client.Bulk().CreateJob(ctx, bulk.CreateJobRequest{
Object: "Account",
Operation: bulk.OperationUpdate,
})
// Records must include the Id field for updates
records := []map[string]string{
{"Id": "001xx000003DGbY", "Industry": "Healthcare"},
}
client.Bulk().UploadCSV(ctx, job.ID, records, []string{"Id", "Industry"})
Bulk Upsert
Go
job, _ := client.Bulk().CreateJob(ctx, bulk.CreateJobRequest{
Object: "Account",
Operation: bulk.OperationUpsert,
ExternalIdField: "External_ID__c", // Required for upsert
})
Bulk Query
Go
// Create a query job
queryJob, err := client.Bulk().CreateQueryJob(ctx, bulk.CreateQueryJobRequest{
Query: "SELECT Id, Name FROM Account WHERE Industry = 'Technology'",
})
// Wait for query completion
queryJob, _ = client.Bulk().WaitForQueryCompletion(ctx, queryJob.ID, 5*time.Second)
// Get results as CSV
csv, _ := client.Bulk().GetQueryResults(ctx, queryJob.ID)
Get Job Results
Go
// Get successful results
successRecords, _ := client.Bulk().GetSuccessfulResults(ctx, job.ID)
// Get failed results
failedRecords, _ := client.Bulk().GetFailedResults(ctx, job.ID)
for _, record := range failedRecords {
fmt.Printf("Error: %s\n", record.Error)
}
// Get unprocessed records
unprocessed, _ := client.Bulk().GetUnprocessedRecords(ctx, job.ID)
Available Methods
| Method | Description |
|---|---|
CreateJob() |
Create ingest job |
GetJob() |
Get job status |
CloseJob() |
Close job for processing |
AbortJob() |
Abort a job |
DeleteJob() |
Delete a job |
UploadCSV() |
Upload data to job |
WaitForCompletion() |
Wait for job to finish |
GetSuccessfulResults() |
Get success records |
GetFailedResults() |
Get failed records |
CreateQueryJob() |
Create query job |
GetQueryResults() |
Get query results |