Tutorials Bulk API Tutorials 🎓 Synthea by Bulk APIIn this guide we will generate synthea data and load it into aidbox
Generate synthea data
We are going to generate synthetic data with synthea project:
Copy # brew install gradle
git clone https://github.com/synthetichealth/synthea
cd synthea
# edit src/main/resources/synthea.properties
# set exporter.fhir.bulk_data = true
# generate 100 pts
./run_synthea -p 100
cd output/fhir
ls -lah
# create all.ndjson
cat *.ndjson > all.ndjson
# gzip all ndjson
gzip *.ndjson
ls -lah
#load to storage
gsutil cp *.ndjson.gz gs://your-bucket/dir/
Load by Resource Type
Now we can load for example Patients and Observations into your box:
Copy POST /fhir/Patient/$load
Accept: text/yaml
Content-Type: text/yaml
source: 'https://storage.googleapis.com/aidbox-public/synthea/100/Patient.ndjson.gz'
#resp
{total: 124}
Copy POST /fhir/Observation/$load
Accept: text/yaml
Content-Type: text/yaml
source: 'https://storage.googleapis.com/aidbox-public/synthea/100/Observation.ndjson.gz'
#resp
{total: 20382}
Let see the data in Aidbox:
Copy GET /Patient?_ilike=John&_revinclude=Observation:patient
Load all at once with $load
Using /fhir/$load you can load ndjson file with multiple resource types in one step:
Copy POST /fhir/$load
Accept: text/yaml
Content-Type: text/yaml
source: 'https://storage.googleapis.com/aidbox-public/synthea/100/all.ndjson.gz'
# resp
{CarePlan: 356, Observation: 20382, MedicationAdministration: 150, Goal: 301, Patient: 124, DiagnosticReport: 1430, Practitioner: 181, ExplanationOfBenefit: 3460, Immunization: 1636, Claim: 4488, MedicationRequest: 1028, Encounter: 3460, Condition: 871, Procedure: 2854, Organization: 181, AllergyIntolerance: 40, ImagingStudy: 134}
Let's see database stats:
Copy SELECT relname, reltuples
FROM pg_class r
JOIN pg_namespace n ON (relnamespace = n.oid)
WHERE relkind = 'r' AND n.nspname = 'public'
order by reltuples desc
LIMIT 20
---
observation 20382
attribute 7257
claim 4488
encounter 3460
Cleanup data:
Truncate tables from db console:
Copy truncate CarePlan;
truncate Observation;
truncate MedicationAdministration
truncate Goal;
truncate Patient;
truncate DiagnosticReport;
truncate Practitioner;
truncate ExplanationOfBenefit;
truncate Immunization;
truncate Claim;
truncate MedicationRequest;
truncate Encounter;
truncate Condition;
truncate "procedure";
truncate Organization;
truncate AllergyIntolerance;
truncate ImagingStudy;
Load with Bulk $import
To load data in a async way using new FHIR Bulk $import:
Copy POST /fhir/$import
Accept: text/yaml
Content-Type: text/yaml
id: synthea
inputFormat: application/fhir+ndjson
contentEncoding: gzip
mode: bulk
inputs:
- resourceType: AllergyIntolerance
url: https://storage.googleapis.com/aidbox-public/synthea/100/AllergyIntolerance.ndjson.gz
- resourceType: CarePlan
url: https://storage.googleapis.com/aidbox-public/synthea/100/CarePlan.ndjson.gz
- resourceType: Claim
url: https://storage.googleapis.com/aidbox-public/synthea/100/Claim.ndjson.gz
- resourceType: Condition
url: https://storage.googleapis.com/aidbox-public/synthea/100/Condition.ndjson.gz
- resourceType: DiagnosticReport
url: https://storage.googleapis.com/aidbox-public/synthea/100/DiagnosticReport.ndjson.gz
- resourceType: Encounter
url: https://storage.googleapis.com/aidbox-public/synthea/100/Encounter.ndjson.gz
- resourceType: ExplanationOfBenefit
url: https://storage.googleapis.com/aidbox-public/synthea/100/ExplanationOfBenefit.ndjson.gz
- resourceType: Goal
url: https://storage.googleapis.com/aidbox-public/synthea/100/Goal.ndjson.gz
- resourceType: ImagingStudy
url: https://storage.googleapis.com/aidbox-public/synthea/100/ImagingStudy.ndjson.gz
- resourceType: Immunization
url: https://storage.googleapis.com/aidbox-public/synthea/100/Immunization.ndjson.gz
- resourceType: MedicationAdministration
url: https://storage.googleapis.com/aidbox-public/synthea/100/MedicationAdministration.ndjson.gz
- resourceType: MedicationRequest
url: https://storage.googleapis.com/aidbox-public/synthea/100/MedicationRequest.ndjson.gz
- resourceType: Observation
url: https://storage.googleapis.com/aidbox-public/synthea/100/Observation.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
- resourceType: Practitioner
url: https://storage.googleapis.com/aidbox-public/synthea/100/Practitioner.ndjson.gz
- resourceType: Procedure
url: https://storage.googleapis.com/aidbox-public/synthea/100/Procedure.ndjson.gz
Operation will return 200 instantly and you can monitor import status with:
Copy GET /BulkImportStatus/synthea
Last updated 2 months ago