Condividi tramite


Copiare dati dal servizio FHIR in Azure Synapse Analytics

Questo articolo illustra tre modi per copiare dati dal servizio FHIR in Servizi dati di integrità di Azure a Azure Synapse Analytics, un servizio di analisi senza limiti che riunisce l'integrazione dei dati, il data warehousing aziendale e l'analisi dei Big Data.

Uso dello strumento OSS dell'agente di sincronizzazione da FHIR a Synapse

Nota

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

L'agente di sincronizzazione da FHIR a Synapse è un progetto di Microsoft OSS rilasciato con licenza MIT. Si tratta di una funzione di Azure che estrae i dati da un server FHIR usando le API di risorse FHIR, la converte in file Parquet gerarchici e la scrive in Azure Data Lake quasi in tempo reale. Questo contiene anche uno script per creare tabelle e viste esterne nel pool SQL synapse Serverless che punta ai file Parquet.

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

Seguire la documentazione di OSS per istruzioni di installazione e utilizzo.

Uso dello strumento OSS del generatore di pipeline da FHIR a CDM

Nota

Il generatore di pipeline da FHIR a CDM è uno strumento open source rilasciato con licenza MIT e non è coperto dal contratto di servizio Microsoft per i servizi di Azure.

Il generatore di pipeline da FHIR a CDM è un progetto oss Microsoft rilasciato con licenza MIT. Si tratta di uno strumento per generare una pipeline di Azure Data Factory 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 proiettare e rendere flat le risorse e i campi FHIR in 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 prendere in considerazione questa soluzione se si desidera trasformare i dati FHIR in uno schema personalizzato dopo l'estrazione dal server FHIR.

Seguire la documentazione di OSS per istruzioni di installazione e utilizzo.

Caricamento di dati esportati in Synapse tramite T-SQL

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

Archiviazione di Azure in Synapse con $export.

Uso di $export per copiare i dati

$export Configurazione nel server FHIR

Il server FHIR in Azure Health Data Services 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'archivio BLOB di Azure, è prima necessario configurare il server FHIR per esportare i dati nell'account di archiviazione. È 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 informazioni 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 un 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 dell'archiviazione BLOB 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 esporta solo Patientle risorse , MedicationRequeste Observation :

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

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

Uso di Synapse per Analytics

Creazione di un'area di lavoro di Synapse

Prima di usare Synapse, è necessaria un'area di lavoro synapse. Verrà creato un servizio Azure Synapse Analytics in portale di Azure. Altre guide dettagliate sono disponibili qui. È necessario un ADLSGEN2 account per creare un'area di lavoro. L'area di lavoro Azure Synapse userà questo account di archiviazione per archiviare i dati dell'area di lavoro di 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 nel 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.

Ora che è disponibile 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.

Scegliere tra il pool SQL serverless e quello dedicato

Azure Synapse Analytics offre due pool SQL diversi, un pool SQL serverless e un pool SQL dedicato. Il pool SQL serverless offre la flessibilità di eseguire query sui dati direttamente nell'archiviazione BLOB usando l'endpoint SQL serverless senza provisioning delle risorse. Il pool SQL dedicato offre 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 esiste alcuna infrastruttura da configurare o 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 OPENJSON analizza il testo JSON e 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 migliori delle query, 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 distribuite per eseguire analisi ad alte prestazioni.

Il modo più semplice e rapido per caricare dati dalla risorsa di 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 in 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 scoprire 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 di HL7.