Operação de Importação
A operação de importação permite carregar dados de Recursos de Interoperabilidade de Cuidados de Saúde Rápidos (FHIR®) para o servidor FHIR em débito elevado com a operação de $import. A importação suporta a carga de dados inicial e incremental no servidor FHIR.
Utilizar a operação de $import
Nota
Tem de ter a função de Importador de Dados FHIR no servidor FHIR para utilizar $import.
Para utilizar $import, tem de configurar o servidor FHIR com as instruções apresentadas no artigo Configurar definições de importação . Os dados FHIR a importar têm de ser armazenados em ficheiros específicos de recursos no formato FHIR NDJSON no arquivo de blobs do Azure.
Para a operação de importação, certifique-se de que
- Todos os recursos num ficheiro têm de ser do mesmo tipo. Pode ter vários ficheiros por tipo de recurso.
- Os dados a importar têm de estar no mesmo Inquilino do serviço FHIR.
- O número máximo de ficheiros a importar por operação é de 10 000.
Nota:
- A operação de importação não suporta referências condicionais nos recursos.
- Durante a operação de importação, se vários recursos partilharem o mesmo ID de recurso, apenas um desses recursos é importado aleatoriamente. Existe um erro registado para os recursos que partilham o mesmo ID de recurso.
Chamar $import
Faça uma POST
chamada para <<FHIR service base URL>>/$import
com o cabeçalho e corpo do pedido apresentados:
Cabeçalho do Pedido
Prefer:respond-async
Content-Type:application/fhir+json
Corpo
Nome do Parâmetro | Description | Cartão. | Valores aceites |
---|---|---|---|
inputFormat | Cadeia que representa o nome do formato da origem de dados. Atualmente, apenas os ficheiros FHIR NDJSON são suportados. | 1..1 | application/fhir+ndjson |
mode | Valor do modo de importação | 1..1 | Para o valor inicial do modo de utilização InitialLoad de importação. Para o modo de importação incremental, utilize IncrementalLoad o valor do modo. Se não for fornecido nenhum valor de modo, o valor do modo IncrementalLoad é considerado por predefinição. |
entrada | Detalhes dos ficheiros de entrada. | 1..* | Uma matriz JSON com três partes descritas na tabela abaixo. |
Nome da peça de entrada | Description | Cartão. | Valores aceites |
---|---|---|---|
tipo | Tipo de recurso do ficheiro de entrada | 1..1 | Um tipo de recurso FHIR válido que corresponde ao ficheiro de entrada. |
URL | Url de armazenamento do Azure do ficheiro de entrada | 1..1 | Valor de URL do ficheiro de entrada que não pode ser modificado. |
etag | Etag do ficheiro de entrada no armazenamento do Azure utilizado para verificar se o conteúdo do ficheiro não foi alterado. | 0..1 | Valor Etag do ficheiro de entrada que não pode ser modificado. |
Corpo do exemplo para Importação 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"
}
]
}
]
}
Verificar o estado da importação
Assim que $import for iniciada, é devolvido um corpo de resposta vazio com uma ligação de chamada de retorno no Content-location
cabeçalho da resposta juntamente com 202-Accepted
o código de estado. Armazene esta ligação de chamada de retorno para verificar o estado de importação.
Para verificar o estado da importação, faça a chamada REST com o GET
método para a ligação de chamada de retorno devolvida no passo anterior.
Pode interpretar a resposta com a seguinte tabela:
Código de resposta | Corpo da resposta | Description |
---|---|---|
202 Aceite | A operação ainda está em execução. | |
200 OK | O corpo da resposta não contém nenhuma entrada error.url | Todos os recursos foram importados com êxito. |
200 OK | O corpo da resposta contém alguma entrada error.url | Ocorreu um erro ao importar alguns dos recursos. Veja os ficheiros localizados em error.url para obter os detalhes. Os restantes recursos foram importados com êxito. |
Outro | Ocorreu um erro fatal e a operação parou. Os recursos importados com êxito não foram revertidos. |
A tabela abaixo fornece alguns dos campos importantes no corpo da resposta:
Campo | Descrição |
---|---|
transactionTime | Hora de início da operação de importação em massa. |
output.count | Contagem de recursos que foram importados com êxito |
error.count | Contagem de recursos que não foram importados devido a algum erro |
error.url | URL do ficheiro que contém detalhes do erro. Cada error.url é exclusivo de um URL de entrada. |
Resposta de exemplo:
{
"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"
}
]
}
Resolução de problemas
Permite percorrer soluções para alguns códigos de erro que poderá encontrar durante a operação de importação.
200 OK, mas existe um erro com o URL na resposta
Comportamento: A operação de importação é efetuada com êxito e devolve 200 OK
. No entanto, error.url
estão presentes no corpo da resposta. Os ficheiros presentes na error.url
localização contêm fragmentos JSON semelhantes ao exemplo abaixo:
{
"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: Os ficheiros NDJSON contêm recursos com referências condicionais, que atualmente não são suportados por $import.
Solução: Substitua as referências condicionais a referências normais nos ficheiros NDJSON.
400 Pedido Incorreto
Comportamento: A operação de importação falhou e 400 Bad Request
é devolvida. O corpo da resposta tem o seguinte conteúdo:
{
"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)"
}
]
}
Solução: Verifique se a ligação para o armazenamento do Azure está correta. Verifique as definições de rede e firewall para se certificar de que o servidor FHIR consegue aceder ao armazenamento. Se o seu serviço estiver numa VNet, certifique-se de que o armazenamento está na mesma VNet ou numa VNet que tenha peering com a VNet do serviço FHIR.
403 Proibido
Comportamento: A operação de importação falhou e 403 Forbidden
é devolvida. O corpo da resposta tem o seguinte conteúdo:
{
"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: Utilizamos a identidade gerida para autenticação de armazenamento de origem. Este erro pode ser causado por uma atribuição de função em falta ou errada.
Solução: Atribua a função Contribuidor de Dados de Blobs de Armazenamento ao servidor FHIR, seguindo o guia RBAC.
Erro Interno do Servidor 500
Comportamento: A operação de importação falhou e 500 Internal Server Error
é devolvida. O corpo da resposta tem o seguinte conteúdo:
{
"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: Atingiu o limite de armazenamento do serviço FHIR.
Solução: Reduza o tamanho dos seus dados ou considere a API do Azure para FHIR, que tem um limite de armazenamento mais elevado.
Passos seguintes
Neste artigo, ficou a saber como a operação de importação permite importar dados FHIR para o servidor FHIR com débito elevado. Para obter mais informações sobre como converter dados em FHIR, exportar definições para configurar uma conta de armazenamento e mover dados para Azure Synapse, consulte
FHIR® é uma marca registada do HL7 e é utilizada com a permissão de HL7.