import and /fhir/import
Bulk import FHIR resources asynchronously using $import operation with progress monitoring.
$import is an implementation of the upcoming FHIR Bulk Import API. This is an asynchronous Operation, which returns url to monitor progress. There are two versions of this operation - /fhir/$import accepts data in FHIR format, /$import works with Aidbox format.
Resource requirements for all import operations:
| Operation | id | resourceType |
|---|---|---|
/$import | Required | Not required |
/fhir/$import | Required | Not required |
Keep in mind that $import does not validate inserted resources for the sake of performance. Pay attention to the structure of data you insert and use the correct URL for your data format, i.e.: use /fhir prefix for FHIR data.
Please consider using Asynchronous validation API to validate data after $import
Example
POST /fhir/$import
Accept: text/yaml
Content-Type: text/yaml
id: synthea
contentEncoding: gzip
inputs:
- resourceType: Encounter
url: https://storage.googleapis.com/aidbox-public/synthea/100/Encounter.ndjson.gz
- resourceType: Organization
url: https://storage.googleapis.com/aidbox-public/synthea/100/Organization.ndjson.gz
- resourceType: Patient
url: https://storage.googleapis.com/aidbox-public/synthea/100/Patient.ndjson.gz
Parameters
| Parameter | Description |
|---|---|
id | Identifier of the import |
contentEncoding | Supports gzip or plain (non-gzipped .ndjson files) |
inputs | Resources to import |
update | Update history for updated resources (false by default) |
You can monitor progress by using id you provided in request body.
GET /BulkImportStatus/synthea
If you didn't provide id in request body, you can use content-location in response header.
Result
| Parameter | Type | Description |
|---|---|---|
id | string | Identifier of the import |
resourceType | string | Type of resource where the progress of import operation is recorded. Possible value: BulkImportStatus |
meta | object | |
meta.createdAt | string | Timestamp string at which the resource was created |
meta.lastUpdated | string | Timestamp string at which the resource was updated last time |
meta.versionId | string | Version id of this resource |
contentEncoding | string | gzip or plain |
time | object | |
time.start | string | Timestamp string at which the operation started in ISO format |
time.end | string | Timestamp string at which the operation was completed in ISO format. Only present after the entire import operation has been completed |
type | string | Data format type to be loaded. Possible values: |
inputs | object[] | |
inputs[].url | string | URL from which load resources |
inputs[].resourceType | string | Resource type to be loaded |
inputs[].status | string | Load status for each input. Possible values: |
inputs[].total | integer | The number of loaded resources. Only present after the operation for this input has been completed successfully |
inputs[].ts | string | Timestamp string at which the loading was completed in ISO format. Only present after the operation for this input has been completed |
inputs[].duration | integer | Duration of loading in milliseconds. Only present after the operation for this input has been completed successfully |
status | string | Load status for all inputs. Only present after the entire import operation has been completed. Possible value: |
Note
For performance reasons $import does raw upsert into the resource table without history update. If you want to store the previous version of resources in history, please set update = true
With this flag, Aidbox will update the history for updated resources. For each resource:
- if the resource was not present in DB before the import, the import time will be the same.
- if the resource was present in DB before and it's updated during the import, it will double the time importing this resource because of the additional insert operation into the
_historytable.
/v2/$import
Improved version of the $import operation with enhanced reliability and performance. This version continues work after restarts, handles errors correctly, accepts multiple requests executing them from a queue, and simultaneously processes multiple items from the "inputs" field (with a default of two items processed simultaneously).
Changes in the new $import API:
- 1.Executing more than one import with the same
idis not possible. Users can omit the `id` field from the request, allowing Aidbox to generate the ID. - 2.The status of the workflow can be accessed with a GET request to
/v2/$import/<id>instead of/BulkImportStatus/<id>. The URL for the import status is returned in thecontent-locationheader of the $import request.
This feature is not available in Multibox
To start import make a POST request to /v2[/fhir]/$import:
POST /v2/fhir/$import
Accept: text/yaml
Content-Type: text/yaml
id: synthea
contentEncoding: gzip
inputs:
- resourceType: Encounter
url: https://storage.googleapis.com/aidbox-public/synthea/100/Encounter.ndjson.gz
- resourceType: Organization
url: https://storage.googleapis.com/aidbox-public/synthea/100/Organization.ndjson.gz
- resourceType: Patient
url: https://storage.googleapis.com/aidbox-public/synthea/100/Patient.ndjson.gz
Parameters
| Parameter | Description |
|---|---|
id | Identifier of the import. If you don't provide this, the id will be auto-generated. You can check it on Content-Location header in the response |
contentEncoding | Supports gzip or plain (non-gzipped .ndjson files) |
inputs (required) | Resources to import
|
update | Update history for updated resources (false by default) |
allowedRetryCount | Set the maximum number of import retries for each input (2 by default) |
To check the status of the import make a GET request to /v2/$import/<id>:
GET /v2/$import/<id>
Import local file
Sometimes you want to import local file into local Aidbox. Possible solutions for local development:
Add volume to the aidboxone container (not aidboxdb):
volumes:
- ./Encounter.ndjson.gz:/resources/Encounter.ndjson.gz
# url: file:///resources/Encounter.ndjson.gz
Use tunneling e.g. ngrok:
python3 -m http.server
ngrok http 8000
# url: https://<...>.ngrok-free.app/Encounter.ndjson.gz
Last updated: