Kopiowanie danych z usługi Azure API for FHIR do usługi Azure Synapse Analytics
Ważne
Usługa Azure API for FHIR zostanie wycofana 30 września 2026 r. Postępuj zgodnie ze strategiami migracji, aby przejść do usługi Azure Health Data Services FHIR® do tej daty. Ze względu na wycofanie usługi Azure API for FHIR nowe wdrożenia nie będą możliwe od 1 kwietnia 2025 r. Usługa FHIR usług Azure Health Data Services to rozwinięta wersja usługi Azure API for FHIR, która umożliwia klientom zarządzanie usługami FHIR, DICOM i MedTech z integracją z innymi usługami platformy Azure.
W tym artykule przedstawiono trzy sposoby kopiowania danych z usługi Azure API for FHIR® 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. Są one następujące.
- Korzystanie z narzędzia systemu operacyjnego agenta synchronizacji usługi Synapse za pomocą standardu FHIR
- Korzystanie z narzędzia FHIR do generatora potoku CDM
- Używanie
$export
i ładowanie danych do usługi Synapse przy użyciu języka T-SQL
Korzystanie z narzędzia systemu operacyjnego agenta synchronizacji FHIR do usługi Synapse
Uwaga
FHIR to Synapse Sync Agent to narzędzie typu open source wydane na podstawie 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 również skrypt służący do tworzenia tabel i widoków zewnętrznych w bezserwerowej puli SQL usługi Synapse wskazującej pliki Parquet.
To rozwiązanie umożliwia wykonywanie zapytań dotyczących całych danych FHIR za pomocą 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 platformy 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 usługi CDM
Uwaga
Generator potoków FHIR to CDM to narzędzie typu open source wydane na podstawie licencji MIT i nie jest objęte umową SLA firmy Microsoft dla usług platformy Azure.
Generator potoków FHIR to CDM to projekt systemu operacyjnego firmy Microsoft wydany 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 $export
API, przekształcania go w format csv i zapisywania w folderze CDM w usłudze Azure Data Lake Storage Gen 2. Narzędzie wymaga utworzonego przez użytkownika pliku konfiguracji zawierającego instrukcje dotyczące projekcji 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łcanie danych w format tabelaryczny, ponieważ jest on zapisywany w folderze CDM. Należy rozważyć to rozwiązanie, jeśli chcesz przekształcić dane FHIR w niestandardowy schemat po wyodrębnieniu go 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 z magazynu są ładowane 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.
Używanie $export
do kopiowania danych
Konfigurowanie $export
na serwerze FHIR
Interfejs API platformy Azure for FHIR implementuje $export
operację zdefiniowaną przez specyfikację FHIR w celu wyeksportowania wszystkich lub filtrowanego podzestawu danych FHIR w NDJSON
formacie. Ponadto obsługuje de-zidentyfikowane eksportowanie do anonimizowania 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) przejdź do pozycji Kontrola dostępu na koncie magazynu i dodaj przypisanie roli, (3) wybierz swoje konto magazynu.$export
Więcej instrukcji krok po kroku można znaleźć tutaj.
Serwer można skonfigurować tak, aby eksportował dane do dowolnego rodzaju konta usługi Azure Storage, ale zalecamy eksportowanie 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 systemowym, cierpliwym lub grupowym. Na przykład możesz wyeksportować wszystkie dane FHIR powiązane z pacjentami w Group
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ć parametru _type
w poprzednim wywołaniu $export
, aby ograniczyć zasoby, które chcesz wyeksportować. Na przykład następujące wywołanie eksportuje tylko Patient
, MedicationRequest
i Observation
zasoby:
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 potrzebny jest obszar roboczy usługi Synapse. Musisz utworzyć usługę Azure Synapse Analytics w witrynie Azure Portal. Więcej wskazówek krok po kroku można znaleźć tutaj. Potrzebujesz ADLSGEN2
konta do utworzenia obszaru roboczego. Obszar roboczy usługi Azure Synapse 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 programie Synapse Studio, logując się do obszaru roboczego w witrynie https://web.azuresynapse.net, lub uruchamiając program Synapse Studio w witrynie 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ą się z kontem usługi Azure Storage, w której wyeksportowano dane za pomocą usługi Synapse. Więcej instrukcji krok po kroku można znaleźć tutaj.
- W programie Synapse Studio przejdź do karty Zarządzanie . W obszarze Połączenia zewnętrzne wybierz pozycję Połączone usługi.
- Wybierz pozycję Nowy , aby dodać nową połączoną usługę.
- Z listy wybierz pozycję Azure Data Lake Storage Gen2 , a następnie wybierz pozycję Kontynuuj.
- Wprowadź poświadczenia uwierzytelniania. Po zakończeniu wybierz pozycję Utwórz.
Teraz, gdy masz połączoną usługę między magazynem usługi ADL Gen 2 i usługą Synapse, możesz przystąpić do ładowania i analizowania danych FHIR przy użyciu pul sql usługi Synapse.
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 funkcji 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 dotyczącą architektury SQL.
Korzystanie z bezserwerowej puli SQL
Ponieważ nie jest ona bezserwerowa, nie ma infrastruktury do skonfigurowania ani obsługi klastrów. Możesz rozpocząć wykonywanie zapytań o dane z programu 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 z Patient.ndjson
w strukturę tabelaryczny.
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 poprzednim zapytaniu OPENROWSET
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 dane JSON i wyodrębnia pola.
Możesz również zmaterializować wyniki w formacie Parquet w tabeli zewnętrznej, aby uzyskać lepszą wydajność zapytań w następujący sposób.
-- 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. Podobnie jak w poniższym przykładowym zapytaniu. Użyj polecenia , COPY
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 wygenerowanej StagingPatient
tabeli można utworzyć różne formaty tabelaryczne danych przy użyciu OPENJSON
funkcji i przechowywać wyniki w tabelach. Poniżej przedstawiono przykładowe zapytanie SQL w celu 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 danych osobowych (PHI).
Uwaga
FHIR® jest zastrzeżonym znakiem towarowym HL7 i jest używany z uprawnieniem HL7.