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


Копирование данных из службы FHIR в Azure Synapse Analytics

Из этой статьи вы узнаете о трех способах копирования данных из службы FHIR® в Службы данных Работоспособности Azure в Azure Synapse Analytics, которая представляет собой неграничную службу аналитики, которая объединяет интеграцию данных, хранение корпоративных данных и аналитику больших данных.

Использование средства FHIR для агента синхронизации Synapse

Примечание.

FHIR в Агент синхронизации Synapse — это средство открытый код, выпущенное в соответствии с лицензией MIT, и не распространяется на службы Microsoft SLA для Azure.

FHIR для агента синхронизации Synapse — это проект Microsoft OSS, выпущенный в соответствии с лицензией MIT. Это функция Azure, которая извлекает данные из сервера FHIR с помощью API ресурсов FHIR, преобразует его в иерархические файлы Parquet и записывает их в Azure Data Lake практически в реальном времени. Он также содержит скрипт для создания внешних таблиц и представлений в бессерверном пуле SQL Synapse Server, указывающего на файлы Parquet.

Это решение позволяет запрашивать все данные FHIR с такими инструментами, как Synapse Studio, SSMS и Power BI. Вы также можете получить доступ к файлам Parquet непосредственно из пула Synapse Spark. Это решение следует учитывать, если вы хотите получить доступ ко всем данным FHIR практически в режиме реального времени и отложить пользовательское преобразование в подчиненные системы.

Следуйте инструкциям по установке и использованию ОСS.

Использование средства FHIR для генератора конвейера CDM

Примечание.

Генератор конвейера FHIR для CDM — это средство открытый код, выпущенное в соответствии с лицензией MIT, и не распространяется на соглашение об уровне обслуживания Майкрософт для служб Azure.

Генератор конвейера FHIR для CDM — это проект Microsoft OSS, выпущенный в соответствии с лицензией MIT. Это средство для создания конвейера ADF для копирования моментального снимка данных с сервера FHIR с помощью API $export, преобразования его в формат CSV и записи в папку CDM в Azure Data Lake Storage 2-го поколения. Для этого средства требуется файл конфигурации, созданный пользователем, содержащий инструкции по проекту и неструктурированным ресурсам FHIR и полям в таблицы. Вы также можете следовать инструкциям по созданию подчиненного конвейера в рабочей области Synapse для перемещения данных из папки CDM в выделенный пул SQL Synapse.

Это решение позволяет преобразовать данные в табличный формат при записи в папку CDM. Это решение следует учитывать, если вы хотите преобразовать данные FHIR в настраиваемую схему после извлечения из сервера FHIR.

Следуйте инструкциям по установке и использованию ОСS.

Загрузка экспортированных данных в Synapse с помощью T-SQL

В этом подходе используется операция FHIR для копирования ресурсов FHIR $export в хранилище BLOB-объектов Azure Data Lake 2-го поколения (ADL 2-го поколения) в NDJSON формате. Затем данные из хранилища загружались в бессерверные или выделенные пулы SQL в Synapse с помощью T-SQL. Эти шаги можно преобразовать в надежный конвейер перемещения данных с помощью конвейеров Synapse.

Хранилище Azure в Synapse с помощью $export.

Использование $export для копирования данных

$export Настройка на сервере FHIR

Сервер FHIR в Службах данных Работоспособности Azure реализует $export операцию, определенную спецификацией FHIR для экспорта всех или отфильтрованного подмножества данных FHIR в NDJSON формате. Кроме того, он поддерживает деидентируемый экспорт для анонимизации данных FHIR во время экспорта.

Чтобы экспортировать данные FHIR в хранилище BLOB-объектов Azure, сначала необходимо настроить сервер FHIR для экспорта данных в учетную запись хранения. Вам потребуется включить управляемое удостоверение (1), (2) перейти к контроль доступа в учетной записи хранения и добавить назначение ролей (3) выберите учетную запись хранения.$export Дополнительные пошаговые сведения см . здесь.

Сервер можно настроить для экспорта данных в любую учетную запись хранения Azure, но мы рекомендуем экспортировать данные в ADL 2-го поколения для оптимального выравнивания с Synapse.

Использование $export команды

После настройки сервера FHIR вы можете следовать документации по экспорту ресурсов FHIR на уровне системы, пациента или группы. Например, вы можете экспортировать все данные FHIR, связанные с пациентами, в Group следующей $export команде, в которой укажите имя хранилища BLOB-объектов ADL 2-го поколения в поле {{BlobContainer}}:

https://{{FHIR service base URL}}/Group/{{GroupId}}/$export?_container={{BlobContainer}}  

Вы также можете использовать _type параметр в предыдущем $export вызове, чтобы ограничить ресурсы, которые требуется экспортировать. Например, следующий вызов экспортирует только Patientресурсы MedicationRequestи Observation ресурсы:

https://{{FHIR service base URL}}/Group/{{GroupId}}/$export?_container={{BlobContainer}}&
_type=Patient,MedicationRequest,Condition

Дополнительные сведения о поддерживаемых параметрах см. в разделе страницы $export о параметрах запроса.

Использование Synapse для аналитики

Создание рабочей области Synapse

Прежде чем использовать Synapse, вам потребуется рабочая область Synapse. Создайте службу Azure Synapse Analytics в портал Azure. Дополнительные пошаговые инструкции можно найти здесь. Для создания рабочей области требуется ADLSGEN2 учетная запись. Ваша рабочая область Azure Synapse будет использовать эту учетную запись хранения для хранения данных рабочей области Synapse.

После создания рабочей области вы можете просмотреть рабочую область в Synapse Studio, войдите в рабочую область https://web.azuresynapse.netили запустите Synapse Studio в портал Azure.

Создание связанной службы между хранилищем Azure и Synapse

Чтобы скопировать данные в Synapse, необходимо создать связанную службу, которая подключает учетную запись служба хранилища Azure, где вы экспортировали данные с Synapse. Дополнительные пошаговые инструкции можно найти здесь.

  1. В Synapse Studio перейдите на вкладку "Управление" и в разделе "Внешние подключения" выберите "Связанные службы".
  2. Выберите "Создать" , чтобы добавить новую связанную службу.
  3. Выберите Azure Data Lake Storage 2-го поколения из списка и нажмите кнопку "Продолжить".
  4. Введите учетные данные для проверки подлинности. По завершении нажмите кнопку Создать.

Теперь, когда у вас есть связанная служба между хранилищем ADL 2-го поколения и Synapse, вы готовы использовать пулы Synapse SQL для загрузки и анализа данных FHIR.

Выбор между бессерверным и выделенным пулом SQL

Azure Synapse Analytics предлагает два разных пула SQL: бессерверный пул SQL и выделенный пул SQL. Бессерверный пул SQL обеспечивает гибкость запроса данных непосредственно в хранилище BLOB-объектов с помощью бессерверной конечной точки SQL без подготовки ресурсов. Выделенный пул SQL имеет мощность обработки для высокой производительности и параллелизма и рекомендуется использовать для возможностей хранения данных корпоративного масштаба. Дополнительные сведения о двух пулах SQL см . на странице документации Synapse по архитектуре SQL.

Использование бессерверного пула SQL

Так как он бессерверный, не существует инфраструктуры для настройки или кластеров для обслуживания. Вы можете начать запрашивать данные из Synapse Studio сразу после создания рабочей области.

Например, следующий запрос можно использовать для преобразования выбранных полей из Patient.ndjson табличной структуры:

SELECT * FROM  
OPENROWSET(bulk 'https://{{youraccount}}.blob.core.windows.net/{{yourcontainer}}/Patient.ndjson', 
FORMAT = 'csv', 
FIELDTERMINATOR ='0x0b', 
FIELDQUOTE = '0x0b')  
WITH (doc NVARCHAR(MAX)) AS rows     
CROSS APPLY OPENJSON(doc)     
WITH ( 
    ResourceId VARCHAR(64) '$.id', 
    Active VARCHAR(10) '$.active', 
    FullName VARCHAR(100) '$.name[0].text', 
    Gender VARCHAR(20) '$.gender', 
       ...
) 

В предыдущем запросе OPENROWSET функция обращается к файлам в служба хранилища Azure и анализирует текст JSON и OPENJSON возвращает входные свойства JSON в виде строк и столбцов. При каждом выполнении этого запроса бессерверный пул SQL считывает файл из хранилища BLOB-объектов, анализирует JSON и извлекает поля.

Вы также можете материализовать результаты в формате Parquet во внешней таблице , чтобы повысить производительность запросов, как показано ниже.

-- Create External data source where the parquet file will be written 
CREATE EXTERNAL DATA SOURCE [MyDataSource] WITH ( 
    LOCATION = 'https://{{youraccount}}.blob.core.windows.net/{{exttblcontainer}}' 
); 
GO 

-- Create External File Format 
CREATE EXTERNAL FILE FORMAT [ParquetFF] WITH ( 
    FORMAT_TYPE = PARQUET, 
    DATA_COMPRESSION = 'org.apache.hadoop.io.compress.SnappyCodec' 
); 
GO 

CREATE EXTERNAL TABLE [dbo].[Patient] WITH ( 
        LOCATION = 'PatientParquet/', 
        DATA_SOURCE = [MyDataSource], 
        FILE_FORMAT = [ParquetFF] 
) AS 
SELECT * FROM  
OPENROWSET(bulk 'https://{{youraccount}}.blob.core.windows.net/{{yourcontainer}}/Patient.ndjson' 
-- Use rest of the SQL statement from the previous example --

Использование выделенного пула SQL

Выделенный пул SQL поддерживает управляемые таблицы и иерархический кэш для производительности в памяти. Большие данные можно импортировать с помощью простых запросов T-SQL, а затем использовать возможности подсистемы распределенных запросов для выполнения высокопроизводительной аналитики.

Самый простой и быстрый способ загрузки данных из хранилища в выделенный пул SQL — использовать COPY команду в T-SQL, которая может считывать CSV-файлы, Parquet и ORC. Как и в следующем примере запроса, используйте COPY команду для загрузки NDJSON строк в табличную структуру.

-- Create table with HEAP, which is not indexed and does not have a column width limitation of NVARCHAR(4000) 
CREATE TABLE StagingPatient ( 
Resource NVARCHAR(MAX) 
) WITH (HEAP) 
COPY INTO StagingPatient 
FROM 'https://{{yourblobaccount}}.blob.core.windows.net/{{yourcontainer}}/Patient.ndjson' 
WITH ( 
FILE_TYPE = 'CSV', 
ROWTERMINATOR='0x0a', 
FIELDQUOTE = '', 
FIELDTERMINATOR = '0x00' 
) 
GO

После получения строк JSON в предыдущей StagingPatient таблице можно создать различные табличные форматы данных с помощью OPENJSON функции и хранения результатов в таблицах. Ниже приведен пример SQL-запроса для создания Patient таблицы путем извлечения нескольких полей из Patient ресурса:

SELECT RES.* 
INTO Patient 
FROM StagingPatient
CROSS APPLY OPENJSON(Resource)   
WITH (
  ResourceId VARCHAR(64) '$.id',
  FullName VARCHAR(100) '$.name[0].text',
  FamilyName VARCHAR(50) '$.name[0].family',
  GivenName VARCHAR(50) '$.name[0].given[0]',
  Gender VARCHAR(20) '$.gender',
  DOB DATETIME2 '$.birthDate',
  MaritalStatus VARCHAR(20) '$.maritalStatus.coding[0].display',
  LanguageOfCommunication VARCHAR(20) '$.communication[0].language.text'
) AS RES 
GO

Следующие шаги

В этой статье вы узнали три разных способа копирования данных FHIR в Synapse.

Затем вы можете узнать, как можно деидентифицировать данные FHIR при экспорте данных в Synapse для защиты PHI.

Примечание.

FHIR® является зарегистрированным товарным знаком HL7 и используется с разрешением HL7 .