Sdílet prostřednictvím


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

Důležité

Rozhraní Azure API for FHIR bude vyřazeno 30. září 2026. Postupujte podle strategií migrace a do tohoto data přejděte na službu FHIR® služby Azure Health Data Services. Vzhledem k vyřazení rozhraní Azure API for FHIR nebudou nová nasazení od 1. dubna 2025 povolena. Služba FHIR služby Azure Health Data Services je vyvinutá verze rozhraní Azure API for FHIR, která zákazníkům umožňuje spravovat služby FHIR, DICOM a MedTech s integrací do jiných služeb Azure.

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. Toto jsou následující:

  • Použití FHIR k nástroji Synapse Sync Agent OSS
  • Použití FHIR k nástroji OSS generátoru kanálů CDM
  • Použití $export a načtení dat do Synapse pomocí T-SQL

Použití FHIR k nástroji Synapse Sync Agent OSS

Poznámka:

FHIR pro Synapse Sync Agent je opensourcový nástroj vydaný v rámci licence MIT a nevztahuje se na smlouvu SLA microsoftu pro služby Azure.

FHIR pro Synapse Sync Agent je projekt Microsoft OSS vydaný v rámci licence MIT. Je to funkce Azure, která extrahuje data ze serveru FHIR pomocí rozhraní API prostředků FHIR, převede 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ího 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 získat 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 FHIR k generátoru kanálů CDM

Poznámka:

Generátor kanálů FHIR to CDM je opensourcový nástroj vydaný v rámci licence MIT a nevztahuje se na smlouvu SLA microsoftu pro služby Azure.

Generátor kanálů FHIR to CDM je projekt Microsoft OSS vydaný v rámci licence MIT. Je to nástroj pro vygenerování kanálu ADF pro kopírování snímku dat ze serveru FHIR pomocí $export rozhraní API, 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 pro projektování a zploštění prostředků FHIR a polí 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 po extrahování ze serveru FHIR transformovat data FHIR na vlastní schéma.

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

Načítání exportovaných dat do Synapse pomocí T-SQL

V tomto přístupu použijete operaci FHIR ke kopírování prostředků FHIR $export do úložiště objektů blob Azure Data Lake Gen2 (ADL Gen2) ve NDJSON formátu. Následně načtete data z úložiště do bezserverových nebo vyhrazených fondů SQL ve službě Synapse pomocí T-SQL. 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 k exportu všech nebo filtrované podmnožina dat FHIR ve NDJSON formátu. Kromě toho podporuje deidentifikovaný export 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ě. Potřebujete (1) povolit spravovanou identitu, (2) přejít do řízení přístupu v účtu úložiště a přidat přiřazení role (3) vyberte účet úložiště pro $export. Další podrobné pokyny 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 měli nejlepší soulad se službou Synapse.

Using $export command

Po nakonfigurování serveru FHIR můžete podle dokumentace exportovat prostředky FHIR na úrovni systému, pacienta nebo skupiny. Můžete například exportovat všechna data FHIR související s pacienty Group pomocí následujícího $export příkazu, ve kterém do pole {{BlobContainer}}zadáte název úložiště objektů blob ADL Gen2:

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

Pomocí parametru _type v předchozím $export volání můžete omezit prostředky, které chcete exportovat. Například následující volání exportuje pouze Patient, MedicationRequesta Observation prostředky:

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

Další informace o podporovaných různých parametrech najdete v části stránky $export s parametry dotazu.

Použití Synapse for Analytics

Vytvoření pracovního prostoru Synapse

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

Po vytvoření pracovního prostoru můžete pracovní prostor zobrazit v synapse Studiu tak, že se přihlásíte do svého pracovního prostoru https://web.azuresynapse.netnebo spustíte Synapse Studio na webu Azure Portal.

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

Pokud chcete zkopírovat data do Synapse, musíte vytvořit propojenou službu, která se připojuje k účtu Azure Storage, kde jste exportovali data pomocí Synapse. Další podrobné pokyny najdete tady.

  1. Ve službě Synapse Studio přejděte na kartu Spravovat . V části Externí připojení vyberte Propojené služby.
  2. Výběrem možnosti Nový přidáte novou propojenou službu.
  3. V seznamu vyberte Azure Data Lake Storage Gen2 a vyberte Pokračovat.
  4. Zadejte svoje ověřovací přihlašovací údaje. Po dokončení vyberte Vytvořit.

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

Rozhodování mezi bezserverovými a vyhrazenými fondy 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 nutnosti zřizování prostředků. Vyhrazený fond SQL má výpočetní výkon pro vysoký výkon a souběžnost a doporučuje se pro možnosti datových skladů na podnikové úrovni. Další podrobnosti o dvou fondech SQL najdete na stránce dokumentace k Synapse v architektuře SQL.

Použití bezserverového fondu SQL

Vzhledem k tomu, že je bezserverová, neexistuje žádná infrastruktura pro nastavení ani clustery, které by bylo možné udržovat. Jakmile se pracovní prostor vytvoří, můžete začít dotazovat data ze sady Synapse Studio.

Například následující dotaz lze použít k transformaci vybraných polí z 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', 
       ...
) 

V předchozím dotazu OPENROWSET funkce přistupuje k souborům ve službě Azure Storage a OPENJSON parsuje text JSON a vrátí vstupní vlastnosti JSON jako řádky a sloupce. Pokaždé, když se tento dotaz spustí, přečte bezserverový fond SQL 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ů následujícím způsobem.

-- 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. Velké objemy dat můžete importovat pomocí jednoduchých dotazů T-SQL a pak pomocí výkonu distribuovaného dotazovacího stroje spouštět vysoce výkonné analýzy.

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ý může číst soubory CSV, Parquet a ORC. Stejně jako v následujícím příkladu dotazu. COPY Pomocí příkazu načtěte NDJSON řádky do tabulkové struktury.

-- 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 vygenerujete řádky JSON v StagingPatient tabulce, můžete pomocí OPENJSON funkce vytvořit různé tabulkové formáty dat a uložit výsledky do tabulek. Následuje ukázkový dotaz SQL, který vytvoří Patient tabulku 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 exportu do Synapse za účelem ochrany osobních zdravotních údajů (PHI).

Poznámka:

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