Delen via


Gegevens kopiëren van de FHIR-service naar Azure Synapse Analytics

In dit artikel leert u drie manieren om gegevens van de FHIR-service® in Azure Health Data Services te kopiëren naar Azure Synapse Analytics. Dit is een onbeperkte analyseservice die gegevensintegratie, datawarehousing voor ondernemingen en big data-analyses combineert.

Het OSS-hulpprogramma FHIR gebruiken voor Synapse Sync Agent

Notitie

FHIR naar Synapse Sync Agent is een opensource-hulpprogramma dat is uitgebracht onder MIT-licentie en wordt niet gedekt door de Microsoft SLA voor Azure-services.

De FHIR naar Synapse Sync Agent is een Microsoft OSS-project dat is uitgebracht onder MIT-licentie. Het is een Azure-functie die gegevens uit een FHIR-server extraheert met behulp van FHIR-resource-API's, deze converteert naar hiërarchische Parquet-bestanden en deze in bijna realtime naar Azure Data Lake schrijft. Dit bevat ook een script voor het maken van externe tabellen en weergaven in synapse serverloze SQL-pool die verwijst naar de Parquet-bestanden.

Met deze oplossing kunt u query's uitvoeren op de volledige FHIR-gegevens met hulpprogramma's zoals Synapse Studio, SSMS en Power BI. U kunt de Parquet-bestanden ook rechtstreeks openen vanuit een Synapse Spark-pool. U moet deze oplossing overwegen als u bijna in realtime toegang wilt krijgen tot al uw FHIR-gegevens en aangepaste transformatie naar downstreamsystemen wilt uitstellen.

Volg de OSS-documentatie voor installatie- en gebruiksinstructies.

Het OSS-hulpprogramma FHIR naar CDM-pijplijngenerator gebruiken

Notitie

FHIR naar CDM-pijplijngenerator is een opensource-hulpprogramma dat is uitgebracht onder DE MIT-licentie en wordt niet gedekt door de Microsoft SLA voor Azure-services.

De FHIR naar CDM-pijplijngenerator is een Microsoft OSS-project dat is uitgebracht onder MIT-licentie. Het is een hulpprogramma voor het genereren van een ADF-pijplijn voor het kopiëren van een momentopname van gegevens van een FHIR-server met behulp van $export-API, het transformeren ervan naar csv-indeling en het schrijven naar een CDM-map in Azure Data Lake Storage Gen 2. Het hulpprogramma vereist een door de gebruiker gemaakt configuratiebestand met instructies voor het projecteren en plat maken van FHIR-resources en -velden in tabellen. U kunt ook de instructies volgen voor het maken van een downstream-pijplijn in de Synapse-werkruimte om gegevens te verplaatsen van een CDM-map naar een toegewezen SQL-pool van Synapse.

Met deze oplossing kunt u de gegevens transformeren in tabelvorm, omdat deze naar de CDM-map worden geschreven. U moet deze oplossing overwegen als u FHIR-gegevens wilt transformeren naar een aangepast schema nadat deze zijn geëxtraheerd van de FHIR-server.

Volg de OSS-documentatie voor installatie- en gebruiksinstructies.

Geëxporteerde gegevens laden naar Synapse met behulp van T-SQL

In deze benadering gebruikt u de FHIR-bewerking $export om FHIR-resources te kopiëren naar een Azure Data Lake Gen 2-blobopslag (ADL Gen 2) in NDJSON indeling. Vervolgens laadt u de gegevens uit de opslag in serverloze of toegewezen SQL-pools in Synapse met behulp van T-SQL. U kunt deze stappen converteren naar een robuuste pijplijn voor gegevensverplaatsing met behulp van Synapse-pijplijnen.

Azure Storage naar Synapse met behulp van $export.

Gegevens $export kopiëren

$export Configureren op de FHIR-server

De FHIR-server in Azure Health Data Services implementeert de $export bewerking die is gedefinieerd door de FHIR-specificatie voor het exporteren van alle of een gefilterde subset van FHIR-gegevens in NDJSON indeling. Daarnaast biedt het ondersteuning voor niet-geïdentificeerde export om FHIR-gegevens tijdens de export anoniem te maken.

Als u FHIR-gegevens wilt exporteren naar Azure Blob Storage, moet u eerst uw FHIR-server configureren om gegevens naar het opslagaccount te exporteren. U moet (1) Beheerde identiteit inschakelen, (2) ga naar Toegangsbeheer in het opslagaccount en voeg roltoewijzing toe, (3) selecteer uw opslagaccount voor $export. Meer stapsgewijze instructies vindt u hier.

U kunt de server configureren voor het exporteren van de gegevens naar elk type Azure-opslagaccount, maar we raden u aan om te exporteren naar ADL Gen 2 voor de beste afstemming met Synapse.

Opdracht gebruiken $export

Nadat u de FHIR-server hebt geconfigureerd, kunt u de documentatie volgen om uw FHIR-resources te exporteren op systeem-, patiënt- of groepsniveau. U kunt bijvoorbeeld al uw FHIR-gegevens met betrekking tot de patiënten exporteren in een Group met de volgende $export opdracht, waarin u de naam van uw ADL Gen 2-blobopslag in het veld {{BlobContainer}}opgeeft:

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

U kunt ook de parameter in de voorgaande $export aanroep gebruiken _type om de resources te beperken die u wilt exporteren. De volgende aanroep exporteert bijvoorbeeld alleen Patient, MedicationRequesten Observation resources:

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

Raadpleeg de $export paginasectie over de queryparameters voor meer informatie over de verschillende ondersteunde parameters.

Synapse for Analytics gebruiken

Een Synapse-werkruimte maken

Voordat u Synapse gebruikt, hebt u een Synapse-werkruimte nodig. Maak een Azure Synapse Analytics-service in Azure Portal. Hier vindt u meer stapsgewijze instructies. U hebt een ADLSGEN2 account nodig om een werkruimte te maken. Uw Azure Synapse-werkruimte gebruikt dit opslagaccount om uw Synapse-werkruimtegegevens op te slaan.

Nadat u een werkruimte hebt gemaakt, kunt u uw werkruimte weergeven in Synapse Studio door u aan te melden bij uw werkruimte in https://web.azuresynapse.netof Synapse Studio te starten in Azure Portal.

Een gekoppelde service maken tussen Azure Storage en Synapse

Als u uw gegevens naar Synapse wilt kopiëren, moet u een gekoppelde service maken die uw Azure Storage-account verbindt, waar u uw gegevens hebt geëxporteerd, met Synapse. Meer stapsgewijze instructies vindt u hier.

  1. Blader in Synapse Studio naar het tabblad Beheren en selecteer onder Externe verbindingen gekoppelde services.
  2. Selecteer Nieuw om een nieuwe gekoppelde service toe te voegen.
  3. Selecteer Azure Data Lake Storage Gen2 in de lijst en selecteer Doorgaan.
  4. Voer uw verificatiereferenties in. Selecteer Maken nadat dit is voltooid.

Nu u een gekoppelde service hebt tussen uw ADL Gen 2-opslag en Synapse, kunt u Synapse SQL-pools gebruiken om uw FHIR-gegevens te laden en te analyseren.

Kiezen tussen serverloze en toegewezen SQL-pool

Azure Synapse Analytics biedt twee verschillende SQL-pools: serverloze SQL-pool en toegewezen SQL-pool. Serverloze SQL-pool biedt de flexibiliteit om rechtstreeks query's uit te voeren op gegevens in de blobopslag met behulp van het serverloze SQL-eindpunt zonder resourceinrichting. Toegewezen SQL-pool heeft de verwerkingskracht voor hoge prestaties en gelijktijdigheid en wordt aanbevolen voor datawarehousingmogelijkheden op ondernemingsniveau. Raadpleeg de synapse-documentatiepagina over de SQL-architectuur voor meer informatie over de twee SQL-pools.

Serverloze SQL-pool gebruiken

Omdat het serverloos is, is er geen infrastructuur voor het instellen of onderhouden van clusters. U kunt gegevens opvragen vanuit Synapse Studio zodra de werkruimte is gemaakt.

De volgende query kan bijvoorbeeld worden gebruikt om geselecteerde velden Patient.ndjson te transformeren in een tabellaire structuur:

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

In de voorgaande query opent de OPENROWSET functie bestanden in Azure Storage en parseert de JSON-tekst en OPENJSON retourneert de JSON-invoereigenschappen als rijen en kolommen. Telkens wanneer deze query wordt uitgevoerd, leest de serverloze SQL-pool het bestand uit de blobopslag, parseert de JSON en extraheert de velden.

U kunt de resultaten ook materialiseren in Parquet-indeling in een externe tabel om de queryprestaties als volgt te verbeteren.

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

Toegewezen SQL-pool gebruiken

Toegewezen SQL-pool ondersteunt beheerde tabellen en een hiërarchische cache voor prestaties in het geheugen. U kunt big data importeren met eenvoudige T-SQL-query's en vervolgens de kracht van de gedistribueerde query-engine gebruiken om krachtige analyses uit te voeren.

De eenvoudigste en snelste manier om gegevens van uw opslag naar een toegewezen SQL-pool te laden, is door de COPY opdracht in T-SQL te gebruiken, die CSV-, Parquet- en ORC-bestanden kan lezen. Net als in de volgende voorbeeldquery gebruikt u de COPY opdracht om de NDJSON rijen in een tabellaire structuur te laden.

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

Zodra u de JSON-rijen in de voorgaande StagingPatient tabel hebt, kunt u verschillende tabellaire indelingen van de gegevens maken met behulp van de OPENJSON functie en de resultaten opslaan in tabellen. Hier volgt een SQL-voorbeeldquery om een Patient tabel te maken door een paar velden uit de Patient resource te extraheren:

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

Volgende stappen

In dit artikel hebt u drie verschillende manieren geleerd om uw FHIR-gegevens naar Synapse te kopiëren.

Vervolgens leert u hoe u de identificatie van uw FHIR-gegevens ongedaan kunt maken tijdens het exporteren naar Synapse om PHI te beschermen.

Notitie

FHIR® is een geregistreerd handelsmerk van HL7 en wordt gebruikt met de machtiging HL7.