Kopírování dat z Azure API for FHIR do Azure Synapse Analytics

V tomto článku se dozvíte tři způsoby kopírování dat z rozhraní Azure API for FHIR do Azure Synapse Analytics, což je neomezená analytická služba, která spojuje integraci dat, skladování podnikových dat a analýzu velkých objemů dat.

Použití nástroje OSS agenta synchronizace FHIR na Synapse

Poznámka

FHIR to Synapse Sync Agent je nástroj pro open source vydaný v rámci licence MIT a nevztahuje se na ně smlouva MICROSOFT SLA pro služby Azure.

Agent synchronizace FHIR na Synapse je projekt operačního systému Microsoftu vydaný v rámci licence MIT. Je to funkce Azure, která extrahuje data ze serveru FHIR pomocí rozhraní API prostředků FHIR, převádí je na hierarchické soubory Parquet a zapisuje je do Azure Data Lake téměř v reálném čase. Obsahuje také skript pro vytváření externích tabulek a zobrazení v bezserverovém fondu SQL Synapse odkazující na soubory Parquet.

Toto řešení umožňuje dotazovat se na celá data FHIR pomocí nástrojů, jako jsou Synapse Studio, SSMS a Power BI. K souborům Parquet můžete přistupovat také přímo z fondu Synapse Spark. Toto řešení byste měli zvážit, pokud chcete mít přístup ke všem datům FHIR téměř v reálném čase a chcete odložit vlastní transformaci na podřízené systémy.

Pokyny k instalaci a použití najdete v dokumentaci k OSS.

Použití nástroje OSS generátoru kanálů FHIR na CDM

Poznámka

Generátor kanálů FHIR na CDM je nástroj pro open source vydaný v rámci licence MIT a nevztahuje se na ně smlouva MICROSOFT SLA pro služby Azure.

Generátor kanálů FHIR to CDM je projekt microsoftu OSS vydaný v rámci licence MIT. Jedná se o nástroj pro vygenerování kanálu ADF pro kopírování snímku dat ze serveru FHIR pomocí rozhraní API $export, jeho transformaci do formátu CSV a zápis do složky CDM v Azure Data Lake Storage Gen2. Nástroj vyžaduje uživatelem vytvořený konfigurační soubor obsahující pokyny k projektování a zplošťování prostředků a polí FHIR do tabulek. Můžete také postupovat podle pokynů k vytvoření podřízeného kanálu v pracovním prostoru Synapse a přesunout data ze složky CDM do vyhrazeného fondu Synapse SQL.

Toto řešení umožňuje transformovat data do tabulkového formátu při zápisu do složky CDM. Toto řešení byste měli zvážit, pokud chcete transformovat data FHIR na vlastní schéma po jejich extrahování ze serveru FHIR.

Pokyny k instalaci a použití najdete v dokumentaci k OSS.

Načtení exportovaných dat do Synapse pomocí T-SQL

Při tomto přístupu použijete operaci FHIR $export ke zkopírování prostředků FHIR do úložiště objektů blob Azure Data Lake Gen2 (ADL Gen2) ve NDJSON formátu. Následně pomocí T-SQL načtete data z úložiště do bezserverových nebo vyhrazených fondů SQL ve službě Synapse. Tyto kroky můžete převést na robustní kanál pro přesun dat pomocí kanálů Synapse.

Azure Storage do Synapse pomocí $export.

Kopírování dat pomocí $export

Konfigurace $export na serveru FHIR

Azure API for FHIR implementuje $export operaci definovanou specifikací FHIR, která exportuje všechna nebo filtrovanou podmnožinu dat FHIR ve NDJSON formátu. Kromě toho podporuje export se znepřístupněnou identistencí za účelem anonymizování dat FHIR během exportu.

Pokud chcete exportovat data FHIR do úložiště objektů blob v Azure, musíte nejprve nakonfigurovat server FHIR tak, aby export dat do účtu úložiště. Budete muset (1) povolit spravovanou identitu, (2) přejít na Access Control v účtu úložiště a přidat přiřazení role, (3) vybrat účet úložiště pro $export. Další podrobné informace najdete tady.

Server můžete nakonfigurovat tak, aby exportoval data do libovolného typu účtu úložiště Azure, ale doporučujeme exportovat data do ADL Gen2, abyste ho co nejlépe vyrovnali se Synapse.

Using $export command

Po konfiguraci serveru FHIR můžete postupovat podle dokumentace k exportu prostředků FHIR na úrovni Systém, Pacient nebo Skupina. Pomocí následujícího příkazu můžete například exportovat všechna data FHIR týkající se pacientů pomocí Group následujícího $export příkazu, ve kterém zadáte název úložiště objektů blob ADL Gen2 do pole {{BlobContainer}}:

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

K omezení prostředků, které chcete exportovat, můžete použít _type také parametr ve $export výše uvedeném volání. Například následující volání exportuje pouze Patientprostředky , MedicationRequesta Observation :

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

Další informace o různých podporovaných parametrech najdete v části na naší $export stránce věnované parametrům dotazu.

Použití Synapse for Analytics

Vytvoření pracovního prostoru Synapse

Před použitím Synapse budete potřebovat pracovní prostor Synapse. Na Azure Portal vytvoříte službu Azure Synapse Analytics. Další podrobné pokyny najdete tady. K vytvoření pracovního prostoru potřebujete ADLSGEN2 účet. Váš Azure Synapse pracovní prostor bude tento účet úložiště používat k ukládání dat pracovního prostoru Synapse.

Po vytvoření pracovního prostoru můžete svůj pracovní prostor zobrazit v Synapse Studio přihlášením k pracovnímu prostoru na https://web.azuresynapse.netnebo spuštěním Synapse Studio v Azure Portal.

Vytvoření propojené služby mezi úložištěm Azure a Synapse

Pokud chcete data zkopírovat do Synapse, musíte vytvořit propojenou službu, která propojí váš účet Azure Storage, do kterého jste exportovali data, se Synapse. Další podrobné pokyny najdete tady.

  1. V Synapse Studio přejděte na kartu Spravovat a v části Externí připojení vyberte Propojené služby.
  2. Vyberte Nová a přidejte novou propojenou službu.
  3. V seznamu vyberte Azure Data Lake Storage Gen2 a pak pokračovat.
  4. Zadejte přihlašovací údaje pro ověřování. Po dokončení vyberte Vytvořit.

Teď, když máte propojenou službu mezi úložištěm ADL Gen 2 a Synapse, jste připraveni použít fondy Synapse SQL k načtení a analýze dat FHIR.

Rozhodování mezi bezserverový a vyhrazeným fondem SQL

Azure Synapse Analytics nabízí dva různé fondy SQL, bezserverový fond SQL a vyhrazený fond SQL. Bezserverový fond SQL poskytuje flexibilitu dotazování dat přímo v úložišti objektů blob pomocí bezserverového koncového bodu SQL bez zřizování prostředků. Vyhrazený fond SQL má výpočetní výkon pro zajištění vysokého výkonu a souběžnosti a doporučuje se pro možnosti datových skladů na podnikové úrovni. Další podrobnosti o těchto dvou fondech SQL najdete na stránce dokumentace k synapse o architektuře SQL.

Použití bezserverového fondu SQL

Vzhledem k tomu, že je bezserverová, není potřeba nastavit žádnou infrastrukturu ani udržovat clustery. Dotazování na data z Synapse Studio můžete začít hned po vytvoření pracovního prostoru.

Například následující dotaz lze použít k transformaci vybraných polí do Patient.ndjson tabulkové struktury:

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', 
       ...
) 

Ve výše uvedeném OPENROWSET dotazu funkce přistupuje k souborům ve službě Azure Storage, OPENJSON parsuje text JSON a vrací vstupní vlastnosti JSON jako řádky a sloupce. Pokaždé, když se tento dotaz spustí, bezserverový fond SQL načte soubor z úložiště objektů blob, parsuje JSON a extrahuje pole.

Výsledky můžete také materializovat ve formátu Parquet v externí tabulce , abyste získali lepší výkon dotazů, jak je znázorněno níže:

-- 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 --

Použití vyhrazeného fondu SQL

Vyhrazený fond SQL podporuje spravované tabulky a hierarchickou mezipaměť pro výkon v paměti. Pomocí jednoduchých dotazů T-SQL můžete importovat velké objemy dat a pak využít výkon distribuovaného dotazovacího modulu ke spouštění vysoce výkonných analýz.

Nejjednodušším a nejrychlejším způsobem, jak načíst data z úložiště do vyhrazeného fondu SQL, je použít COPY příkaz v jazyce T-SQL, který dokáže číst soubory CSV, Parquet a ORC. Stejně jako v příkladu dotazu níže načtěte NDJSON řádky do tabulkové struktury pomocí COPY příkazu .

-- 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

Jakmile budete mít ve StagingPatient výše uvedené tabulce řádky JSON, můžete vytvořit různé tabulkové formáty dat pomocí OPENJSON funkce a uložit výsledky do tabulek. Tady je ukázkový dotaz SQL pro vytvoření Patient tabulky extrahováním několika polí z Patient prostředku:

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

Další kroky

V tomto článku jste se naučili tři různé způsoby kopírování dat FHIR do Synapse.

Dále se dozvíte, jak můžete deidentifikovat data FHIR při jejich exportu do Synapse za účelem ochrany PHI.

FHIR® je registrovaná ochranná známka HL7 a používá se s povolením HL7.