Partager via


Copier des données du service FHIR vers Azure Synapse Analytics

Dans cet article, vous allez apprendre trois façons de copier des données du service FHIR® dans Azure Health Data Services vers Azure Synapse Analytics, qui est un service d’analytique sans limite qui regroupe l’intégration des données, l’entreposage de données d’entreprise et l’analytique big data.

Utilisation de l’outil FHIR pour Synapse Sync Agent OSS

Remarque

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

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

Cette solution vous permet d’interroger sur 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 pipelineS FHIR vers CDM

Remarque

Le générateur de pipeline FHIR vers CDM est un outil code source ouvert 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 Microsoft OSS publié sous licence MIT. Il s’agit d’un outil permettant de générer un pipeline ADF pour copier un instantané de données à partir d’un serveur FHIR à l’aide de $export API, de le 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 les ressources et les champs FHIR dans des tables. Vous pouvez également suivre les instructions pour créer un pipeline en aval dans l’espace de travail Synapse pour déplacer des données d’un dossier CDM vers un pool SQL dédié Synapse.

Cette solution vous permet de transformer les données en format tabulaire au fur et à 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 son extraction à partir du serveur FHIR.

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

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

Dans cette approche, vous utilisez l’opération FHIR pour copier des ressources FHIR $export dans un stockage d’objets blob Azure Data Lake Gen 2 (ADL Gen2) 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 pour copier des données

Configuration $export dans le serveur FHIR

Le serveur FHIR dans Azure Health Data Services 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é-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 pour exporter des données vers le compte de stockage. Vous devez (1) activer l’identité managée (2) accéder au contrôle d’accès 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 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 meilleur alignement avec Synapse.

Utilisation de $export la 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 liées aux patients dans une Group commande avec la commande suivante $export , dans laquelle vous spécifiez votre nom de stockage d’objets blob ADL Gen2 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 précédent $export pour restreindre les ressources que vous souhaitez exporter. Par exemple, l’appel suivant exporte uniquement Patient, MedicationRequestet Observation les ressources :

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 aurez besoin d’un espace de travail Synapse. Créez un service Azure Synapse Analytics sur Portail Azure. Vous trouverez ici d’autres conseils pas à pas. 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 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 dans 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 ici d’autres instructions pas à pas.

  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 Synapse SQL pour charger et analyser vos données FHIR.

Choisir entre le pool SQL serverless et dédié

Azure Synapse Analytics offre deux pools SQL différents : pool SQL serverless et pool SQL dédié. Le pool SQL serverless offre la possibilité 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é dispose de la puissance de traitement pour les performances élevées et la concurrence, 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 n’est pas serverless, il n’y a pas d’infrastructure à configurer ou à gérer des clusters. 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 en Patient.ndjson une 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 précédente, la OPENROWSET fonction accède aux fichiers dans Stockage Azure, et analyse le texte JSON et OPENJSON retourne les propriétés d’entrée JSON en tant que lignes et 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 suit.

-- 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 des big data avec des requêtes T-SQL simples, puis utiliser la puissance du moteur de requête distribué 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 suivant, 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 tableau précédent StagingPatient , 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 en savoir plus sur la façon dont vous pouvez dé-identifier vos données FHIR tout en l’exportant vers Synapse afin de protéger PHI.

Remarque

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