Kopiowanie danych z usługi FHIR do usługi Azure Synapse Analytics

W tym artykule poznasz trzy sposoby kopiowania danych z usługi FHIR w usługach Azure Health Data Services do usługi Azure Synapse Analytics, która jest nieograniczoną usługą analizy, która łączy integrację danych, magazynowanie danych przedsiębiorstwa i analizę danych big data.

Korzystanie z narzędzia systemu operacyjnego agenta synchronizacji FHIR do usługi Synapse

Uwaga

FHIR to Synapse Sync Agent to narzędzie open source wydane w ramach licencji MIT i nie jest objęte umową SLA firmy Microsoft dla usług platformy Azure.

FHIR to Synapse Sync Agent to projekt systemu operacyjnego Microsoft wydany w ramach licencji MIT. Jest to funkcja platformy Azure, która wyodrębnia dane z serwera FHIR przy użyciu interfejsów API zasobów FHIR, konwertuje je na hierarchiczne pliki Parquet i zapisuje je w usłudze Azure Data Lake niemal w czasie rzeczywistym. Zawiera on również skrypt umożliwiający tworzenie zewnętrznych tabel i widoków w bezserwerowej puli SQL usługi Synapse wskazującej pliki Parquet.

To rozwiązanie umożliwia wykonywanie zapytań względem całych danych FHIR przy użyciu narzędzi, takich jak Synapse Studio, SSMS i Power BI. Dostęp do plików Parquet można również uzyskać bezpośrednio z puli usługi Synapse Spark. Należy rozważyć to rozwiązanie, jeśli chcesz uzyskać dostęp do wszystkich danych FHIR niemal w czasie rzeczywistym i chcesz odroczyć transformację niestandardową do systemów podrzędnych.

Postępuj zgodnie z dokumentacją systemu operacyjnego, aby uzyskać instrukcje dotyczące instalacji i użycia.

Korzystanie z narzędzia systemu operacyjnego generatora potoków FHIR do modelu CDM

Uwaga

Generator potoków FHIR to CDM to narzędzie open source wydane w ramach licencji MIT i nie jest objęte umową SLA firmy Microsoft dla usług platformy Azure.

Generator potoków FHIR to CDM jest projektem systemu operacyjnego Microsoft wydanym w ramach licencji MIT. Jest to narzędzie do generowania potoku usługi ADF do kopiowania migawki danych z serwera FHIR przy użyciu interfejsu API $export, przekształcania go w format csv i zapisywania w folderze CDM w Azure Data Lake Storage Gen 2. Narzędzie wymaga pliku konfiguracji utworzonego przez użytkownika zawierającego instrukcje dotyczące projektu i spłaszczania zasobów FHIR oraz pól w tabelach. Możesz również postępować zgodnie z instrukcjami dotyczącymi tworzenia potoku podrzędnego w obszarze roboczym usługi Synapse, aby przenieść dane z folderu CDM do dedykowanej puli SQL usługi Synapse.

To rozwiązanie umożliwia przekształcenie danych w format tabelaryczny podczas zapisywania ich w folderze CDM. Należy rozważyć to rozwiązanie, jeśli chcesz przekształcić dane FHIR w schemat niestandardowy po wyodrębnieniu ich z serwera FHIR.

Postępuj zgodnie z dokumentacją systemu operacyjnego, aby uzyskać instrukcje dotyczące instalacji i użycia.

Ładowanie wyeksportowanych danych do usługi Synapse przy użyciu języka T-SQL

W tym podejściu użyjesz operacji FHIR, aby skopiować zasoby FHIR $export do magazynu obiektów blob usługi Azure Data Lake Gen 2 (ADL Gen 2) w NDJSON formacie . Następnie dane są ładowane z magazynu do bezserwerowych lub dedykowanych pul SQL w usłudze Synapse przy użyciu języka T-SQL. Te kroki można przekonwertować na niezawodny potok przenoszenia danych przy użyciu potoków usługi Synapse.

Usługa Azure Storage do usługi Synapse przy użyciu $export.

Używanie $export do kopiowania danych

Konfigurowanie $export na serwerze FHIR

Serwer FHIR w usługach Azure Health Data Services implementuje $export operację zdefiniowaną przez specyfikację FHIR w celu wyeksportowania wszystkich lub odfiltrowanego podzestawu danych FHIR w NDJSON formacie. Ponadto obsługuje de-zidentyfikowane eksportowanie do anonimowości danych FHIR podczas eksportowania.

Aby wyeksportować dane FHIR do usługi Azure Blob Storage, należy najpierw skonfigurować serwer FHIR w celu wyeksportowania danych na konto magazynu. Musisz (1) włączyć tożsamość zarządzaną, (2) przejść do Access Control na koncie magazynu i dodać przypisanie roli, (3) wybierz konto magazynu dla elementu $export. Więcej informacji krok po kroku można znaleźć tutaj.

Serwer można skonfigurować do eksportowania danych do dowolnego rodzaju konta usługi Azure Storage, ale zalecamy wyeksportowanie do usługi ADL Gen 2 w celu uzyskania najlepszego dopasowania do usługi Synapse.

Za pomocą $export polecenia

Po skonfigurowaniu serwera FHIR możesz postępować zgodnie z dokumentacją , aby wyeksportować zasoby FHIR na poziomie systemu, pacjenta lub grupy. Na przykład możesz wyeksportować wszystkie dane FHIR powiązane z pacjentami w Group pliku za pomocą następującego $export polecenia, w którym określisz nazwę magazynu obiektów blob usługi ADL Gen 2 w polu {{BlobContainer}}:

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

Możesz również użyć _type parametru w wywołaniu $export powyżej, aby ograniczyć zasoby, które chcesz wyeksportować. Na przykład następujące wywołanie spowoduje wyeksportowanie tylko Patientzasobów , MedicationRequest, i Observation :

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

Aby uzyskać więcej informacji na temat różnych obsługiwanych parametrów, zapoznaj się z sekcją naszej $export strony na temat parametrów zapytania.

Korzystanie z usługi Synapse for Analytics

Tworzenie obszaru roboczego usługi Synapse

Przed rozpoczęciem korzystania z usługi Synapse będziesz potrzebować obszaru roboczego usługi Synapse. Utworzysz usługę Azure Synapse Analytics w Azure Portal. Więcej przewodników krok po kroku można znaleźć tutaj. Do utworzenia obszaru roboczego jest potrzebne ADLSGEN2 konto. Twój obszar roboczy Azure Synapse będzie używać tego konta magazynu do przechowywania danych obszaru roboczego usługi Synapse.

Po utworzeniu obszaru roboczego możesz wyświetlić swój obszar roboczy w Synapse Studio, logując się do obszaru roboczego w usłudze https://web.azuresynapse.netlub uruchamiając Synapse Studio w Azure Portal.

Tworzenie połączonej usługi między usługą Azure Storage i usługą Synapse

Aby skopiować dane do usługi Synapse, musisz utworzyć połączoną usługę łączącą konto usługi Azure Storage, w której wyeksportowano dane za pomocą usługi Synapse. Więcej instrukcji krok po kroku można znaleźć tutaj.

  1. W Synapse Studio przejdź do karty Zarządzanie i w obszarze Połączenia zewnętrzne wybierz pozycję Połączone usługi.
  2. Wybierz pozycję Nowy , aby dodać nową połączoną usługę.
  3. Wybierz Azure Data Lake Storage Gen2 z listy i wybierz pozycję Kontynuuj.
  4. Wprowadź poświadczenia uwierzytelniania. Po zakończeniu wybierz pozycję Utwórz.

Teraz, gdy masz połączoną usługę między magazynem ADL Gen 2 i usługą Synapse, możesz przystąpić do ładowania i analizowania danych FHIR przy użyciu pul synapse SQL.

Wybieranie między bezserwerową i dedykowaną pulą SQL

usługa Azure Synapse Analytics oferuje dwie różne pule SQL, bezserwerową pulę SQL i dedykowaną pulę SQL. Bezserwerowa pula SQL zapewnia elastyczność wykonywania zapytań dotyczących danych bezpośrednio w magazynie obiektów blob przy użyciu bezserwerowego punktu końcowego SQL bez konieczności aprowizacji zasobów. Dedykowana pula SQL ma moc obliczeniową w celu zapewnienia wysokiej wydajności i współbieżności oraz jest zalecana w przypadku możliwości magazynowania danych w skali przedsiębiorstwa. Aby uzyskać więcej informacji na temat dwóch pul SQL, zapoznaj się ze stroną dokumentacji usługi Synapse w sekcji Architektura SQL.

Korzystanie z bezserwerowej puli SQL

Ponieważ jest ona bezserwerowa, nie ma infrastruktury do konfigurowania ani obsługi klastrów. Możesz rozpocząć wykonywanie zapytań o dane z Synapse Studio zaraz po utworzeniu obszaru roboczego.

Na przykład następujące zapytanie może służyć do przekształcania wybranych pól ze Patient.ndjson struktury tabelarycznej:

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', 
       ...
) 

W powyższym OPENROWSET zapytaniu funkcja uzyskuje dostęp do plików w usłudze Azure Storage i OPENJSON analizuje tekst JSON i zwraca właściwości wejściowe JSON jako wiersze i kolumny. Za każdym razem, gdy to zapytanie jest wykonywane, bezserwerowa pula SQL odczytuje plik z magazynu obiektów blob, analizuje kod JSON i wyodrębnia pola.

Wyniki można również zmaterializować w formacie Parquet w tabeli zewnętrznej , aby uzyskać lepszą wydajność zapytań, jak pokazano poniżej:

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

Korzystanie z dedykowanej puli SQL

Dedykowana pula SQL obsługuje tabele zarządzane i hierarchiczną pamięć podręczną na potrzeby wydajności w pamięci. Dane big data można importować za pomocą prostych zapytań T-SQL, a następnie używać możliwości aparatu zapytań rozproszonych do uruchamiania analizy o wysokiej wydajności.

Najprostszym i najszybszym sposobem ładowania danych z magazynu do dedykowanej puli SQL jest użycie COPY polecenia w języku T-SQL, które może odczytywać pliki CSV, Parquet i ORC. Tak jak w poniższym przykładowym zapytaniu, użyj COPY polecenia , aby załadować NDJSON wiersze do struktury tabelarycznej.

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

Po utworzeniu wierszy JSON w powyższej StagingPatient tabeli możesz utworzyć różne formaty tabelaryczne danych przy użyciu OPENJSON funkcji i przechowywać wyniki w tabelach. Oto przykładowe zapytanie SQL do utworzenia Patient tabeli przez wyodrębnienie kilku pól z Patient zasobu:

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

Następne kroki

W tym artykule przedstawiono trzy różne sposoby kopiowania danych FHIR do usługi Synapse.

Następnie możesz dowiedzieć się, jak można usunąć identyfikację danych FHIR podczas eksportowania ich do usługi Synapse w celu ochrony funkcji PHI.

FHIR® jest zastrzeżonym znakiem towarowym HL7 i jest używany z pozwoleniem HL7.