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.
- Usare lo strumento FHIR to Synapse Sync Agent OSS
- Usare lo strumento OSS del generatore di pipeline FHIR per CDM
- Usare $export e caricare dati in Synapse con T-SQL
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.
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 Patient
le risorse , MedicationRequest
e 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.
- In Synapse Studio passare alla scheda Gestisci e in Connessioni esterne selezionare Servizi collegati.
- Selezionare Nuovo per aggiungere un nuovo servizio collegato.
- Selezionare Azure Data Lake Storage Gen2 nell'elenco e selezionare Continua.
- 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.