Condividi tramite


Copiare dati dal servizio FHIR ad Azure Synapse Analytics

Questo articolo illustra tre modi per copiare dati dal servizio FHIR® in Servizi dati di integrità di Azure ad 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 FHIR to Synapse Sync Agent OSS

Nota

FHIR to Synapse Sync Agent è uno strumento 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 oss Microsoft rilasciato con licenza MIT. Si tratta di una funzione di Azure che estrae i dati da un server FHIR usando le API delle 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 serverless synapse 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 Spark Synapse. È 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 sull'installazione e sull'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 Microsoft OSS 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, trasformarla in formato CSV e scrivere in una cartella CDM in Azure Data Lake Storage Gen 2. Lo strumento richiede un file di configurazione creato dall'utente contenente le istruzioni per proiettare e rendere flat le risorse e i campi FHIR in tabelle. È anche possibile seguire le istruzioni per creare una pipeline downstream nell'area di lavoro di Synapse per spostare i dati da una cartella CDM a un 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 sull'installazione e sull'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 archivio BLOB di Azure Data Lake Gen 2 (ADL Gen 2) in NDJSON formato. I dati vengono quindi caricati dall'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 tramite $export.

Uso $export di 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 deidentifizzata 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) 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 migliore allineamento 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 chiamata precedente $export 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 di Synapse. Creare un servizio Azure Synapse Analytics in portale di Azure. Altre indicazioni dettagliate sono disponibili qui. È necessario un ADLSGEN2 account per creare un'area di lavoro. L'area di lavoro di 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 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 nell'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 SYNapse SQL per caricare e analizzare i dati FHIR.

Scegliere tra il pool SQL serverless e quello 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 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é non è serverless, non esiste un'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 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 migliori delle query, come indicato 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 semplici query T-SQL e quindi usare la potenza del motore di query distribuite per eseguire analisi ad alte prestazioni.

Il modo più semplice e rapido 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 tabella precedente StagingPatient , è 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.

Nota

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