Copier des données de l’API Azure pour FHIR vers Azure Synapse Analytics

Dans cet article, vous allez découvrir trois façons de copier des données de l’API Azure pour FHIR vers Azure Synapse Analytics, qui est un service d’analytique illimité qui regroupe l’intégration de données, l’entreposage de données d’entreprise et l’analytique du Big Data.

Utilisation de l’outil OSS de l’agent de synchronisation FHIR vers Synapse Sync

Notes

FHIR vers Synapse Sync Agent est un outil open source publié sous licence MIT et n’est pas couvert par le contrat SLA Microsoft pour les services Azure.

L’agent de synchronisation FHIR vers Synapse est un projet MICROSOFT OSS publié sous licence MIT. Il s’agit d’une fonction Azure qui extrait des données d’un serveur FHIR à l’aide des API de ressources FHIR, les convertit en fichiers Parquet hiérarchiques et les écrit dans Azure Data Lake en quasi-temps réel. Il contient également un script pour créer des tables et des vues externes dans un pool SQL Serverless Synapse pointant vers les fichiers Parquet.

Cette solution vous permet d’interroger l’ensemble des données FHIR avec des outils tels que Synapse Studio, SSMS et Power BI. Vous pouvez également accéder aux fichiers Parquet directement à partir d’un pool Synapse Spark. Vous devez envisager cette solution si vous souhaitez accéder à toutes vos données FHIR en quasi-temps réel et que vous souhaitez différer la transformation personnalisée vers les systèmes en aval.

Suivez la documentation OSS pour obtenir des instructions d’installation et d’utilisation.

Utilisation de l’outil OSS du générateur de pipeline FHIR vers CDM

Notes

Le générateur de pipeline FHIR vers CDM est un outil open source publié sous licence MIT et n’est pas couvert par le contrat SLA Microsoft pour les services Azure.

Le générateur de pipeline FHIR vers CDM est un projet OSS Microsoft publié sous licence MIT. Il s’agit d’un outil permettant de générer un pipeline ADF permettant de copier un instantané de données à partir d’un serveur FHIR à l’aide de $export’API, de les transformer au format csv et d’écrire dans un dossier CDM dans Azure Data Lake Storage Gen 2. L’outil nécessite un fichier de configuration créé par l’utilisateur contenant des instructions pour projeter et aplatir des ressources et des champs FHIR dans des tables. Vous pouvez également suivre les instructions de création d’un pipeline en aval dans l’espace de travail Synapse pour déplacer des données du dossier CDM vers un pool SQL dédié Synapse.

Cette solution vous permet de transformer les données au format tabulaire à mesure qu’elles sont écrites dans le dossier CDM. Vous devez envisager cette solution si vous souhaitez transformer des données FHIR en schéma personnalisé après leur extraction du serveur FHIR.

Suivez la documentation OSS pour obtenir des instructions d’installation et d’utilisation.

Chargement des données exportées vers Synapse à l’aide de T-SQL

Dans cette approche, vous utilisez l’opération FHIR $export pour copier des ressources FHIR dans un stockage d’objets blob Azure Data Lake Gen 2 (ADL Gen 2) au NDJSON format. Ensuite, vous chargez les données du stockage dans des pools SQL serverless ou dédiés dans Synapse à l’aide de T-SQL. Vous pouvez convertir ces étapes en un pipeline de déplacement de données robuste à l’aide de pipelines Synapse.

Stockage Azure vers Synapse à l’aide de $export.

Utilisation $export de pour copier des données

Configuration $export dans le serveur FHIR

L’API Azure pour FHIR implémente l’opération $export définie par la spécification FHIR pour exporter tout ou un sous-ensemble filtré de données FHIR au NDJSON format. En outre, il prend en charge l’exportation dés-identifiée pour anonymiser les données FHIR pendant l’exportation.

Pour exporter des données FHIR vers le stockage Blob Azure, vous devez d’abord configurer votre serveur FHIR afin qu’il exporte les données vers le compte de stockage. Vous devez (1) activer l’identité managée, (2) accéder à Access Control dans le compte de stockage et ajouter une attribution de rôle, (3) sélectionner votre compte de stockage pour $export. Vous trouverez plus d’informations pas à pas ici.

Vous pouvez configurer le serveur pour exporter les données vers n’importe quel type de compte de stockage Azure, mais nous vous recommandons d’exporter vers ADL Gen 2 pour un alignement optimal avec Synapse.

Utilisation de la $export commande

Après avoir configuré votre serveur FHIR, vous pouvez suivre la documentation pour exporter vos ressources FHIR au niveau du système, du patient ou du groupe. Par exemple, vous pouvez exporter toutes vos données FHIR relatives aux patients dans un Group avec la commande suivante $export , dans laquelle vous spécifiez le nom de stockage de votre objet blob ADL Gen 2 dans le champ {{BlobContainer}}:

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

Vous pouvez également utiliser _type le paramètre dans l’appel $export ci-dessus pour restreindre les ressources que vous souhaitez exporter. Par exemple, l’appel suivant exporte uniquement Patientles ressources , MedicationRequestet Observation :

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

Pour plus d’informations sur les différents paramètres pris en charge, consultez notre $export section de page sur les paramètres de requête.

Utilisation de Synapse for Analytics

Création d’un espace de travail Synapse

Avant d’utiliser Synapse, vous avez besoin d’un espace de travail Synapse. Vous allez créer un service Azure Synapse Analytics sur Portail Azure. Vous trouverez plus d’informations détaillées ici. Vous avez besoin d’un ADLSGEN2 compte pour créer un espace de travail. Votre espace de travail Azure Synapse utilisera ce compte de stockage pour stocker vos données d’espace de travail Synapse.

Après avoir créé un espace de travail, vous pouvez afficher votre espace de travail dans Synapse Studio en vous connectant à votre espace de travail sur https://web.azuresynapse.netou en lançant Synapse Studio dans le Portail Azure.

Création d’un service lié entre stockage Azure et Synapse

Pour copier vos données vers Synapse, vous devez créer un service lié qui connecte votre compte stockage Azure, où vous avez exporté vos données, avec Synapse. Vous trouverez d’autres instructions détaillées ici.

  1. Dans Synapse Studio, accédez à l’onglet Gérer et sous Connexions externes, sélectionnez Services liés.
  2. Sélectionnez Nouveau pour ajouter un nouveau service lié.
  3. Sélectionnez Azure Data Lake Storage Gen2 dans la liste, puis sélectionnez Continuer.
  4. Entrez vos informations d’identification d’authentification. Lorsque vous avez terminé, sélectionnez Créer.

Maintenant que vous disposez d’un service lié entre votre stockage ADL Gen 2 et Synapse, vous êtes prêt à utiliser des pools Sql Synapse pour charger et analyser vos données FHIR.

Choisir entre un pool SQL serverless et un pool SQL dédié

Azure Synapse Analytics propose deux pools SQL différents, le pool SQL serverless et le pool SQL dédié. Le pool SQL serverless offre la flexibilité d’interroger des données directement dans le stockage d’objets blob à l’aide du point de terminaison SQL serverless sans provisionnement de ressources. Le pool SQL dédié a la puissance de traitement pour des performances et une concurrence élevées, et est recommandé pour les fonctionnalités d’entreposage de données à l’échelle de l’entreprise. Pour plus d’informations sur les deux pools SQL, consultez la page de documentation Synapse sur l’architecture SQL.

Utilisation d’un pool SQL serverless

Étant donné qu’il est serverless, il n’y a pas d’infrastructure à configurer ou de clusters à gérer. Vous pouvez commencer à interroger des données à partir de Synapse Studio dès que l’espace de travail est créé.

Par exemple, la requête suivante peut être utilisée pour transformer les champs sélectionnés à partir d’une Patient.ndjson structure tabulaire :

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

Dans la requête ci-dessus, la OPENROWSET fonction accède aux fichiers dans stockage Azure, analyse le OPENJSON texte JSON et retourne les propriétés d’entrée JSON sous forme de lignes et de colonnes. Chaque fois que cette requête est exécutée, le pool SQL serverless lit le fichier à partir du stockage d’objets blob, analyse le JSON et extrait les champs.

Vous pouvez également matérialiser les résultats au format Parquet dans une table externe pour obtenir de meilleures performances de requête, comme indiqué ci-dessous :

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

Utilisation d’un pool SQL dédié

Le pool SQL dédié prend en charge les tables managées et un cache hiérarchique pour les performances en mémoire. Vous pouvez importer du Big Data avec des requêtes T-SQL simples, puis utiliser la puissance du moteur de requête distribuée pour exécuter des analyses hautes performances.

Le moyen le plus simple et le plus rapide de charger des données de votre stockage vers un pool SQL dédié consiste à utiliser la COPY commande dans T-SQL, qui peut lire des fichiers CSV, Parquet et ORC. Comme dans l’exemple de requête ci-dessous, utilisez la COPY commande pour charger les NDJSON lignes dans une structure tabulaire.

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

Une fois que vous avez les lignes JSON dans le StagingPatient tableau ci-dessus, vous pouvez créer différents formats tabulaires des données à l’aide de la OPENJSON fonction et stocker les résultats dans des tables. Voici un exemple de requête SQL pour créer une Patient table en extrayant quelques champs de la Patient ressource :

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

Étapes suivantes

Dans cet article, vous avez appris trois façons différentes de copier vos données FHIR dans Synapse.

Ensuite, vous pouvez découvrir comment dés-identifier vos données FHIR tout en les exportant vers Synapse afin de protéger les données PHI.

FHIR® est une marque déposée de HL7 utilisé avec l’autorisation de HL7.