Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Вы можете использовать операцию import
, чтобы загружать данные FHIR® на сервер FHIR с высокой пропускной способностью.
Режимы операций импорта
Операция import
поддерживает два режима: начальный и добавочный. Каждый режим имеет различные функции и варианты использования.
Начальный режим
Предназначено для загрузки ресурсов FHIR на пустой сервер FHIR.
Блокирует запись API на сервер FHIR.
Инкрементальный режим
Оптимизировано для загрузки данных на сервер FHIR периодически и не блокирует запись через API.
Позволяет загружать
lastUpdated
иversionId
значения из метаданных ресурсов, если они присутствуют в JSON ресурса.Позволяет загружать ресурсы в непоследовательном порядке версий. Примечание для несистематического ввода ресурсов
- Если в импортируемых файлах не указаны значения полей
version
иlastUpdated
, нет гарантии, что все ресурсы будут импортированы в службу FHIR. - Если в импортируемых файлах имеются ресурсы с повторяющимися значениями полей
version
иlastUpdated
, то в службу FHIR случайным образом будет добавлен только один из этих ресурсов. - При параллельном выполнении, если несколько ресурсов используют один и тот же идентификатор ресурса, импортируется только один из этих ресурсов случайным образом.
- Если в импортируемых файлах не указаны значения полей
В следующей таблице показано различие между режимами импорта.
Области | Начальный режим | Инкрементальный режим |
---|---|---|
Способность | Начальная загрузка данных в службу FHIR | Непрерывное внедрение данных в службу FHIR (пошаговое или приближенное к реальному времени). |
Одновременные вызовы API | Блокирует одновременные операции записи | Данные можно получать одновременно при выполнении операций CRUD API на сервере FHIR. |
Загрузка версионных ресурсов | Не поддерживается | Включает прием нескольких версий ресурсов FHIR в одном пакете при сохранении журнала ресурсов. |
Сохранение значения поля lastUpdated | Не поддерживается | Сохраните значение поля lastUpdated в ресурсах FHIR во время процесса загрузки данных. |
Выставление счетов | Плата не взимается | Плата взимается на основе успешного приема ресурсов. Плата взимается в соответствии с ценами API. |
Вопросы, связанные с производительностью
Чтобы добиться оптимальной производительности операции import
, рассмотрите следующие факторы.
Используйте большие файлы для импорта. Оптимальный размер файла NDJSON для импорта составляет >=50 МБ (или >=20 K ресурсов, без верхнего предела). Рассмотрите возможность объединения небольших файлов вместе.
Импорт файлов ресурсов FHIR в виде одного пакета. Для оптимальной производительности импортируйте все файлы ресурсов FHIR, которые необходимо принять на сервере FHIR в одной
import
операции. Импорт всех файлов в одной операции снижает затраты на создание нескольких заданий импорта и управление ими. Оптимально общий размер файлов в одном импорте должен быть большим (>=100 ГБ или >=100 млн ресурсов, без верхнего предела).Ограничение количества заданий параллельного импорта. Одновременно можно выполнять несколько
import
заданий, но это может повлиять на общую пропускную способность операцииimport
.
Выполнение операции импорта
Предпосылки
Чтобы использовать
import
операцию, на сервере FHIR требуется роль Импортера данных FHIR.Настройте сервер FHIR. Данные FHIR должны храниться в файлах, относящихся к ресурсам, в формате FHIR NDJSON в хранилище BLOB-объектов Azure. Дополнительные сведения см. в разделе "Настройка параметров импорта".
Данные должны находиться в том же арендаторе, что и служба FHIR.
Получение маркера доступа см. в разделе "Маркер доступа"
Совершить звонок
Сделайте вызов POST
к <<FHIR service base URL>>/$import
со следующим заголовком запроса и текстом запроса.
Заголовок запроса
Prefer:respond-async
Content-Type:application/fhir+json
Тело
В следующих таблицах описываются параметры тела и входные данные.
Имя параметра | Описание | Мощность | Принятые значения |
---|---|---|---|
inputFormat |
Строка, представляющая имя формата источника данных. Поддерживаются только файлы FHIR NDJSON. | 1..1 | application/fhir+ndjson |
mode |
Значение режима импорта. | 1..1 | Для начального импорта используйте режим InitialLoad . Для импорта в добавочном режиме используйте значение режима IncrementalLoad . Если значение режима не указано, IncrementalLoad значение режима используется по умолчанию. |
allowNegativeVersions |
Позволяет серверу FHIR назначать отрицательные версии для записей ресурсов, если указано явное значение lastUpdated и версия не указана, в случаях, когда входные данные не помещаются в непрерывное пространство положительных версий, имеющихся в хранилище. | 0..1 | Чтобы включить эту функцию, передайте true. По умолчанию значение установлено в false. |
input |
Сведения о входных файлах. | 1..* | Массив JSON с тремя частями, описанными в следующей таблице. |
Наименование части ввода | Описание | Кардинальное число | Принятые значения |
---|---|---|---|
type |
Тип ресурса входного файла. | 0..1 | Допустимый тип ресурса FHIR , соответствующий входной файлу. Это поле является необязательным. |
url |
URL-адрес хранилища Azure входного файла. | 1..1 | Значение URL-адреса входного файла. Невозможно изменить значение. |
etag |
ETag входного файла в хранилище Azure. Используется для проверки того, что содержимое файла не изменяется после import регистрации. |
0..1 | Значение ETag входного файла. |
{
"resourceType": "Parameters",
"parameter": [
{
"name": "inputFormat",
"valueString": "application/fhir+ndjson"
},
{
"name": "mode",
"valueString": "<Use "InitialLoad" for initial mode import / Use "IncrementalLoad" for incremental mode import>"
},
{
"name": "allowNegativeVersions",
"valueBoolean": true
},
{
"name": "input",
"part": [
{
"name": "url",
"valueUri": "https://example.blob.core.windows.net/resources/filename.ndjson"
},
{
"name": "etag",
"valueUri": "\"0x8D92A7342657F4F\""
}
]
}
]
}
Проверка состояния импорта
После запуска import
операции пустой текст ответа со ссылкой callback
возвращается в Content-location
заголовке ответа вместе с 202 Accepted
кодом состояния. Сохраните ссылку callback
, чтобы проверить состояние импорта.
Регистрация операции import
осуществляется в виде идемпотентного вызова. Одно и то же содержимое данных регистрации приводит к одинаковой регистрации, что влияет на способность повторной обработки файлов с тем же именем. Воздержаться от обновления файлов на месте. Вместо этого мы рекомендуем использовать другое имя файла для обновленных данных. Или, если обновление на месте с тем же именем файла неизбежно, добавьте ETags в нагрузку регистрации.
Чтобы проверить состояние импорта, выполните вызов REST с GET
методом к callback
ссылке, возвращенной на предыдущем шаге.
Интерпретация ответа с помощью этой таблицы.
Код ответа | Основная часть ответа | Описание |
---|---|---|
202 Accepted |
Операция по-прежнему выполняется. | |
200 OK |
The response body doesn't contain any error.url entry |
Все ресурсы успешно импортированы. |
200 OK |
The response body contains some error.url entry |
Произошла ошибка при импорте некоторых ресурсов. Дополнительные сведения см. в файлах, расположенных по адресу error.url . Остальные ресурсы успешно импортированы. |
Other |
Произошла неустранимая ошибка, и операция остановлена. Успешно импортированные ресурсы не откатываются. |
В следующей таблице описываются важные поля в тексте ответа:
Поле | Описание |
---|---|
transactionTime |
Время начала массовой import операции. |
output.count |
Количество успешно импортированных ресурсов. |
error.count |
Количество ресурсов, которые не были импортированы из-за ошибки. |
error.url |
URL-адрес файла, содержащего сведения об ошибке. Каждый error.url экземпляр является уникальным для входного URL-адреса. |
{
"transactionTime": "2021-07-16T06:46:52.3873388+00:00",
"request": "https://importperf.azurewebsites.net/$Import",
"output": [
{
"type": <null in case type parameter in not populated in request. If provided, resource name will be added>,
"count": 10000,
"inputUrl": "https://example.blob.core.windows.net/resources/filename.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"
}
]
}
Прием мягко удаленных ресурсов
Инкрементальный импорт поддерживает обработку мягко удаленных ресурсов. Необходимо использовать расширение для импорта мягко удаленных ресурсов в службе FHIR.
Добавьте расширение к ресурсу для информирования службы FHIR, что ресурс был мягко удалён.
{"resourceType": "Patient", "id": "example10", "meta": { "lastUpdated": "2023-10-27T04:00:00.000Z", "versionId": 4, "extension": [ { "url": "http://azurehealthcareapis.com/data-extensions/deleted-state", "valueString": "soft-deleted" } ] } }
После успешного завершения import
операции выполните поиск в истории ресурса, чтобы проверить мягко удаленные ресурсы. Если вы знаете идентификатор удаленного ресурса, используйте шаблон URL-адреса в следующем примере.
<FHIR_URL>/<resource-type>/<resource-id>/_history
Если вы не знаете идентификатор ресурса, выполните поиск в истории по типу ресурса.
<FHIR_URL>/<resource-type>/_history
Устранение неполадок операции импорта
Ниже приведены сообщения об ошибках, возникающие при сбое import
операции, а также рекомендуемые действия для устранения проблем.
200 ОК, но в ответе возникает ошибка с URL-адресом
Операция import
завершается успешно и возвращает 200 OK
. Однако, error.url
присутствует в тексте ответа. Файлы, присутствующих в расположении error.url
, содержат фрагменты JSON, аналогичные следующему примеру.
{
"resourceType": "OperationOutcome",
"issue": [
{
"severity": "error",
"details": {
"text": "Given conditional reference '{0}' doesn't resolve to a resource."
},
"diagnostics": "Failed to process resource at line: {0} with stream start offset: {1}"
}
]
}
Причина: файлы NDJSON содержат ресурсы с условными ссылками, которые import
не поддерживаются.
Решение. Замените условные ссылки на обычные ссылки в файлах NDJSON.
400 Недопустимый запрос
Операция import
завершается ошибкой и возвращается 400 Bad Request
. Тело ответа содержит диагностический контент
Операция импорта завершилась ошибкой по причине: такой узел не известен. (example.blob.core.windows.net:443) Решение. Убедитесь, что ссылка на хранилище Azure правильна. Проверьте параметры сети и брандмауэра, чтобы убедиться, что сервер FHIR может получить доступ к хранилищу. Если служба находится в виртуальной сети, убедитесь, что хранилище находится в той же виртуальной сети или в виртуальной сети, пиринговой с виртуальной сетью службы FHIR.
Ресурсы SearchParameter нельзя обрабатывать с помощью решения импорта: операция импорта возвращает ошибку HTTP 400 при приеме ресурса параметра поиска через процесс импорта. Это изменение предназначено для предотвращения попадания параметров поиска в неправильное состояние при выполнении операции импорта.
403 Запрещено
Операция import
завершается ошибкой и возвращается 403 Forbidden
. Текст ответа содержит диагностическое содержимое.
Операция импорта завершилась ошибкой по причине: сервер не прошел проверку подлинности запроса. Убедитесь, что значение заголовка Authorization правильно сформировано, включая подпись. Причина. Служба FHIR использует управляемое удостоверение для проверки подлинности исходного хранилища. Эта ошибка указывает на отсутствие или неправильное назначение роли. Решение: Назначьте серверу FHIR роль Storage Blob Data Contributor. Дополнительные сведения см. в статье Назначение ролей Azure.
500 Internal Server Error (внутренняя ошибка сервера).
Операция import
завершается ошибкой и возвращается 500 Internal Server Error
. Текст ответа содержит содержимое диагностики
Операция импорта завершилась ошибкой по причине: база данных "***" достигла квоты размера. Разделите или удалите данные, удалите индексы или просмотрите документацию, чтобы найти возможные решения проблемы.
Причина. Достигнуто ограничение хранилища службы FHIR.
Решение. Уменьшите размер данных или рассмотрите azure API для FHIR, что имеет более высокий предел хранилища.
423 Заблокировано
Поведение: Операция import
завершается ошибкой и возвращается 423 Locked
. Текст ответа содержит следующее содержимое:
{
"resourceType": "OperationOutcome",
"id": "13876ec9-3170-4525-87ec-9e165052d70d",
"issue": [
{
"severity": "error",
"code": "processing",
"diagnostics": "import operation failed for reason: Service is locked for initial import mode."
}
]
}
Причина. Служба FHIR настроена в режиме начального импорта, который блокировал другие операции.
Решение: отключите режим начального импорта службы FHIR или выберите добавочный режим.
Ограничения
- Максимально допустимое количество файлов для каждой
import
операции — 10 000. - Количество файлов, загруженных на сервер FHIR с одинаковым значением поля lastUpdated, точным до миллисекунды, не может превышать 10 000.
- Операция импорта не поддерживается для типа ресурса SearchParameter.
- Операция импорта не поддерживает условные ссылки в ресурсах.
Дальнейшие действия
Преобразуйте ваши данные в FHIR
Настройка параметров экспорта и настройка учетной записи хранения
Копирование данных в Azure Synapse Analytics
Примечание.
FHIR® является зарегистрированным товарным знаком HL7 и используется с разрешением HL7 .