Share via


Copiare i dati dall'API di Azure per FHIR in Azure Synapse Analytics

In questo articolo si apprenderà tre modi per copiare i dati dall'API di Azure per FHIR a Azure Synapse Analytics, ovvero un servizio di analisi senza limiti che riunisce l'integrazione dei dati, l'archiviazione dei dati aziendali e l'analisi dei Big Data.

Uso dello strumento FHIR to Synapse Sync Agent OSS

Nota

FHIR to Synapse Sync Agent è uno strumento open source rilasciato in licenza MIT e non è coperto dal contratto di servizio Microsoft per i servizi di Azure.

L'agente di sincronizzazione FHIR to Synapse è un progetto Microsoft OSS rilasciato in MIT License. È una funzione di Azure che estrae i dati da un server FHIR usando le API di risorsa FHIR, la converte in file Parquet gerarchici e la scrive in Azure Data Lake in tempo quasi reale. Contiene anche uno script per creare tabelle e visualizzazioni esterne nel pool SQL serverless synapse che punta ai file Parquet.

Questa soluzione consente di eseguire query su tutti i dati FHIR con strumenti quali Synapse Studio, SSMS e Power BI. È anche possibile accedere ai file Parquet direttamente da un pool di Synapse Spark. È consigliabile considerare questa soluzione se si desidera accedere a tutti i dati FHIR in tempo quasi reale e si vuole rinviare la trasformazione personalizzata ai sistemi downstream.

Seguire la documentazione del sistema operativo per l'installazione e l'utilizzo.

Uso dello strumento osS del generatore di pipeline FHIR per CDM

Nota

FHIR to CDM pipeline generator è uno strumento open source rilasciato in licenza MIT e non è coperto dal contratto di servizio Microsoft per i servizi di Azure.

Il generatore di pipeline FHIR to CDM è un progetto Microsoft OSS rilasciato in MIT License. È uno strumento per generare una pipeline ADF per copiare uno snapshot di dati da un server FHIR usando $export API, trasformandola in formato csv e scrivendo in una cartella CDM in Azure Data Lake Storage Gen 2. Lo strumento richiede un file di configurazione creato dall'utente contenente istruzioni per il progetto e l'appiattimento delle risorse FHIR e dei campi nelle tabelle. È anche possibile seguire le istruzioni per la creazione di una pipeline downstream nell'area di lavoro Synapse per spostare i dati dalla cartella CDM al pool SQL dedicato di Synapse.

Questa soluzione consente di trasformare i dati in formato tabulare durante la scrittura nella cartella CDM. È consigliabile considerare questa soluzione se si desidera trasformare i dati FHIR in uno schema personalizzato dopo l'estrazione dal server FHIR.

Seguire la documentazione del sistema operativo per l'installazione e l'utilizzo.

Caricamento di dati esportati in Synapse con T-SQL

In questo approccio si usa l'operazione FHIR per copiare le risorse FHIR $export in un'archiviazione BLOB di Azure Data Lake Gen 2 (ADL Gen 2).NDJSON Successivamente, si caricano i dati dall'archiviazione in pool SQL serverless o dedicati in Synapse usando T-SQL. È possibile convertire questi passaggi in una pipeline di spostamento dei dati affidabile usando le pipeline synapse.

Archiviazione di Azure in Synapse usando $export.

Uso $export per copiare i dati

$export Configurazione nel server FHIR

L'API di Azure per FHIR implementa l'operazione $export definita dalla specifica FHIR per esportare tutti o un subset filtrato di dati FHIR in NDJSON formato. Supporta inoltre l'esportazione de-identificata per rendere anonimi i dati FHIR durante l'esportazione.

Per esportare i dati FHIR nell'archiviazione BLOB di Azure, è prima necessario configurare il server FHIR per esportare i dati nell'account di archiviazione. Sarà necessario abilitare (1) l'identità gestita, (2) passare a Controllo di accesso nell'account di archiviazione e aggiungere l'assegnazione di ruolo, (3) selezionare l'account di archiviazione per $export. Altre operazioni dettagliate sono disponibili qui.

È possibile configurare il server per esportare i dati in qualsiasi tipo di account di archiviazione di Azure, ma è consigliabile esportare in ADL Gen 2 per l'allineamento ottimale con Synapse.

Uso del $export comando

Dopo aver configurato il server FHIR, è possibile seguire la documentazione per esportare le risorse FHIR a livello di sistema, paziente o gruppo. Ad esempio, è possibile esportare tutti i dati FHIR correlati ai pazienti in un Group con il comando seguente $export , in cui si specifica il nome di archiviazione BLOB DI ADL Gen 2 nel campo {{BlobContainer}}:

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

È anche possibile usare _type il parametro nella $export chiamata precedente per limitare le risorse da esportare. Ad esempio, la chiamata seguente esportare solo Patient, MedicationRequeste Observation risorse:

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

Per altre informazioni sui diversi parametri supportati, vedere la sezione relativa $export ai parametri di query.

Uso di Synapse per Analytics

Creazione di un'area di lavoro di Synapse

Prima di usare Synapse, sarà necessaria un'area di lavoro Synapse. Si creerà un servizio di analisi di Azure Synapse in portale di Azure. Altre guide dettagliate sono disponibili qui. È necessario un account per creare un'area ADLSGEN2 di lavoro. L'area di lavoro Azure Synapse userà questo account di archiviazione per archiviare i dati dell'area di lavoro synapse.

Dopo aver creato un'area di lavoro, è possibile visualizzare l'area di lavoro in Synapse Studio accedendo all'area di lavoro in https://web.azuresynapse.neto avviando Synapse Studio nell'portale di Azure.

Creazione di un servizio collegato tra Archiviazione di Azure e Synapse

Per copiare i dati in Synapse, è necessario creare un servizio collegato che connette l'account di archiviazione di Azure, in cui sono stati esportati i dati con Synapse. Altre istruzioni dettagliate sono disponibili qui.

  1. In Synapse Studio passare alla scheda Gestisci e in Connessioni esterne selezionare Servizi collegati.
  2. Selezionare Nuovo per aggiungere un nuovo servizio collegato.
  3. Selezionare Azure Data Lake Storage Gen2 dall'elenco e selezionare Continua.
  4. Immettere le credenziali di autenticazione. Selezionare Create (Crea) al termine.

Dopo aver creato un servizio collegato tra l'archiviazione di ADL Gen 2 e Synapse, è possibile usare i pool SQL di Synapse per caricare e analizzare i dati FHIR.

Decidere tra serverless e pool SQL dedicato

Azure Synapse Analytics offre due pool SQL diversi, pool SQL serverless e pool SQL dedicato. Il pool SQL serverless offre la flessibilità di eseguire query sui dati direttamente nell'archivio BLOB usando l'endpoint SQL serverless senza alcun provisioning delle risorse. Il pool SQL dedicato ha la potenza di elaborazione per prestazioni elevate e concorrenza ed è consigliato per le funzionalità di data warehousing su scala aziendale. Per altre informazioni sui due pool SQL, vedere la pagina della documentazione di Synapse sull'architettura SQL.

Uso del pool SQL serverless

Poiché è serverless, non è disponibile alcuna infrastruttura per la configurazione o i cluster da gestire. È possibile iniziare a eseguire query sui dati da Synapse Studio non appena viene creata l'area di lavoro.

Ad esempio, la query seguente può essere usata per trasformare i campi selezionati da Patient.ndjson in una struttura tabulare:

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

Nella query precedente, la OPENROWSET funzione accede ai file in Archiviazione di Azure e analizza il testo JSON e OPENJSON restituisce le proprietà di input JSON come righe e colonne. Ogni volta che questa query viene eseguita, il pool SQL serverless legge il file dall'archivio BLOB, analizza il codice JSON ed estrae i campi.

È anche possibile materializzare i risultati in formato Parquet in una tabella esterna per ottenere prestazioni di query migliori, come illustrato di seguito:

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

Uso del pool SQL dedicato

Il pool SQL dedicato supporta tabelle gestite e una cache gerarchica per le prestazioni in memoria. È possibile importare Big Data con query T-SQL semplici e quindi usare la potenza del motore di query distribuito per eseguire analisi ad alte prestazioni.

Il modo più semplice e veloce per caricare i dati dall'archiviazione a un pool SQL dedicato consiste nell'usare il COPY comando in T-SQL, che può leggere file CSV, Parquet e ORC. Come nella query di esempio seguente, usare il COPY comando per caricare le NDJSON righe in una struttura tabulare.

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

Dopo aver creato le righe JSON nella StagingPatient tabella precedente, è possibile creare formati tabulari diversi dei dati usando la OPENJSON funzione e archiviare i risultati nelle tabelle. Ecco una query SQL di esempio per creare una Patient tabella estraendo alcuni campi dalla Patient risorsa:

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

Passaggi successivi

In questo articolo sono stati illustrati tre modi diversi per copiare i dati FHIR in Synapse.

Successivamente, è possibile informazioni su come de-identificare i dati FHIR durante l'esportazione in Synapse per proteggere PHI.

FHIR® è un marchio registrato di HL7 e viene usato con l'autorizzazione HL7.