Kopieren von Daten aus der Azure-API für FHIR in Azure Synapse Analytics

In diesem Artikel erfahren Sie drei Möglichkeiten zum Kopieren von Daten aus der Azure-API für FHIR in Azure Synapse Analytics, einem unbegrenzten Analysedienst, der Datenintegration, Enterprise Data Warehousing und Big Data Analytics vereint.

Verwenden des OSS-Tools für den FHIR-zu-Synapse-Synchronisierungs-Agent

Hinweis

Der FHIR-zu-Synapse-Synchronisierungs-Agent ist ein Open Source-Tool, das unter mit der MIT-Lizenz veröffentlicht wird, und wird nicht von der Microsoft-SLA für Azure-Dienste abgedeckt.

Der FHIR-zu-Synapse-Synchronisierungs-Agent ist ein Microsoft OSS-Projekt, das unter der MIT-Lizenz veröffentlicht wurde. Es handelt sich um eine Azure-Funktion, die Daten von einem FHIR-Server mithilfe von FHIR-Ressourcen-APIs extrahiert, in hierarchische Parquet-Dateien konvertiert und nahezu in Echtzeit in Azure Data Lake schreibt. Dies enthält auch ein Skript zum Erstellen externer Tabellen und Sichten im Synapse Serverless SQL-Pool , der auf die Parquet-Dateien 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 Parquet-Dateien zugreifen. Sie sollten diese Lösung in Betracht ziehen, wenn Sie nahezu in Echtzeit auf alle Ihre FHIR-Daten zugreifen und die benutzerdefinierte Transformation auf nachgeschaltete Systeme zurückstellen möchten.

Befolgen Sie die OSS-Dokumentation für Installations- und Nutzungsanweisungen.

Verwenden des OSS-Tools für den Pipelinegenerator FHIR zu CDM

Hinweis

Der FHIR-zu-CDM-Pipelinegenerator ist ein Open Source-Tool, das unter mit der MIT-Lizenz veröffentlicht wird, und wird nicht von der Microsoft-SLA für Azure-Dienste abgedeckt.

Der FHIR-zu-CDM-Pipeline-Generator ist ein Microsoft OSS-Projekt, das unter der MIT-Lizenz veröffentlicht wurde. Es ist ein Tool zum Generieren einer ADF-Pipeline zum Kopieren einer Momentaufnahme von Daten von einem FHIR-Server mithilfe $export-API, zum Transformieren in das CSV-Format und zum Schreiben in einen CDM-Ordner in Azure Data Lake Storage Gen 2. Das Tool erfordert eine vom Benutzer erstellte Konfigurationsdatei mit Anweisungen zum Projizieren und Abflachen von FHIR-Ressourcen und -Feldern in Tabellen. Sie können auch die Anweisungen zum Erstellen einer Downstreampipeline im 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 ein tabellarisches Format transformieren, wenn sie in den CDM-Ordner geschrieben werden. Sie sollten diese Lösung in Betracht ziehen, wenn Sie FHIR-Daten nach der Extraktion aus dem FHIR-Server in ein benutzerdefiniertes Schema transformieren möchten.

Befolgen Sie die OSS-Dokumentation für Installations- und Nutzungsanweisungen.

Laden exportierter Daten in Synapse mithilfe von T-SQL

Bei diesem Ansatz verwenden Sie den FHIR-Vorgang $export , um FHIR-Ressourcen in einen Azure Data Lake Gen2-Blobspeicher (ADL Gen 2) im NDJSON Format zu kopieren. Anschließend laden Sie die Daten aus dem Speicher in serverlose oder dedizierte SQL-Pools in Synapse mithilfe von T-SQL. Sie können diese Schritte mithilfe von Synapse-Pipelines in eine robuste Datenverschiebungspipeline konvertieren.

Azure Storage in Synapse mit $export.

Verwenden zum Kopieren von $export Daten

Konfigurieren $export auf dem FHIR-Server

Azure API for FHIR implementiert den durch die $export FHIR-Spezifikation definierten Vorgang, um alle oder eine gefilterte Teilmenge von FHIR-Daten im NDJSON Format zu exportieren. Darüber hinaus wird der deidentisierte Export unterstützt, um FHIR-Daten während des Exports zu anonymisieren.

Um FHIR-Daten in Azure Blob Storage zu exportieren, müssen Sie zunächst Ihren FHIR-Server so konfigurieren, dass Daten in das Speicherkonto exportiert werden. Sie müssen (1) verwaltete Identität aktivieren, (2) zu Access Control im Speicherkonto wechseln und die Rollenzuweisung hinzufügen, (3) Ihr Speicherkonto für $exportauswählen. Mehr Schritt für Schritt finden Sie hier.

Sie können den Server so konfigurieren, dass die Daten in ein beliebiges Azure-Speicherkonto exportiert werden. Es wird jedoch empfohlen, den Export nach ADL Gen 2 zu ermöglichen, um die optimale Ausrichtung auf Synapse zu erzielen.

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 Ihre FHIR-Daten im Zusammenhang mit den Patienten in einem Group mit dem folgenden $export Befehl exportieren, in dem Sie Ihren ADL Gen 2-Blobspeichernamen im Feld {{BlobContainer}}angeben:

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

Sie können auch den $export Parameter im obigen Aufruf verwenden_type, um die Zu exportierenden Ressourcen einzuschränken. Der folgende Aufruf exportiert beispielsweise nur PatientRessourcen, MedicationRequest, und Observation :

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

Weitere Informationen zu den verschiedenen unterstützten Parametern finden Sie in unserem $export Seitenabschnitt zu den Abfrageparametern.

Verwenden von Synapse für Analytics

Erstellen eines Synapse-Arbeitsbereichs

Bevor Sie Synapse verwenden, benötigen Sie einen Synapse-Arbeitsbereich. Sie erstellen einen Azure Synapse Analytics-Dienst auf Azure-Portal. Weitere Schritt-für-Schritt-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.

Nachdem Sie einen Arbeitsbereich erstellt haben, können Sie Ihren Arbeitsbereich in Synapse Studio anzeigen, indem Sie sich bei Ihrem Arbeitsbereich anmelden https://web.azuresynapse.netoder Synapse Studio im Azure-Portal starten.

Erstellen eines verknüpften Diensts zwischen Azure Storage und Synapse

Um Ihre Daten nach Synapse zu kopieren, müssen Sie einen verknüpften Dienst erstellen, der Ihr Azure Storage-Konto, in das Sie Ihre Daten exportiert haben, mit Synapse verbindet. Weitere Schritt-für-Schritt-Anleitungen finden Sie hier.

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

Azure Synapse Analytics bietet zwei verschiedene SQL-Pools, einen serverlosen SQL-Pool und einen dedizierten SQL-Pool. Der serverlose SQL-Pool bietet die Flexibilität, Daten direkt im Blobspeicher 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 Warehousing-Funktionen auf Unternehmensniveau empfohlen. Weitere Informationen zu den beiden SQL-Pools finden Sie auf der Synapse-Dokumentationsseite zur SQL-Architektur.

Verwenden eines serverlosen SQL-Pools

Da es serverlos ist, gibt es keine Infrastruktur, die eingerichtet werden muss, oder Cluster, die verwaltet werden müssen. Sie können mit der Abfrage von Daten aus Synapse Studio beginnen, sobald der Arbeitsbereich erstellt wurde.

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 obigen Abfrage greift die OPENROWSET Funktion auf Dateien in Azure Storage zu, OPENJSON analysiert JSON-Text und gibt die JSON-Eingabeeigenschaften als Zeilen und Spalten zurück. Bei jeder Ausführung dieser Abfrage liest der serverlose SQL-Pool die Datei aus dem Blobspeicher, analysiert den JSON-Code und extrahiert die Felder.

Sie können die Ergebnisse auch im Parquet-Format in einer externen Tabelle materialisieren, um eine bessere Abfrageleistung zu erzielen, wie unten gezeigt:

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

Der dedizierte 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 der verteilten Abfrage-Engine nutzen, um hochleistungsfähige Analysen auszuführen.

Die einfachste und schnellste Möglichkeit zum Laden von Daten aus Ihrem Speicher in einen dedizierten SQL-Pool ist die Verwendung des COPY Befehls in T-SQL, der CSV-, Parquet- 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 über die JSON-Zeilen in der StagingPatient obigen Tabelle verfügen, können Sie mithilfe OPENJSON der -Funktion verschiedene Tabellenformate der Daten erstellen und die Ergebnisse in Tabellen speichern. Hier sehen Sie eine SQL-Beispielabfrage zum Erstellen einer Patient Tabelle, indem Sie einige Felder aus der Patient Ressource extrahieren:

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 kennengelernt, ihre FHIR-Daten in Synapse zu kopieren.

Als Nächstes erfahren Sie, wie Sie Ihre FHIR-Daten beim Exportieren nach Synapse aufheben können, um PHI zu schützen.

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