Kopieren von Daten aus der Azure-API für FHIR in Azure Synapse Analytics
Wichtig
Azure API for FHIR wird am 30. September 2026 eingestellt. Folgen Sie den Migrationsstrategien, um bis zu diesem Datum zum Azure Health Data Services-FHIR®-Dienst zu wechseln. Aufgrund der Einstellung von Azure API for FHIR werden neue Bereitstellungen ab dem 1. April 2025 nicht zugelassen. Der Azure Health Data Services-FHIR-Dienst ist die weiterentwickelte Version der Azure-API für FHIR, mit der Kundschaft FHIR-, DICOM- und Medizintechnikdienste mit Integrationen in andere Azure-Dienste verwalten kann.
In diesem Artikel lernen Sie drei Möglichkeiten zum Kopieren von Daten aus der Azure-API für FHIR® in Azure Synapse Analytics kennen, bei dem es sich um einen unbegrenzten Analysedienst handelt, der Datenintegration, Enterprise Data Warehouse und Big Data Analytics zusammenführt. Dies sind wie folgt.
- Verwenden des Tools "FHIR to Synapse Sync Agent OSS"
- Verwenden des FHIR zum CDM-Pipelinegenerator-OSS-Tool
- Verwenden und Laden von
$export
Daten in Synapse mit T-SQL
Verwenden des Tools FHIR zum Synapse-Synchronisierungs-Agent OSS
Hinweis
FHIR to Synapse Sync Agent ist ein Open Source-Tool, das unter der MIT-Lizenz veröffentlicht wird und nicht von der Microsoft SLA für Azure-Dienste abgedeckt wird.
Der FHIR to Synapse Sync Agent ist ein Microsoft OSS-Projekt, das unter MIT License veröffentlicht wurde. Es handelt sich um eine Azure-Funktion, die Daten von einem FHIR-Server mithilfe von FHIR-Ressourcen-APIs extrahiert, in hierarchische Parkettdateien konvertiert und in Azure Data Lake in Nahezu-Echtzeit schreibt. Außerdem enthält es ein Skript zum Erstellen externer Tabellen und Ansichten im Synapse Serverless SQL-Pool , der auf die Parkettdateien verweist.
Mit dieser Lösung können Sie die gesamten FHIR-Daten mit Tools wie Synapse Studio, SSMS und Power BI abfragen. Sie können auch direkt über einen Synapse Spark Pool auf die Parkettdateien zugreifen. Sie sollten diese Lösung in Betracht ziehen, wenn Sie in nahezu Echtzeit auf alle FHIR-Daten zugreifen möchten und die benutzerdefinierte Transformation auf downstream-Systeme zurückstellen möchten.
Befolgen Sie die OsS-Dokumentation für Installations- und Nutzungsanweisungen.
Verwenden des OSS-Tools FHIR zu CDM-Pipelinegenerator
Hinweis
FHIR zu CDM-Pipelinegenerator ist ein Open Source-Tool, das unter DER MIT-Lizenz veröffentlicht wird und nicht von der Microsoft SLA für Azure-Dienste abgedeckt wird.
Der FHIR-zu-CDM-Pipeline-Generator ist ein Microsoft OSS-Projekt, das unter MIT License veröffentlicht wurde. Es ist ein Tool zum Generieren einer ADF-Pipeline zum Kopieren einer Momentaufnahme von Daten von einem FHIR-Server mithilfe der $export
API, transformieren sie in das CSV-Format und schreiben sie in einen CDM-Ordner in Azure Data Lake Storage Gen 2. Das Tool erfordert eine vom Benutzer erstellte Konfigurationsdatei, die Anweisungen zum Projekt enthält und FHIR-Ressourcen und -Felder in Tabellen flacht. Sie können auch die Anweisungen zum Erstellen einer nachgelagerten Pipeline in einem Synapse-Arbeitsbereich befolgen, um Daten aus dem CDM-Ordner in einen dedizierten Synapse-SQL-Pool zu verschieben.
Mit dieser Lösung können Sie die Daten in tabellarische Formate umwandeln, wie sie in einen CDM-Ordner geschrieben wird. Sie sollten diese Lösung in Betracht ziehen, wenn Sie FHIR-Daten nach dem Extrahieren vom FHIR-Server in ein benutzerdefiniertes Schema umwandeln möchten.
Befolgen Sie die OsS-Dokumentation für Installations- und Nutzungsanweisungen.
Laden exportierter Daten in Synapse mit T-SQL
Bei diesem Ansatz verwenden Sie den FHIR-Vorgang, um FHIR-Ressourcen $export
in einen Azure Data Lake Gen 2 (ADL Gen 2)-Blobspeicher im NDJSON
Format zu kopieren. Anschließend laden Sie die Daten aus dem Speicher in serverlose oder dedizierte SQL-Pools in Synapse mit T-SQL. Sie können diese Schritte mithilfe von Synapse-Pipelines in eine robuste Datenverschiebungspipeline konvertieren.
Verwenden $export
zum Kopieren von Daten
Konfigurieren $export
im FHIR-Server
Die Azure-API für FHIR implementiert den $export
von der FHIR-Spezifikation definierten Vorgang zum Exportieren aller oder einer gefilterten Teilmenge von FHIR-Daten im NDJSON
Format. Darüber hinaus unterstützt sie die deidentisierte Exportfunktion , um FHIR-Daten während des Exports zu anonymisiert.
Um FHIR-Daten in Azure Blob Storage zu exportieren, müssen Sie zuerst Ihren FHIR-Server so konfigurieren, dass Daten in das Speicherkonto exportiert werden. Sie müssen (1) verwaltete Identität aktivieren, (2) zur Zugriffssteuerung im Speicherkonto wechseln und eine Rollenzuweisung hinzufügen, (3) Wählen Sie Ihr Speicherkonto für $export
. Weitere Schrittweise Anleitungen finden Sie hier.
Sie können den Server so konfigurieren, dass die Daten in eine beliebige Art von Azure-Speicherkonto exportiert werden. Es wird jedoch empfohlen, für eine optimale Ausrichtung mit Synapse nach ADL Gen 2 zu exportieren.
Verwenden des $export
Befehls
Nachdem Sie Ihren FHIR-Server konfiguriert haben, können Sie die Dokumentation befolgen, um Ihre FHIR-Ressourcen auf System-, Patienten- oder Gruppenebene zu exportieren. Sie können beispielsweise alle FHIR-Daten im Zusammenhang mit den Patienten in einem Group
mit dem folgenden $export
Befehl exportieren, in dem Sie ihren ADL Gen 2 Blob Storage-Namen im Feld {{BlobContainer}}
angeben:
https://{{FHIR service base URL}}/Group/{{GroupId}}/$export?_container={{BlobContainer}}
Sie können den _type
Parameter auch im vorherigen $export
Aufruf verwenden, um die zu exportierenden Ressourcen einzuschränken. Der folgende Aufruf exportiert z. B. nur Patient
, MedicationRequest
und Observation
Ressourcen:
https://{{FHIR service base URL}}/Group/{{GroupId}}/$export?_container={{BlobContainer}}&
_type=Patient,MedicationRequest,Condition
Weitere Informationen zu den verschiedenen unterstützten Parametern finden Sie $export
im Seitenabschnitt zu den Abfrageparametern.
Verwenden von Synapse for Analytics
Erstellen eines Synapse-Arbeitsbereichs
Bevor Sie Synapse verwenden, benötigen Sie einen Synapse-Arbeitsbereich. Sie müssen einen Azure Synapse Analytics-Dienst auf Azure-Portal erstellen. Weitere schrittweise Anleitungen finden Sie hier. Sie benötigen ein ADLSGEN2
Konto, um einen Arbeitsbereich zu erstellen. Ihr Azure Synapse-Arbeitsbereich verwendet dieses Speicherkonto, um Ihre Synapse-Arbeitsbereichsdaten zu speichern.
Nach dem Erstellen eines Arbeitsbereichs können Sie Ihren Arbeitsbereich in Synapse Studio anzeigen, indem Sie sich bei https://web.azuresynapse.netIhrem Arbeitsbereich anmelden oder Synapse Studio im Azure-Portal starten.
Erstellen eines verknüpften Diensts zwischen Azure Storage und Synapse
Um Ihre Daten in Synapse zu kopieren, müssen Sie einen verknüpften Dienst erstellen, der eine Verbindung mit dem Azure Storage-Konto herstellt, in dem Sie Ihre Daten mit Synapse exportiert haben. Weitere schrittweise Anleitungen finden Sie hier.
- Navigieren Sie in Synapse Studio zur Registerkarte "Verwalten". Wählen Sie unter "Externe Verbindungen" "Verknüpfte Dienste" aus.
- Wählen Sie "Neu" aus, um einen neuen verknüpften Dienst hinzuzufügen.
- Wählen Sie azure Data Lake Storage Gen2 aus der Liste aus, und wählen Sie "Weiter" aus.
- Geben Sie Ihre Anmeldeinformationen für die Authentifizierung ein. Wenn Sie fertig sind, klicken Sie auf Erstellen.
Nachdem Sie nun über einen verknüpften Dienst zwischen Ihrem ADL Gen 2-Speicher und Synapse verfügen, können Sie Synapse SQL-Pools verwenden, um Ihre FHIR-Daten zu laden und zu analysieren.
Entscheiden zwischen serverlosen und dedizierten SQL-Pool
Azure Synapse Analytics bietet zwei verschiedene SQL-Pools: serverloser SQL-Pool und dedizierter SQL-Pool. Der Serverlose SQL-Pool bietet die Flexibilität, Daten direkt im BLOB-Speicher mithilfe des serverlosen SQL-Endpunkts ohne Ressourcenbereitstellung abfragen zu können. Der dedizierte SQL-Pool verfügt über die Verarbeitungsleistung für hohe Leistung und Parallelität und wird für Data Warehouse-Funktionen im Unternehmen empfohlen. Weitere Informationen zu den beiden SQL-Pools finden Sie auf der Synapse-Dokumentationsseite zur SQL-Architektur.
Verwenden des serverlosen SQL-Pools
Da es serverlos ist, gibt es keine Infrastruktur zum Einrichten oder Verwalten von Clustern. Sie können mit der Abfrage von Daten aus Synapse Studio beginnen, sobald der Arbeitsbereich erstellt wird.
Beispielsweise kann die folgende Abfrage verwendet werden, um ausgewählte Felder aus Patient.ndjson
einer tabellarischen Struktur zu transformieren.
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 der vorherigen Abfrage greift die OPENROWSET
Funktion auf Dateien in Azure Storage zu und analysiert JSON-Text und OPENJSON
gibt die JSON-Eingabeeigenschaften als Zeilen und Spalten zurück. Jedes Mal, wenn diese Abfrage ausgeführt wird, liest der serverlose SQL-Pool die Datei aus dem BLOB-Speicher, analysiert den JSON-Code und extrahiert die Felder.
Sie können die Ergebnisse auch im Parkettformat in einer externen Tabelle materialisieren, um eine bessere Abfrageleistung wie folgt zu erzielen.
-- 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 --
Verwenden eines dedizierten SQL-Pools
Dedizierter SQL-Pool unterstützt verwaltete Tabellen und einen hierarchischen Cache für die Leistung im Arbeitsspeicher. Sie können Big Data mit einfachen T-SQL-Abfragen importieren und dann die Leistungsfähigkeit des verteilten Abfragemoduls verwenden, um Hochleistungsanalysen auszuführen.
Die einfachste und schnellste Möglichkeit zum Laden von Daten aus Ihrem Speicher in einen dedizierten SQL-Pool besteht darin, den COPY
Befehl in T-SQL zu verwenden, der CSV-, Parkett- und ORC-Dateien lesen kann. Wie in der folgenden Beispielabfrage. Verwenden Sie den COPY
Befehl, um die NDJSON
Zeilen in eine tabellarische Struktur zu 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
Sobald die JSON-Zeilen in der StagingPatient
Tabelle generiert wurden, können Sie verschiedene tabellarische Formate der Daten mithilfe der OPENJSON
Funktion erstellen und die Ergebnisse in Tabellen speichern. Es folgt eine BEISPIEL-SQL-Abfrage zum Erstellen einer Patient
Tabelle durch Extrahieren einiger Felder aus der 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
Nächste Schritte
In diesem Artikel haben Sie drei verschiedene Möglichkeiten zum Kopieren Ihrer FHIR-Daten in Synapse kennengelernt.
Als Nächstes erfahren Sie, wie Sie Ihre FHIR-Daten beim Exportieren nach Synapse aufheben können, um persönliche Gesundheitsinformationen (PHI) zu schützen.
Hinweis
FHIR® ist eine eingetragene Marke von HL7 und wird mit Genehmigung von HL7 verwendet.