Kopieren von Daten aus dem FHIR-Dienst in Azure Synapse Analytics

In diesem Artikel lernen Sie drei Möglichkeiten zum Kopieren von Daten aus dem FHIR-Dienst® in Azure Health Data Services 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.

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. Dies enthält auch 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 mit $export-API, transformieren sie in das CSV-Format und Schreiben 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 downstream-Pipeline im Synapse-Arbeitsbereich befolgen, um Daten aus einem CDM-Ordner in einen dedizierten Sql-Pool von Synapse zu verschieben.

Mit dieser Lösung können Sie die Daten in tabellarische Formate umwandeln, sobald sie in den 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.

Azure Storage to Synapse mit $export.

Verwenden $export zum Kopieren von Daten

Konfigurieren $export im FHIR-Server

Der FHIR-Server in Azure Health Data Services implementiert den $export von der FHIR-Spezifikation definierten Vorgang, um alle oder eine gefilterte Teilmenge von FHIR-Daten im NDJSON Format zu exportieren. 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 Rollenzuweisung hinzufügen, (3) Wählen Sie Ihr Speicherkonto für $export. Weitere Schritt-für-Schritt-Schritte 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 auch den Parameter im vorherigen $export Aufruf verwenden_type, um die ressourcen einzuschränken, die Sie exportieren möchten. Der folgende Aufruf exportiert z. B. nur Patient, MedicationRequestund 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. Erstellen Sie einen Azure Synapse Analytics-Dienst auf Azure-Portal. 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 Ihr Azure Storage-Konto verbindet, in dem Sie Ihre Daten exportiert haben, mit Synapse. Weitere schrittweise Anleitungen finden Sie hier.

  1. Navigieren Sie in Synapse Studio zur Registerkarte "Verwalten", und wählen Sie unter "Externe Verbindungen" die Option "Verknüpfte Dienste" aus.
  2. Wählen Sie "Neu" aus, um einen neuen verknüpften Dienst hinzuzufügen.
  3. Wählen Sie azure Data Lake Storage Gen2 aus der Liste aus, und wählen Sie "Weiter" aus.
  4. 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.

Die folgende Abfrage kann beispielsweise 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. Verwenden Sie wie in der folgenden Beispielabfrage 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 Sie die JSON-Zeilen in der vorherigen StagingPatient Tabelle haben, können Sie verschiedene tabellarische Formate der Daten mithilfe der OPENJSON Funktion erstellen und die Ergebnisse in Tabellen speichern. Hier ist 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 deaktivieren können, um PHI zu schützen.

Hinweis

FHIR® ist eine eingetragene Marke von HL7 und wird mit Genehmigung von HL7 verwendet.