Операция импорта
Операция импорта позволяет загружать данные ресурсов быстрого взаимодействия в сфере здравоохранения (FHIR®) на сервер FHIR с высокой пропускной способностью с помощью операции $import. Импорт поддерживает начальную и добавочную загрузку данных на сервер FHIR.
Использование операции $import
Примечание
Для использования $import необходимо иметь роль FHIR Data Importer на сервере FHIR.
Чтобы использовать $import, необходимо настроить сервер FHIR, следуя инструкциям в статье Настройка параметров импорта . Импортируемые данные FHIR должны храниться в файлах для конкретных ресурсов в формате FHIR NDJSON в хранилище BLOB-объектов Azure.
Для операции импорта убедитесь, что
- Все ресурсы в файле должны быть одного типа. Для каждого типа ресурса может быть несколько файлов.
- Импортируемые данные должны находиться в том же клиенте, что и служба FHIR.
- Максимальное количество файлов для импорта для каждой операции — 10 000.
Примечание.
- Операция импорта не поддерживает условные ссылки в ресурсах.
- Если во время операции импорта несколько ресурсов используют один и тот же идентификатор ресурса, случайным образом импортируется только один из этих ресурсов. Зарегистрирована ошибка, связанная с тем же идентификатором ресурса.
Вызов $import
Выполните вызов <<FHIR service base URL>>/$import
с заголовком POST
и текстом запроса:
Заголовок запроса
Prefer:respond-async
Content-Type:application/fhir+json
Текст
имени параметра | Описание | Карте. | Допустимые значения |
---|---|---|---|
входнойФормат | Строка, представляющая имя формата источника данных. В настоящее время поддерживаются только файлы FHIR NDJSON. | 1..1 | application/fhir+ndjson |
mode | Значение режима импорта | 1..1 | Для начального импорта значение режима использования InitialLoad . Для режима добавочного импорта используйте IncrementalLoad значение режима . Если значение режима не указано, значение режима IncrementalLoad считается по умолчанию. |
input | Сведения о входных файлах. | 1..* | Массив JSON с тремя частями, описанными в таблице ниже. |
Имя входной части | Описание | Карте. | Допустимые значения |
---|---|---|---|
тип | Тип ресурса входного файла | 1..1 | Допустимый тип ресурса FHIR , соответствующий входным файлам. |
URL-адрес | URL-адрес входного файла службы хранилища Azure | 1..1 | Значение URL-адреса входного файла, который нельзя изменить. |
etag | Etag входного файла в службе хранилища Azure, используемого для проверки того, что содержимое файла не изменилось. | 0..1 | Значение Etag входного файла, которое невозможно изменить. |
Пример текста для начального импорта нагрузки:
{
"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"
}
]
}
]
}
Проверка состояния импорта
После инициации $import пустой текст ответа со ссылкой обратного вызова возвращается в Content-location
заголовке ответа вместе с 202-Accepted
кодом состояния. Сохраните эту ссылку обратного вызова, чтобы проверка состояние импорта.
Чтобы проверка состояние импорта, выполните вызов REST с GET
помощью метода для ссылки обратного вызова, возвращенной на предыдущем шаге.
Ответ можно интерпретировать с помощью следующей таблицы:
Код ответа | Текст ответа | Описание |
---|---|---|
202 — принято | Операция по-прежнему выполняется. | |
200 ОК | Текст ответа не содержит записи error.url | Все ресурсы успешно импортированы. |
200 ОК | Текст ответа содержит запись error.url | Ошибка при импорте некоторых ресурсов. Дополнительные сведения см. в файлах, расположенных по адресу error.url. Остальные ресурсы успешно импортированы. |
Другое | Произошла неустранимая ошибка, и операция остановлена. Откат успешно импортированных ресурсов не выполнен. |
В таблице ниже приведены некоторые важные поля в тексте ответа:
Поле | Описание |
---|---|
transactionTime | Время начала операции массового импорта. |
output.count | Число успешно импортированных ресурсов |
error.count | Количество ресурсов, которые не были импортированы из-за ошибки |
error.url | URL-адрес файла, содержащего сведения об ошибке. Каждый url-адрес error.url уникален для входного URL-адреса. |
Пример ответа:
{
"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"
}
]
}
Устранение неполадок
Предоставляет пошаговые решения для некоторых кодов ошибок, которые могут возникнуть во время операции импорта.
200 ОК, но в ответе возникла ошибка с URL-адресом
Поведение: Операция импорта завершается успешно и возвращает .200 OK
error.url
Однако они присутствуют в тексте ответа. Файлы, присутствующие в расположении error.url
, содержат фрагменты JSON, аналогичные приведенному ниже примеру:
{
"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}"
}
]
}
Вызвать: Файлы NDJSON содержат ресурсы с условными ссылками, которые в настоящее время не поддерживаются $import.
Решение: Замените условные ссылки обычными ссылками в файлах NDJSON.
400 — недопустимый запрос
Поведение: Операция импорта завершилась сбоем и 400 Bad Request
возвращается. Текст ответа содержит следующее содержимое:
{
"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)"
}
]
}
Решение: Убедитесь, что ссылка на хранилище Azure правильная. Проверьте параметры сети и брандмауэра, чтобы убедиться, что сервер FHIR имеет доступ к хранилищу. Если служба находится в виртуальной сети, убедитесь, что хранилище находится в той же виртуальной сети или в виртуальной сети, которая имеет пиринг с виртуальной сетью службы FHIR.
403. Запрещено
Поведение: Операция импорта завершилась сбоем и 403 Forbidden
возвращается. Текст ответа содержит следующее содержимое:
{
"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."
}
]
}
Вызвать: Мы используем управляемое удостоверение для проверки подлинности исходного хранилища. Эта ошибка может быть вызвана отсутствием или неправильным назначением роли.
Решение: Назначьте роль участника данных BLOB-объектов хранилища серверу FHIR в соответствии с руководством по RBAC.
500 Internal Server Error (внутренняя ошибка сервера)
Поведение: Операция импорта завершилась сбоем и 500 Internal Server Error
возвращается. Текст ответа содержит следующее содержимое:
{
"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."
}
]
}
Вызвать: Достигнут предельный объем хранилища для службы FHIR.
Решение: Уменьшите размер данных или рассмотрите возможность использования Azure API для FHIR с более высоким ограничением на хранилище.
Дальнейшие действия
Из этой статьи вы узнали, как операция импорта позволяет импортировать данные FHIR на сервер FHIR с высокой пропускной способностью. Дополнительные сведения о преобразовании данных в FHIR, экспорте параметров для настройки учетной записи хранения и перемещении данных в Azure Synapse см. в статье.
FHIR® является зарегистрированным товарным знаком HL7 и используется с разрешения HL7.