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.
- Utiliser l’outil FHIR pour Synapse Sync Agent OSS
- Utiliser l’outil FHIR pour le générateur de pipeline CDM OSS
- Utiliser $export et charger des données dans Synapse à l’aide de T-SQL
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.
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
, MedicationRequest
et 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.
- Dans Synapse Studio, accédez à l’onglet Gérer et, sous Connexions externes, sélectionnez Services liés.
- Sélectionnez Nouveau pour ajouter un nouveau service lié.
- Sélectionnez Azure Data Lake Storage Gen2 dans la liste, puis sélectionnez Continuer.
- 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.