Kopiera data från FHIR-tjänsten till Azure Synapse Analytics
I den här artikeln lär du dig tre sätt att kopiera data från FHIR-tjänsten® i Azure Health Data Services till Azure Synapse Analytics, som är en obegränsad analystjänst som sammanför dataintegrering, företagsdatalager och stordataanalys.
- Använda OSS-verktyget FHIR till Synapse Sync Agent
- Använda VERKTYGET FHIR till CDM-pipelinegenerator
- Använda $export och läsa in data till Synapse med T-SQL
Använda OSS-verktyget FHIR till Synapse Sync Agent
Kommentar
FHIR till Synapse Sync Agent är ett verktyg med öppen källkod som släppts under MIT-licens och omfattas inte av Microsoft SLA för Azure-tjänster.
FHIR till Synapse Sync Agent är ett Microsoft OSS-projekt som lanseras under MIT-licens. Det är en Azure-funktion som extraherar data från en FHIR-server med hjälp av FHIR-resurs-API:er, konverterar dem till hierarkiska Parquet-filer och skriver dem till Azure Data Lake nästan i realtid. Detta innehåller också ett skript för att skapa externa tabeller och vyer i Synapse Serverless SQL-pool som pekar på Parquet-filerna.
Med den här lösningen kan du köra frågor mot hela FHIR-data med verktyg som Synapse Studio, SSMS och Power BI. Du kan också komma åt Parquet-filerna direkt från en Synapse Spark-pool. Du bör överväga den här lösningen om du vill komma åt alla dina FHIR-data nästan i realtid och vill skjuta upp anpassad omvandling till underordnade system.
Följ OSS-dokumentationen för installations- och användningsinstruktioner.
Använda OSS-verktyget FHIR till CDM-pipelinegenerator
Kommentar
FHIR till CDM-pipelinegeneratorn är ett verktyg med öppen källkod som släppts under MIT-licens och omfattas inte av Microsoft SLA för Azure-tjänster.
Pipelinegeneratorn FHIR till CDM är ett Microsoft OSS-projekt som lanseras under MIT-licens. Det är ett verktyg för att generera en ADF-pipeline för att kopiera en ögonblicksbild av data från en FHIR-server med hjälp av $export API, transformera den till csv-format och skriva till en CDM-mapp i Azure Data Lake Storage Gen 2. Verktyget kräver en användarskapad konfigurationsfil som innehåller instruktioner för att projicera och platta ut FHIR-resurser och fält till tabeller. Du kan också följa anvisningarna för att skapa en nedströmspipeline i Synapse-arbetsytan för att flytta data från en CDM-mapp till en synapse-dedikerad SQL-pool.
Med den här lösningen kan du omvandla data till tabellformat när de skrivs till CDM-mappen. Du bör överväga den här lösningen om du vill omvandla FHIR-data till ett anpassat schema när de har extraherats från FHIR-servern.
Följ OSS-dokumentationen för installations- och användningsinstruktioner.
Läser in exporterade data till Synapse med T-SQL
I den här metoden använder du FHIR-åtgärden $export
för att kopiera FHIR-resurser till en Azure Data Lake Gen 2-bloblagring (ADL Gen 2) i NDJSON
format. Sedan läser du in data från lagringen till serverlösa eller dedikerade SQL-pooler i Synapse med T-SQL. Du kan konvertera de här stegen till en robust pipeline för dataflytt med hjälp av Synapse-pipelines.
Använda $export
för att kopiera data
Konfigurera $export
på FHIR-servern
FHIR-servern i Azure Health Data Services implementerar åtgärden $export
som definieras av FHIR-specifikationen för att exportera alla eller en filtrerad delmängd av FHIR-data i NDJSON
format. Dessutom stöder den avidentifierad export för att anonymisera FHIR-data under exporten.
Om du vill exportera FHIR-data till Azure Blob Storage måste du först konfigurera FHIR-servern för att exportera data till lagringskontot. Du måste (1) aktivera hanterad identitet, (2) gå till Åtkomstkontroll i lagringskontot och lägga till rolltilldelning, (3) välj ditt lagringskonto för $export
. Mer steg för steg finns här.
Du kan konfigurera servern för att exportera data till alla typer av Azure-lagringskonton, men vi rekommenderar att du exporterar till ADL Gen 2 för bästa justering med Synapse.
Använda $export
kommandot
När du har konfigurerat FHIR-servern kan du följa dokumentationen för att exportera dina FHIR-resurser på system-, patient- eller gruppnivå. Du kan till exempel exportera alla dina FHIR-data som är relaterade till patienterna i ett Group
med följande $export
kommando, där du anger ditt ADL Gen 2-bloblagringsnamn i fältet {{BlobContainer}}
:
https://{{FHIR service base URL}}/Group/{{GroupId}}/$export?_container={{BlobContainer}}
Du kan också använda _type
parametern i föregående $export
anrop för att begränsa de resurser som du vill exportera. Följande anrop exporterar till exempel endast Patient
, MedicationRequest
och Observation
resurser:
https://{{FHIR service base URL}}/Group/{{GroupId}}/$export?_container={{BlobContainer}}&
_type=Patient,MedicationRequest,Condition
Mer information om de olika parametrar som stöds finns i vårt $export
sidavsnitt om frågeparametrarna.
Använda Synapse för analys
Skapa en Synapse-arbetsyta
Innan du använder Synapse behöver du en Synapse-arbetsyta. Skapa en Azure Synapse Analytics-tjänst på Azure-portalen. Mer stegvis vägledning finns här. Du behöver ett ADLSGEN2
konto för att skapa en arbetsyta. Din Azure Synapse-arbetsyta använder det här lagringskontot för att lagra dina Synapse-arbetsytedata.
När du har skapat en arbetsyta kan du visa din arbetsyta i Synapse Studio genom att logga in på din arbetsyta på https://web.azuresynapse.neteller starta Synapse Studio i Azure-portalen.
Skapa en länkad tjänst mellan Azure Storage och Synapse
Om du vill kopiera dina data till Synapse måste du skapa en länkad tjänst som ansluter ditt Azure Storage-konto, där du har exporterat dina data, med Synapse. Fler steg-för-steg-instruktioner finns här.
- I Synapse Studio bläddrar du till fliken Hantera och under Externa anslutningar väljer du Länkade tjänster.
- Välj Ny för att lägga till en ny länkad tjänst.
- Välj Azure Data Lake Storage Gen2 i listan och välj Fortsätt.
- Ange dina autentiseringsuppgifter. Välj Skapa när du är klar.
Nu när du har en länkad tjänst mellan ADL Gen 2-lagringen och Synapse är du redo att använda Synapse SQL-pooler för att läsa in och analysera dina FHIR-data.
Bestäm mellan serverlös och dedikerad SQL-pool
Azure Synapse Analytics erbjuder två olika SQL-pooler: serverlös SQL-pool och dedikerad SQL-pool. Serverlös SQL-pool ger flexibiliteten att köra frågor mot data direkt i bloblagringen med hjälp av den serverlösa SQL-slutpunkten utan någon resursetablering. Dedikerad SQL-pool har bearbetningskraft för höga prestanda och samtidighet, och rekommenderas för datalagerfunktioner i företagsskala. Mer information om de två SQL-poolerna finns på sidan för Synapse-dokumentation om SQL-arkitektur.
Använda en serverlös SQL-pool
Eftersom den är serverlös finns det ingen infrastruktur att konfigurera eller kluster att underhålla. Du kan börja köra frågor mot data från Synapse Studio så snart arbetsytan har skapats.
Följande fråga kan till exempel användas för att transformera valda fält från Patient.ndjson
till en tabellstruktur:
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',
...
)
I föregående fråga OPENROWSET
kommer funktionen åt filer i Azure Storage och OPENJSON
parsar JSON-text och returnerar JSON-indataegenskaperna som rader och kolumner. Varje gång den här frågan körs läser den serverlösa SQL-poolen filen från bloblagringen, parsar JSON och extraherar fälten.
Du kan också materialisera resultaten i Parquet-format i en extern tabell för att få bättre frågeprestanda enligt följande.
-- 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 --
Använda dedikerad SQL-pool
Dedikerad SQL-pool stöder hanterade tabeller och en hierarkisk cache för minnesintern prestanda. Du kan importera stordata med enkla T-SQL-frågor och sedan använda kraften i den distribuerade frågemotorn för att köra analys med höga prestanda.
Det enklaste och snabbaste sättet att läsa in data från din lagring till en dedikerad SQL-pool är att använda COPY
kommandot i T-SQL, som kan läsa CSV-, Parquet- och ORC-filer. Precis som i följande exempelfråga använder du COPY
kommandot för att läsa in raderna NDJSON
i en tabellstruktur.
-- 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
När du har JSON-raderna i föregående StagingPatient
tabell kan du skapa olika tabellformat för data med hjälp OPENJSON
av funktionen och lagra resultatet i tabeller. Här är en SQL-exempelfråga för att skapa en Patient
tabell genom att extrahera några fält från resursen Patient
:
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
Nästa steg
I den här artikeln har du lärt dig tre olika sätt att kopiera dina FHIR-data till Synapse.
Därefter kan du lära dig hur du kan av-identifiera dina FHIR-data när du exporterar dem till Synapse för att skydda PHI.
Kommentar
FHIR® är ett registrerat varumärke som tillhör HL7 och används med tillstånd av HL7.