Delen via


Gegevens van de FHIR-service kopiëren 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 naar Synapse Sync Agent gebruiken

Notitie

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

De FHIR to Synapse Sync Agent is een Microsoft OSS-project dat is uitgebracht onder mit-licentie. Het is een Azure-functie waarmee gegevens van een FHIR-server worden geëxtraheerd met behulp van FHIR-resource-API's, deze converteert naar hiërarchische Parquet-bestanden en deze bijna in 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 wilt uitstellen naar downstreamsystemen.

Volg de OSS-documentatie voor installatie- en gebruiksinstructies.

Het OSS-hulpprogramma FHIR-naar-CDM-pijplijngenerator gebruiken

Notitie

FHIR naar CDM-pijplijngenerator is een open source hulpprogramma dat is uitgebracht onder 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 project 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 de CDM-map naar de toegewezen SQL-pool van Synapse.

Met deze oplossing kunt u de gegevens transformeren in tabelvorm wanneer 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 in indeling te kopiëren naar een Azure Data Lake Gen 2-blobopslagNDJSON (ADL Gen 2). 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.

Gebruiken $export om gegevens te kopiëren

$export Configureren in de FHIR-server

De FHIR-server in Azure Health Data Services implementeert de $export bewerking die is gedefinieerd door de FHIR-specificatie om alle of een gefilterde subset van FHIR-gegevens in NDJSON indeling te exporteren. 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 voor het exporteren van gegevens naar het opslagaccount. U moet (1) Beheerde identiteit inschakelen, (2) naar Access Control in het opslagaccount gaan en roltoewijzing toevoegen, (3) uw opslagaccount selecteren voor $export. Meer stapsgewijze informatie vindt u hier.

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

Opdracht gebruiken $export

Nadat u uw 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 in een Group exporteren met de volgende $export opdracht, waarin u de naam van uw ADL Gen 2-blobopslag opgeeft in het veld {{BlobContainer}}:

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

U kunt de parameter in de $export bovenstaande aanroep ook gebruiken _type om de resources te beperken die u wilt exporteren. Met de volgende aanroep worden bijvoorbeeld alleen Patient, MedicationRequesten Observation resources geëxporteerd:

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

Raadpleeg onze $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. U maakt een Azure Synapse Analytics-service op Azure Portal. Meer stapsgewijze handleiding vindt u hier. 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 in Synapse Studio weergeven door u aan te melden bij uw werkruimte op https://web.azuresynapse.netof door Synapse Studio te starten in de 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, waar u uw gegevens hebt geëxporteerd, verbindt met Synapse. Meer stapsgewijze instructies vindt u hier.

  1. Blader in Synapse Studio naar het tabblad Beheren en selecteer onder Externe verbindingende optie 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, een serverloze SQL-pool en een toegewezen SQL-pool. Serverloze SQL-pool biedt de flexibiliteit om gegevens rechtstreeks in de blobopslag op te vragen met behulp van het serverloze SQL-eindpunt zonder resourceinrichting. Een toegewezen SQL-pool heeft de verwerkingskracht voor hoge prestaties en gelijktijdigheid en wordt aanbevolen voor datawarehousingmogelijkheden op ondernemingsniveau. Raadpleeg de Synapse-documentatiepagina over SQL-architectuur voor meer informatie over de twee SQL-pools.

Serverloze SQL-pool gebruiken

Omdat het serverloos is, hoeft u geen infrastructuur in te stellen of clusters te onderhouden. Zodra de werkruimte is gemaakt, kunt u beginnen met het uitvoeren van query's op gegevens uit Synapse Studio.

De volgende query kan bijvoorbeeld worden gebruikt om geselecteerde velden te transformeren naar Patient.ndjson een tabelstructuur:

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 bovenstaande query verwijst de OPENROWSET functie naar bestanden in Azure Storage, OPENJSON parseert de JSON-tekst en 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 voor betere queryprestaties, zoals hieronder wordt weergegeven:

-- 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 analyses met hoge prestaties uit te voeren.

De eenvoudigste en snelste manier om gegevens uit uw opslag naar een toegewezen SQL-pool te laden, is door de COPY opdracht in T-SQL te gebruiken, waarmee CSV-, Parquet- en ORC-bestanden kunnen worden gelezen. Net als in de onderstaande voorbeeldquery gebruikt u de COPY opdracht om de NDJSON rijen in een tabelstructuur 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 StagingPatient bovenstaande 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 voorbeeld van een SQL-query om een Patient tabel te maken door enkele 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 uw FHIR-gegevens kunt verwijderen tijdens het exporteren naar Synapse om PHI te beschermen.

FHIR® is een gedeponeerd handelsmerk van HL7 en wordt gebruikt met toestemming van HL7.