En esta página, se explica cómo importar y exportar recursos de FHIR desde y hacia Cloud Storage mediante los métodos projects.locations.datasets.fhirStores.import
y projects.locations.datasets.fhirStores.export
.
Según el formato de tus datos de FHIR, para cargar datos en una tienda de FHIR, puedes usar el método projects.locations.datasets.fhirStores.import
o el método projects.locations.datasets.fhirStores.fhir.executeBundle
. Para obtener orientación sobre cómo elegir un método, consulta Importación de FHIR.
Configura permisos de Cloud Storage
Antes de importar y exportar recursos de FHIR desde y hacia Cloud Storage, debes otorgar permisos adicionales a la cuenta de servicio del agente de servicios de Cloud Healthcare. Para obtener más información, consulta Permisos de Cloud Storage de la tienda de FHIR.
Genera datos de pacientes simulados para DSTU2 o STU3
Synthea™ es un simulador que sirve para generar datos de población de pacientes. Si no usas Synthea, pasa a la sección Importa recursos de FHIR o Exporta recursos de FHIR.
De forma predeterminada, los datos generados de Synthea™ usan la representación JSON de FHIR R4 para los recursos.
Solo puedes importar datos en la versión que tu tienda de FHIR se configuró para aceptar. Para generar datos de FHIR STU3 o FHIR DSTU2 de Synthea™ a fin de importarlos a una tienda de FHIR STU3 o FHIR DSTU2, completa los siguientes pasos:
Clona el repositorio de la herramienta de Synthea™ desde GitHub:
git clone https://github.com/synthetichealth/synthea.git
Completa los pasos de instalación.
Desde el directorio de
synthea
, usa un editor de texto para abrir el archivosrc/main/resources/synthea.properties
y, luego, realiza los siguientes cambios:Para generar datos de FHIR STU3, haz lo siguiente:
- Configura todos los valores
*.fhir.export
y*.fhir_dstu2.export
comofalse
. - Configura todos los valores
*.fhir_stu3.export
como verdadero.
Para generar datos de FHIR DSTU2, haz lo siguiente:
- Configura todos los valores
*.fhir.export
y*.fhir_stu3.export
comofalse
. - Configura todos los valores
*.fhir_dstu2.export
como verdadero.
Por ejemplo, para generar datos de FHIR STU3, haz lo siguiente:
exporter.fhir.export = false exporter.fhir_stu3.export = true exporter.fhir_dstu2.export = false exporter.hospital.fhir.export = false exporter.hospital.fhir_stu3.export = true exporter.hospital.fhir_dstu2.export = false exporter.practitioner.fhir.export = false exporter.practitioner.fhir_stu3.export = true exporter.practitioner.fhir_dstu2.export = false
- Configura todos los valores
Sigue las instrucciones para generar datos de pacientes sintéticos. Los datos generados se envían a
synthea/output/fhir_stu3
para FHIR STU3 o al directoriosynthea/output/fhir_dstu2
para FHIR DSTU2.Copia los datos generados en un bucket de Cloud Storage para poder importarlos a una tienda de FHIR de la API de Cloud Healthcare. Por ejemplo, para copiar los datos a un directorio llamado
synthea-data
en un depósito de Cloud Storage existente, ejecuta el siguiente comandogsutil cp
desde el directoriosynthea
:gsutil -m cp output/fhir_stu3/* gs://BUCKET/synthea-data
Sigue las instrucciones para importar recursos de FHIR.
Importa recursos de FHIR
Cuando configuras el cuerpo de la solicitud de importación, puedes establecer ContentStructure
en uno de los siguientes valores.
CONTENT_STRUCTURE_UNSPECIFIED
BUNDLE
: el archivo de origen contiene una o más líneas de JSON delimitado por saltos de línea (ndjson). Cada línea es un paquete que contiene uno o más recursos. Si no especificasContentStructure
, el valor predeterminado esBUNDLE
.RESOURCE
: el archivo de origen contiene una o más líneas de JSON delimitado por saltos de línea (ndjson). Cada línea es un solo recurso.BUNDLE_PRETTY
: el archivo completo de origen es un paquete JSON. El JSON puede abarcar varias líneas.RESOURCE_PRETTY
: el archivo completo de origen es un recurso JSON. El JSON puede abarcar varias líneas.
Por ejemplo, supongamos que importas un archivo llamado resources.ndjson
con el siguiente contenido:
{"class":{"code":"IMP","display":"inpatient encounter","system":"http://hl7.org/fhir/v3/ActCode"},"id":"6090e773-3e91-40a7-8fce-1e22f6774c29","reason":[{"text":"The patient had an abnormal heart rate. She was concerned about this."}],"resourceType":"Encounter","status":"finished","subject":{"reference":"Patient/2938bb9e-1f16-429e-8d44-9508ab0e4151"}}
{"class":{"code":"IMP","display":"inpatient encounter","system":"http://hl7.org/fhir/v3/ActCode"},"id":"7101f884-4f02-51b8-9gdf-2f33g7885d30","reason":[{"text":"The patient was experiencing recurrent fevers."}],"resourceType":"Encounter","status":"finished","subject":{"reference":"Patient/3049cc0f-2g27-530f-9e55-0619bc1f5262"}}
{"birthDate":"1970-01-01","gender":"female","id":"2938bb9e-1f16-429e-8d44-9508ab0e4151","name":[{"family":"Smith","given":["Darcy"],"use":"official"}],"resourceType":"Patient"}
El archivo contiene dos recursos Encounter y un recurso Patient. Cada recurso está en una línea separada, por lo que debes configurar ContentStructure
como RESOURCE
.
Es posible que tus datos se importen de forma incorrecta o que no se importen si es que ContentStructure
no coincide con el formato de tus datos. Por ejemplo, el archivo de muestra anterior no se importará correctamente a menos que ContentStructure
se configure como RESOURCE
en la solicitud de importación.
En los siguientes ejemplos, se muestra cómo importar recursos de FHIR desde un bucket de Cloud Storage.
gcloud
Para importar recursos de FHIR a una tienda de FHIR, usa el comando gcloud healthcare fhir-stores import gcs
. Especifica la siguiente información:
- El nombre del conjunto de datos superior
- El nombre de la tienda de FHIR
- La ubicación del objeto en un bucket de Cloud Storage. La ubicación de los archivos dentro del bucket es arbitraria y no necesita adherirse exactamente al formato especificado en el siguiente ejemplo. Cuando especificas la ubicación de los recursos de FHIR en Cloud Storage, puedes usar comodines para importar varios archivos desde uno o más directorios.
Se admiten los siguientes comodines:
- Usa
*
para hacer coincidir 0 o más caracteres sin separadores. Por ejemplo,gs://BUCKET/DIRECTORY/Example*.ndjson
coincide con Example.ndjson y Example22.ndjson en DIRECTORY. - Usa
**
para hacer coincidir 0 o más caracteres (con separadores). Se debe usar al final de una ruta y no debe haber otros comodines en la ruta. También se puede usar con una extensión de nombre de archivo (como .ndjson), que importa todos los archivos con la extensión de nombre de archivo en el directorio especificado y en sus subdirectorios. Por ejemplo,gs://BUCKET/DIRECTORY/**.ndjson
importa todos los archivos con la extensión de nombre de archivo .ndjson en DIRECTORY y en sus subdirectorios. - Usa
?
para hacer coincidir 1 carácter. Por ejemplo,gs://BUCKET/DIRECTORY/Example?.ndjson
coincide con Example1.ndjson, pero no coincide con Example.ndjson ni Example01.ndjson.
- Usa
En el siguiente ejemplo, se muestra el comando gcloud healthcare fhir-stores import gcs
.
gcloud healthcare fhir-stores import gcs FHIR_STORE_ID \ --dataset=DATASET_ID \ --location=LOCATION \ --gcs-uri=gs://BUCKET/DIRECTORY/FHIR_RESOURCE_NAME.ndjson \ [--content-structure=CONTENT_STRUCTURE]
La línea de comandos muestra el ID de la operación y, después de que se completa la operación, done
:
Request issued for: [FHIR_STORE_ID] Waiting for operation [OPERATION_ID] to complete...done. name: projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID
Para ver más detalles de la operación, ejecuta el comando gcloud healthcare operations describe
y proporciona el OPERATION_ID de la respuesta:
gcloud healthcare operations describe OPERATION_ID \ --dataset=DATASET_ID
En la respuesta, se incluye done: true
.
done: true metadata: '@type': type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata apiMethodName: google.cloud.healthcare.v1.fhir.FhirService.ImportResources createTime: 'CREATE_TIME' endTime: 'END_TIME' name: projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID response: '@type': type.googleapis.com/google.cloud.healthcare.v1.fhir.rest.ImportResourcesResponse fhirStore: projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID
API
Para importar recursos de FHIR a una tienda de FHIR, usa el método projects.locations.datasets.fhirStores.import
.
- La ubicación de los archivos dentro del bucket es arbitraria y no necesita adherirse exactamente al formato especificado en los siguientes ejemplos.
- Cuando especificas la ubicación de los recursos de FHIR en Cloud Storage, puedes usar comodines para importar varios archivos desde uno o más directorios.
Se admiten los siguientes comodines:
- Usa
*
para hacer coincidir 0 o más caracteres sin separadores. Por ejemplo,gs://BUCKET/DIRECTORY/Example*.ndjson
coincide con Example.ndjson y Example22.ndjson en DIRECTORY. - Usa
**
para hacer coincidir 0 o más caracteres (con separadores). Se debe usar al final de una ruta y no debe haber otros comodines en la ruta. También se puede usar con una extensión de nombre de archivo (como .ndjson), que importa todos los archivos con la extensión de nombre de archivo en el directorio especificado y en sus subdirectorios. Por ejemplo,gs://BUCKET/DIRECTORY/**.ndjson
importa todos los archivos con la extensión de nombre de archivo .ndjson en DIRECTORY y en sus subdirectorios. - Usa
?
para hacer coincidir 1 carácter. Por ejemplo,gs://BUCKET/DIRECTORY/Example?.ndjson
coincide con Example1.ndjson, pero no coincide con Example.ndjson ni Example01.ndjson.
- Usa
curl
Para importar recursos de FHIR a una tienda de FHIR, realiza una solicitud POST
y especifica la siguiente información:
- El nombre del conjunto de datos superior
- El nombre de la tienda de FHIR
- La ubicación del objeto en un bucket de Cloud Storage
- Un token de acceso
En el siguiente ejemplo, se muestra cómo importar un solo archivo con el uso de una solicitud POST
mediante curl
.
curl -X POST \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ --data "{ 'contentStructure': 'CONTENT_STRUCTURE', 'gcsSource': { 'uri': 'gs://BUCKET/DIRECTORY/FHIR_RESOURCE_FILE' } }" "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID:import"
Si la solicitud tiene éxito, se mostrará la respuesta en formato JSON en el servidor:
{ "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" }
La respuesta contiene un nombre de operación. Para realizar un seguimiento del estado de la operación, puedes usar el método get
de la operación:
curl -X GET \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"
Si la solicitud es exitosa, el servidor mostrará una respuesta con el estado de la operación en formato JSON:
{ "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID", "metadata": { "@type": "type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata", "apiMethodName": "google.cloud.healthcare.v1.fhir.FhirService.ImportResources", "createTime": "CREATE_TIME", "endTime": "END_TIME", "logsUrl": "https://console.cloud.google.com/logs/viewer/CLOUD_LOGGING_URL", "counter": { "success": "SUCCESS_COUNT" } }, "done": true, "response": { "@type": "type.googleapis.com/google.cloud.healthcare.v1.fhir.rest.ImportResourcesResponse", } }
PowerShell
Para importar recursos de FHIR a una tienda de FHIR, realiza una solicitud POST
y especifica la siguiente información:
- El nombre del conjunto de datos superior
- El nombre de la tienda de FHIR
- La ubicación del objeto en un bucket de Cloud Storage
- Un token de acceso
En el siguiente ejemplo, se muestra una solicitud POST
mediante Windows PowerShell.
$cred = gcloud auth application-default print-access-token $headers = @{ Authorization = "Bearer $cred" } Invoke-WebRequest ` -Method Post ` -Headers $headers ` -ContentType: "application/json; charset=utf-8" ` -Body "{ 'contentStructure': 'CONTENT_STRUCTURE', 'gcsSource': { 'uri': 'gs://BUCKET/DIRECTORY/FHIR_RESOURCE_FILE' } }" ` -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID:import" | Select-Object -Expand Content
Si la solicitud tiene éxito, se mostrará la respuesta en formato JSON en el servidor:
{ "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" }
La respuesta contiene un nombre de operación. Para realizar un seguimiento del estado de la operación, puedes usar el método get
de la operación:
$cred = gcloud auth application-default print-access-token $headers = @{ Authorization = "Bearer $cred" } Invoke-WebRequest ` -Method Get ` -Headers $headers ` -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand Content
Si la solicitud es exitosa, el servidor mostrará una respuesta con el estado de la operación en formato JSON:
{ "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID", "metadata": { "@type": "type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata", "apiMethodName": "google.cloud.healthcare.v1.fhir.FhirService.ImportResources", "createTime": "CREATE_TIME", "endTime": "END_TIME", "logsUrl": "https://console.cloud.google.com/logs/viewer/CLOUD_LOGGING_URL", "counter": { "success": "SUCCESS_COUNT" } }, "done": true, "response": { "@type": "type.googleapis.com/google.cloud.healthcare.v1.fhir.rest.ImportResourcesResponse", } }
Go
Java
Node.js
Python
Exporta recursos de FHIR
En los siguientes ejemplos, se muestra cómo exportar recursos de FHIR a un bucket de Cloud Storage. Cuando exportas recursos de FHIR desde una tienda de FHIR, se exportan todos los recursos de la tienda de FHIR.
Durante la exportación, la API de Cloud Healthcare crea un archivo para cada tipo de recurso desde el almacén de FHIR. El nombre del archivo consiste en el ID de la operación y el tipo de recurso separados por un guion bajo. Cada archivo consiste en JSON delimitado por saltos de línea, en el que cada línea es un recurso FHIR correspondiente al tipo de recurso en el nombre del archivo. Por ejemplo, si exportas varios registros de pacientes, el archivo de salida se llamará similar a 1264567891234567_Patient
y contendrá una línea para cada recurso del paciente en el almacén de FHIR.
gcloud
Para exportar instancias de FHIR a un depósito de Cloud Storage, usa el comando gcloud healthcare fhir-stores export gcs
. Especifica la siguiente información:
- El nombre del conjunto de datos superior
- El nombre de la tienda de FHIR
- El bucket o el directorio de Cloud Storage de destino Escribe en un bucket o un directorio de Cloud Storage, en lugar de en un objeto, ya que la API de Cloud Healthcare crea un objeto para cada tipo de recurso. Cada objeto consiste en un JSON delimitado por saltos de línea, en el que cada línea es un recurso de FHIR. Si especificas un directorio que no existe, se creará.
En el siguiente ejemplo, se muestra el comando gcloud healthcare fhir-stores export gcs
.
gcloud healthcare fhir-stores export gcs FHIR_STORE_ID \ --dataset=DATASET_ID \ --location=LOCATION \ --gcs-uri=gs://BUCKET/DIRECTORY
La línea de comandos muestra el ID de la operación:
Waiting for operation [OPERATION_ID] to complete...done. name: projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID
Para ver el estado de la operación, ejecuta el comando gcloud healthcare operations describe
y proporciona el OPERATION_ID de la respuesta:
gcloud healthcare operations describe OPERATION_ID \ --dataset=DATASET_ID
Una vez que se completa el comando, se incluirá done
en la respuesta.
metadata: '@type': type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata apiMethodName: google.cloud.healthcare.v1.fhir.FhirService.ExportFhirData createTime: "CREATE_TIME" endTime: "END_TIME" name: projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID response: '@type': type.googleapis.com/google.cloud.healthcare.v1.fhir.rest.ExportResourcesResponse fhirStore: projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID resourceCount: 'RESOURCE_COUNT'
API
Para exportar recursos de FHIR, usa el método projects.locations.datasets.fhirStores.export
.
- Escribe en un bucket o un directorio de Cloud Storage, en lugar de en un objeto, ya que la API de Cloud Healthcare crea un archivo JSON delimitado por saltos de línea para cada tipo de recurso. En cada archivo JSON, cada línea es un recurso de FHIR.
- Si el comando especifica un directorio que no existe, este se creará.
curl
Para exportar recursos de FHIR, realiza una solicitud POST
y especifica la siguiente información:
- El nombre del conjunto de datos superior
- El nombre de la tienda de FHIR
- El bucket de destino de Cloud Storage
- Un token de acceso
En el siguiente ejemplo, se muestra una solicitud POST
mediante curl
.
curl -X POST \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ --data "{ 'gcsDestination': { 'uriPrefix': 'gs://BUCKET/DIRECTORY' } }" "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID:export"
Si la solicitud tiene éxito, se mostrará la respuesta en formato JSON en el servidor:
{ "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" }
La respuesta contiene un nombre de operación. Para realizar un seguimiento del estado de la operación, puedes usar el método get
de la operación:
curl -X GET \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"
Si la solicitud es exitosa, el servidor mostrará una respuesta con el estado de la operación en formato JSON:
{ "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID", "metadata": { "@type": "type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata", "apiMethodName": "google.cloud.healthcare.v1.fhir.FhirService.ExportResources", "createTime": "CREATE_TIME", "endTime": "END_TIME", "logsUrl": "https://console.cloud.google.com/logs/viewer/CLOUD_LOGGING_URL", "counter": { "success": "SUCCESS_COUNT" } }, "done": true, "response": { "@type": "type.googleapis.com/google.cloud.healthcare.v1.fhir.rest.ExportResourcesResponse", } }
PowerShell
Para exportar recursos de FHIR, realiza una solicitud POST
y especifica la siguiente información:
- El nombre del conjunto de datos superior
- El nombre de la tienda de FHIR
- El bucket o el directorio de Cloud Storage de destino Escribe en un bucket o un directorio de Cloud Storage, en lugar de en un objeto, ya que la API de Cloud Healthcare crea un objeto para cada tipo de recurso. Cada objeto consiste en un JSON delimitado por saltos de línea, en el que cada línea es un recurso de FHIR.
- Un token de acceso
En el siguiente ejemplo, se muestra una solicitud POST
mediante Windows PowerShell.
$cred = gcloud auth application-default print-access-token $headers = @{ Authorization = "Bearer $cred" } Invoke-WebRequest ` -Method Post ` -Headers $headers ` -ContentType: "application/json; charset=utf-8" ` -Body "{ 'gcsDestination': { 'uriPrefix': 'gs://BUCKET/DIRECTORY' } }" ` -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID:export" | Select-Object -Expand Content
Si la solicitud tiene éxito, se mostrará la respuesta en formato JSON en el servidor:
{ "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" }
La respuesta contiene un nombre de operación. Para realizar un seguimiento del estado de la operación, puedes usar el método get
de la operación:
$cred = gcloud auth application-default print-access-token $headers = @{ Authorization = "Bearer $cred" } Invoke-WebRequest ` -Method Get ` -Headers $headers ` -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand Content
Si la solicitud es exitosa, el servidor mostrará una respuesta con el estado de la operación en formato JSON:
{ "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID", "metadata": { "@type": "type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata", "apiMethodName": "google.cloud.healthcare.v1.fhir.FhirService.ExportResources", "createTime": "CREATE_TIME", "endTime": "END_TIME", "logsUrl": "https://console.cloud.google.com/logs/viewer/CLOUD_LOGGING_URL", "counter": { "success": "SUCCESS_COUNT" } }, "done": true, "response": { "@type": "type.googleapis.com/google.cloud.healthcare.v1.fhir.rest.ExportResourcesResponse", } }
Go
Java
Node.js
Python
Soluciona problemas de solicitudes de importación y exportación de FHIR
Si ocurren errores durante una solicitud de importación o exportación de FHIR, estos se registrarán en Cloud Logging. Para obtener más información, consulta Visualiza los registros de errores en Cloud Logging.
¿Qué sigue?
- Si importaste datos de FHIR correctamente y deseas analizar los datos en BigQuery, continúa con la exportación de datos de FHIR a BigQuery.
- Consulta la solución Importa datos clínicos de FHIR a la nube mediante la API de Cloud Healthcare para conocer casos de uso de importación de FHIR, cómo cargar datos de FHIR con otros servicios de Google Cloud y mucho más.