Operación de importación

La operación de importación permite cargar datos rápidos de recursos de interoperabilidad sanitaria (FHIR®) en el servidor de FHIR con un alto rendimiento mediante la operación de $import. La importación admite la carga de datos inicial e incremental en el servidor FHIR.

Uso de $import operación

Nota

Debe tener el rol FHIR Data Importer en el servidor FHIR para usar $import.

Para usar $import, debe configurar el servidor FHIR mediante las instrucciones del artículo Configuración de las opciones de importación . Los datos de FHIR que se van a importar deben almacenarse en archivos específicos del recurso en formato FHIR NDJSON en el almacén de blobs de Azure.

Para la operación de importación, asegúrese de

  • Todos los recursos de un archivo deben ser del mismo tipo. Es posible que tenga varios archivos por tipo de recurso.
  • Los datos que se van a importar deben estar en el mismo inquilino que el servicio FHIR.
  • El número máximo de archivos que se van a importar por operación es de 10 000.

Nota:

  • La operación de importación no admite referencias condicionales en recursos.
  • Durante la operación de importación, si varios recursos comparten el mismo identificador de recurso, solo se importa uno de esos recursos de forma aleatoria. Se ha registrado un error para que los recursos compartan el mismo identificador de recurso.

Llamada a $import

Realice una POST llamada a <<FHIR service base URL>>/$import con el encabezado y el cuerpo de la solicitud que se muestran:

Encabezado de la solicitud

Prefer:respond-async
Content-Type:application/fhir+json

Cuerpo

Nombre de parámetro Descripción Tarjeta. Valores aceptados
formatoDeEntrada Cadena que representa el nombre del formato del origen de datos. Actualmente solo se admiten archivos FHIR NDJSON. 1..1 application/fhir+ndjson
mode Valor del modo de importación 1..1 Para el valor del modo de uso InitialLoad de importación inicial. Para el valor del modo de importación incremental, use IncrementalLoad el valor del modo . Si no se proporciona ningún valor de modo, el valor del modo IncrementalLoad se considera de forma predeterminada.
input Detalles de los archivos de entrada. 1..* Matriz JSON con tres partes descritas en la tabla siguiente.
Nombre del elemento de entrada Descripción Tarjeta. Valores aceptados
tipo Tipo de recurso de archivo de entrada 1..1 Tipo de recurso FHIR válido que coincide con el archivo de entrada.
Resolución Dirección URL de Almacenamiento de Azure del archivo de entrada 1..1 Valor de dirección URL del archivo de entrada que no se puede modificar.
ETag Etag del archivo de entrada en Azure Storage usado para comprobar que el contenido del archivo no ha cambiado. 0..1 Valor Etag del archivo de entrada que no se puede modificar.

Cuerpo de ejemplo para importación de carga inicial:

{
    "resourceType": "Parameters",
    "parameter": [
        {
            "name": "inputFormat",
            "valueString": "application/fhir+ndjson"
        },
        {
            "name": "mode",
            "valueString": "InitialLoad"
        },
        {
            "name": "input",
            "part": [
                {
                    "name": "type",
                    "valueString": "Patient"
                },
                {
                    "name": "url",
                    "valueUri": "https://example.blob.core.windows.net/resources/Patient.ndjson"
                },
                {
                    "name": "etag",
                    "valueUri": "0x8D92A7342657F4F"
                }
            ]
        },
        {
            "name": "input",
            "part": [
                {
                    "name": "type",
                    "valueString": "CarePlan"
                },
                {
                    "name": "url",
                    "valueUri": "https://example.blob.core.windows.net/resources/CarePlan.ndjson"
                }
            ]
        }
    ]
}

Comprobación del estado de importación

Una vez que se inicia $import, se devuelve un cuerpo de respuesta vacío con un vínculo de devolución de llamada en el encabezado de la respuesta junto con 202-Accepted el Content-location código de estado. Almacene este vínculo de devolución de llamada para comprobar el estado de importación.

Para comprobar el estado de importación, realice la llamada REST con el GET método al vínculo de devolución de llamada devuelto en el paso anterior. Puede interpretar la respuesta mediante la tabla siguiente:

Response code Response body Descripción
202 - Aceptado La operación todavía se está ejecutando.
200 OK El cuerpo de la respuesta no contiene ninguna entrada error.url. Todos los recursos se importaron correctamente.
200 OK El cuerpo de la respuesta contiene alguna entrada error.url. Error al importar algunos de los recursos. Consulte los archivos ubicados en error.url para obtener los detalles. El resto de los recursos se importaron correctamente.
Otros Se ha producido un error irrecuperable y la operación se ha detenido. Los recursos importados correctamente no se han revertido.

En la tabla siguiente se proporcionan algunos de los campos importantes en el cuerpo de la respuesta:

Campo Descripción
transactionTime Hora de inicio de la operación de importación masiva.
output.count Recuento de recursos que se importaron correctamente
error.count Recuento de recursos que no se importaron debido a algún error
error.url Dirección URL del archivo que contiene los detalles del error. Cada error.url es único para una dirección URL de entrada.

Respuesta de ejemplo:

{
    "transactionTime": "2021-07-16T06:46:52.3873388+00:00",
    "request": "https://importperf.azurewebsites.net/$Import",
    "output": [
        {
            "type": "Patient",
            "count": 10000,
            "inputUrl": "https://example.blob.core.windows.net/resources/Patient.ndjson"
        },
        {
            "type": "CarePlan",
            "count": 199949,
            "inputUrl": "https://example.blob.core.windows.net/resources/CarePlan.ndjson"
        }
    ],
    "error": [
        { 
        "type": "OperationOutcome",
        "count": 51,
        "inputUrl": "https://example.blob.core.windows.net/resources/CarePlan.ndjson",
        "url": "https://example.blob.core.windows.net/fhirlogs/CarePlan06b88c6933a34c7c83cb18b7dd6ae3d8.ndjson"
        }
    ]
}

Solución de problemas

Permite realizar un tutorial de soluciones a algunos códigos de error que se pueden encontrar durante la operación de importación.

200 CORRECTO, pero hay un error con la dirección URL en la respuesta.

Comportamiento: La operación de importación se realiza correctamente y devuelve 200 OK. Sin embargo, error.url están presentes en el cuerpo de la respuesta. Los archivos presentes en la error.url ubicación contienen fragmentos JSON similares al ejemplo siguiente:

{
    "resourceType": "OperationOutcome",
    "issue": [
        {
            "severity": "error",
            "details": {
                "text": "Given conditional reference '{0}' does'nt resolve to a resource."
            },
            "diagnostics": "Failed to process resource at line: {0} with stream start offset: {1}"
        }
    ]
}

Causa: Los archivos NDJSON contienen recursos con referencias condicionales, que actualmente no son compatibles con $import.

Solución: Reemplace las referencias condicionales a referencias normales en los archivos NDJSON.

400 - Solicitud incorrecta

Comportamiento: Error en la operación de importación y 400 Bad Request se devuelve. El cuerpo de la respuesta tiene el siguiente contenido:

{
    "resourceType": "OperationOutcome",
    "id": "13876ec9-3170-4525-87ec-9e165052d70d",
    "issue": [
        {
            "severity": "error",
            "code": "processing",
            "diagnostics": "import operation failed for reason: No such host is known. (example.blob.core.windows.net:443)"
        }
    ]
}

Solución: Compruebe que el vínculo al almacenamiento de Azure es correcto. Compruebe la configuración de red y firewall para asegurarse de que el servidor FHIR puede acceder al almacenamiento. Si el servicio está en una red virtual, asegúrese de que el almacenamiento está en la misma red virtual o en una red virtual que tenga emparejamiento con la red virtual del servicio FHIR.

403 Prohibido

Comportamiento: Error en la operación de importación y 403 Forbidden se devuelve. El cuerpo de la respuesta tiene el siguiente contenido:

{
    "resourceType": "OperationOutcome",
    "id": "bd545acc-af5d-42d5-82c3-280459125033",
    "issue": [
        {
            "severity": "error",
            "code": "processing",
            "diagnostics": "import operation failed for reason: Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly including the signature."
        }
    ]
}

Causa: Usamos la identidad administrada para la autenticación de almacenamiento de origen. Este error puede deberse a una asignación de roles que falta o no es correcta.

Solución: Asigne el rol Colaborador de datos de Storage Blob al servidor FHIR siguiendo la guía de RBAC.

Error de servidor interno 500

Comportamiento: Error en la operación de importación y 500 Internal Server Error se devuelve. El cuerpo de la respuesta tiene el siguiente contenido:

{
    "resourceType": "OperationOutcome",
    "id": "0d0f007d-9e8e-444e-89ed-7458377d7889",
    "issue": [
        {
            "severity": "error",
            "code": "processing",
            "diagnostics": "import operation failed for reason: The database '****' has reached its size quota. Partition or delete data, drop indexes, or consult the documentation for possible resolutions."
        }
    ]
}

Causa: Ha alcanzado el límite de almacenamiento del servicio FHIR.

Solución: Reduzca el tamaño de los datos o considere la posibilidad de que Azure API for FHIR tenga un límite de almacenamiento mayor.

Pasos siguientes

En este artículo, ha aprendido cómo la operación de importación permite importar datos de FHIR al servidor de FHIR con un alto rendimiento. Para obtener más información sobre cómo convertir datos en FHIR, exportar la configuración para configurar una cuenta de almacenamiento y mover datos a Azure Synapse, consulte

FHIR® es una marca registrada de HL7 y se usa con su permiso.