Menyalin data dari Azure API untuk FHIR ke Azure Synapse Analytics

Dalam artikel ini, Anda akan mempelajari tiga cara untuk menyalin data dari Azure API untuk FHIR ke Azure Synapse Analytics, yang merupakan layanan analitik tak terbatas yang menyatukan integrasi data, pergudangan data perusahaan, dan analitik big data.

Menggunakan alat OSS Agen Sinkronisasi FHIR ke Synapse

Catatan

FHIR ke Synapse Sync Agent adalah alat sumber terbuka yang dirilis di bawah lisensi MIT, dan tidak dicakup oleh layanan Microsoft SLA untuk Azure.

FHIR ke Synapse Sync Agent adalah proyek Microsoft OSS yang dirilis di bawah Lisensi MIT. Ini adalah fungsi Azure yang mengekstrak data dari server FHIR menggunakan FHIR Resource API, mengonversinya menjadi file Parquet hierarkis, dan menulisnya ke Azure Data Lake mendekati real time. Ini juga berisi skrip untuk membuat tabel dan tampilan eksternal di kumpulan Synapse Serverless SQL yang menunjuk ke file Parquet.

Solusi ini memungkinkan Anda untuk mengkueri seluruh data FHIR dengan alat seperti Synapse Studio, SSMS, dan Power BI. Anda juga dapat mengakses file Parquet langsung dari kumpulan Synapse Spark. Anda harus mempertimbangkan solusi ini jika Anda ingin mengakses semua data FHIR Anda mendekati real time, dan ingin menangguhkan transformasi kustom ke sistem hilir.

Ikuti dokumentasi OSS untuk instruksi penginstalan dan penggunaan.

Menggunakan alat OSS generator alur FHIR ke CDM

Catatan

Generator alur FHIR ke CDM adalah alat sumber terbuka yang dirilis di bawah lisensi MIT, dan tidak tercakup oleh layanan Microsoft SLA untuk Azure.

Generator alur FHIR ke CDM adalah proyek Microsoft OSS yang dirilis di bawah Lisensi MIT. Ini adalah alat untuk menghasilkan alur ADF untuk menyalin rekam jepret data dari server FHIR menggunakan $export API, mengubahnya menjadi format csv, dan menulis ke folder CDM di Azure Data Lake Storage Gen 2. Alat ini memerlukan file konfigurasi yang dibuat pengguna yang berisi instruksi untuk memproyeksikan dan meratakan Sumber Daya dan bidang FHIR ke dalam tabel. Anda juga dapat mengikuti instruksi untuk membuat alur hilir di ruang kerja Synapse untuk memindahkan data dari folder CDM ke kumpulan SQL khusus Synapse.

Solusi ini memungkinkan Anda mengubah data menjadi format tabular saat ditulis ke folder CDM. Anda harus mempertimbangkan solusi ini jika Anda ingin mengubah data FHIR menjadi skema kustom setelah diekstraksi dari server FHIR.

Ikuti dokumentasi OSS untuk instruksi penginstalan dan penggunaan.

Memuat data yang diekspor ke Synapse menggunakan T-SQL

Dalam pendekatan ini, Anda menggunakan operasi FHIR $export untuk menyalin sumber daya FHIR ke penyimpanan blob Azure Data Lake Gen 2 (ADL Gen 2) dalam NDJSON format. Selanjutnya, Anda memuat data dari penyimpanan ke kumpulan SQL tanpa server atau khusus di Synapse menggunakan T-SQL. Anda dapat mengonversi langkah-langkah ini menjadi alur pergerakan data yang kuat menggunakan alur Synapse.

Penyimpanan Azure ke Synapse menggunakan $export.

Menggunakan $export untuk menyalin data

Mengonfigurasi $export di server FHIR

Azure API untuk FHIR mengimplementasikan operasi yang $export ditentukan oleh spesifikasi FHIR untuk mengekspor semua atau subset data FHIR yang difilter dalam NDJSON format. Selain itu, ini mendukung ekspor yang tidak diidentifikasi untuk menganonimkan data FHIR selama ekspor.

Untuk mengekspor data FHIR ke penyimpanan blob Azure, Anda harus terlebih dahulu mengonfigurasi server FHIR untuk mengekspor data ke akun penyimpanan. Anda harus (1) mengaktifkan Identitas Terkelola, (2) buka Access Control di akun penyimpanan dan tambahkan penetapan peran, (3) pilih akun penyimpanan Anda untuk $export. Langkah demi langkah lainnya dapat ditemukan di sini.

Anda dapat mengonfigurasi server untuk mengekspor data ke segala jenis akun penyimpanan Azure, tetapi sebaiknya ekspor ke ADL Gen 2 untuk penyelarasan terbaik dengan Synapse.

Menggunakan $export perintah

Setelah mengonfigurasi server FHIR, Anda dapat mengikuti dokumentasi untuk mengekspor sumber daya FHIR Anda di tingkat Sistem, Pasien, atau Grup. Misalnya, Anda dapat mengekspor semua data FHIR yang terkait dengan pasien dengan Group perintah berikut $export , di mana Anda menentukan nama penyimpanan blob ADL Gen 2 Anda di bidang {{BlobContainer}}:

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

Anda juga dapat menggunakan _type parameter dalam $export panggilan di atas untuk membatasi sumber daya yang ingin Anda ekspor. Misalnya, panggilan berikut hanya Patientakan mengekspor sumber daya , MedicationRequest, dan Observation :

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

Untuk informasi selengkapnya tentang berbagai parameter yang didukung, lihat bagian halaman kami $export tentang parameter kueri.

Menggunakan Synapse untuk Analytics

Membuat ruang kerja Synapse

Sebelum menggunakan Synapse, Anda memerlukan ruang kerja Synapse. Anda akan membuat layanan Azure Synapse Analytics di portal Azure. Panduan langkah demi langkah lainnya dapat ditemukan di sini. Anda memerlukan ADLSGEN2 akun untuk membuat ruang kerja. Ruang kerja Azure Synapse Anda akan menggunakan akun penyimpanan ini untuk menyimpan data ruang kerja Synapse Anda.

Setelah membuat ruang kerja, Anda dapat melihat ruang kerja di Synapse Studio dengan masuk ke ruang kerja Anda di https://web.azuresynapse.net, atau meluncurkan Synapse Studio di portal Azure.

Membuat layanan tertaut antara penyimpanan Azure dan Synapse

Untuk menyalin data Anda ke Synapse, Anda perlu membuat layanan tertaut yang menyambungkan akun Azure Storage Anda, tempat Anda mengekspor data, dengan Synapse. Instruksi langkah demi langkah lainnya dapat ditemukan di sini.

  1. Di Synapse Studio, telusuri ke tab Kelola dan di bawah Koneksi eksternal, pilih Layanan tertaut.
  2. Pilih Baru untuk menambahkan layanan tertaut baru.
  3. Pilih Azure Data Lake Storage Gen2 dari daftar dan pilih Lanjutkan.
  4. Masukkan info masuk autentikasi Anda. Pilih Buat saat selesai.

Sekarang setelah Anda memiliki layanan tertaut antara penyimpanan ADL Gen 2 dan Synapse, Anda siap menggunakan kumpulan Synapse SQL untuk memuat dan menganalisis data FHIR Anda.

Memutuskan antara kumpulan SQL tanpa server dan khusus

Azure Synapse Analytics menawarkan dua kumpulan SQL yang berbeda, kumpulan SQL tanpa server, dan kumpulan SQL khusus. Kumpulan SQL tanpa server memberikan fleksibilitas kueri data langsung di penyimpanan blob menggunakan titik akhir SQL tanpa server tanpa provisi sumber daya apa pun. Kumpulan SQL khusus memiliki daya pemrosesan untuk performa dan konkurensi tinggi, dan direkomendasikan untuk kemampuan pergudangan data skala perusahaan. Untuk detail selengkapnya tentang dua kumpulan SQL, lihat halaman dokumentasi Synapse pada arsitektur SQL.

Menggunakan kumpulan SQL tanpa server

Karena tanpa server, tidak ada infrastruktur untuk disiapkan atau kluster untuk dipertahankan. Anda dapat mulai mengkueri data dari Synapse Studio segera setelah ruang kerja dibuat.

Misalnya, kueri berikut dapat digunakan untuk mengubah bidang yang dipilih dari Patient.ndjson menjadi struktur tabular:

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

Dalam kueri di atas, OPENROWSET fungsi mengakses file di Azure Storage, dan OPENJSON mengurai teks JSON dan mengembalikan properti input JSON sebagai baris dan kolom. Setiap kali kueri ini dijalankan, kumpulan SQL tanpa server membaca file dari penyimpanan blob, mengurai JSON, dan mengekstrak bidang.

Anda juga bisa mewujudkan hasil dalam format Parquet dalam Tabel Eksternal untuk mendapatkan performa kueri yang lebih baik, seperti yang ditunjukkan di bawah ini:

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

Menggunakan kumpulan SQL khusus

Kumpulan SQL khusus mendukung tabel terkelola dan cache hierarkis untuk performa dalam memori. Anda dapat mengimpor big data dengan kueri T-SQL sederhana, lalu menggunakan kekuatan mesin kueri terdistribusi untuk menjalankan analitik berperforma tinggi.

Cara paling sederhana dan tercepat untuk memuat data dari penyimpanan Anda ke kumpulan SQL khusus adalah dengan menggunakan COPY perintah di T-SQL, yang dapat membaca file CSV, Parquet, dan ORC. Seperti dalam contoh kueri di bawah ini, gunakan COPY perintah untuk memuat NDJSON baris ke dalam struktur tabular.

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

Setelah Anda memiliki baris JSON dalam tabel di StagingPatient atas, Anda dapat membuat format data tabular yang berbeda menggunakan OPENJSON fungsi dan menyimpan hasilnya ke dalam tabel. Berikut adalah contoh kueri SQL untuk membuat Patient tabel dengan mengekstrak beberapa bidang dari Patient sumber daya:

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

Langkah berikutnya

Dalam artikel ini, Anda mempelajari tiga cara berbeda untuk menyalin data FHIR Anda ke Synapse.

Selanjutnya, Anda dapat mempelajari tentang bagaimana Anda dapat membatalkan identifikasi data FHIR saat mengekspornya ke Synapse untuk melindungi PHI.

FHIR® adalah merek dagang terdaftar HL7 dan digunakan dengan izin HL7.