Поделиться через


Операция импорта

Операция импорта позволяет загружать данные ресурсов быстрого взаимодействия в сфере здравоохранения (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.