FHIR için Azure API'den Azure Synapse Analytics'e veri kopyalama

Bu makalede, FHIR için Azure API'den veri tümleştirmeyi, kurumsal veri ambarını ve büyük veri analizini bir araya getiren sınırsız bir analiz hizmeti olan Azure Synapse Analytics'e veri kopyalamanın üç yolunu öğreneceksiniz.

FHIR to Synapse Sync Agent OSS aracını kullanma

Not

FHIR to Synapse Sync Agent, MIT lisansı altında yayınlanan bir açık kaynak aracıdır ve Azure hizmetleri için Microsoft SLA kapsamında değildir.

FHIR to Synapse Sync Agent, MIT Lisansı altında yayımlanan bir Microsoft OSS projesidir. FHIR Kaynak API'lerini kullanarak bir FHIR sunucusundan verileri ayıklayan, hiyerarşik Parquet dosyalarına dönüştüren ve neredeyse gerçek zamanlı olarak Azure Data Lake'e yazan bir Azure işlevidir. Bu, Synapse Sunucusuz SQL havuzunda Parquet dosyalarını işaret eden dış tablolar ve görünümler oluşturmaya yönelik bir betik de içerir.

Bu çözüm, Synapse Studio, SSMS ve Power BI gibi araçlarla tüm FHIR verilerini sorgulamanızı sağlar. Parquet dosyalarına doğrudan bir Synapse Spark havuzundan da erişebilirsiniz. Tüm FHIR verilerinize neredeyse gerçek zamanlı olarak erişmek ve aşağı akış sistemlerine özel dönüşümü ertelemek istiyorsanız bu çözümü göz önünde bulundurmanız gerekir.

Yükleme ve kullanım yönergeleri için OSS belgelerini izleyin.

FHIR - CDM işlem hattı oluşturucu OSS aracını kullanma

Not

FHIR-CDM işlem hattı oluşturucu, MIT lisansı kapsamında yayımlanan bir açık kaynak aracıdır ve Azure hizmetleri için Microsoft SLA kapsamında değildir.

FHIR-CDM işlem hattı oluşturucu, MIT Lisansı altında yayımlanan bir Microsoft OSS projesidir. $export API kullanarak bir FHIR sunucusundan verilerin anlık görüntüsünü kopyalamak, csv biçimine dönüştürmek ve Azure Data Lake Storage 2. Nesil'de bir CDM klasörüne yazmak için bir ADF işlem hattı oluşturma aracıdır. Araç, FHIR Kaynaklarını ve alanlarını tablolar halinde yansıtma ve düzleştirme yönergelerini içeren kullanıcı tarafından oluşturulmuş bir yapılandırma dosyası gerektirir. Verileri CDM klasöründen Synapse ayrılmış SQL havuzuna taşımak için Synapse çalışma alanında aşağı akış işlem hattı oluşturma yönergelerini de izleyebilirsiniz.

Bu çözüm, CDM klasörüne yazılan verileri tablo biçiminde dönüştürmenizi sağlar. FHIR verilerini FHIR sunucusundan ayıkladıktan sonra özel bir şemaya dönüştürmek istiyorsanız bu çözümü göz önünde bulundurmanız gerekir.

Yükleme ve kullanım yönergeleri için OSS belgelerini izleyin.

Dışarı aktarılan verileri T-SQL kullanarak Synapse'e yükleme

Bu yaklaşımda FHIR işlemini kullanarak FHIR $export kaynaklarını bir Azure Data Lake 2. Nesil (ADL 2. Nesil) blob depolama alanına NDJSON biçiminde kopyalarsınız. Daha sonra, T-SQL kullanarak verileri depolamadan Synapse'teki sunucusuz veya ayrılmış SQL havuzlarına yüklersiniz. Synapse işlem hatlarını kullanarak bu adımları sağlam bir veri taşıma işlem hattına dönüştürebilirsiniz.

$export kullanarak Synapse'e Azure depolama.

Verileri kopyalamak için kullanma $export

FHIR sunucusunda yapılandırma $export

FHIR için Azure API, FHIR belirtimi tarafından tanımlanan işlemi uygulayarak $export FHIR verilerinin NDJSON tümünü veya filtrelenmiş bir alt kümesini biçiminde dışarı aktarır. Ayrıca, dışarı aktarma sırasında FHIR verilerini anonim hale getirmek için kimliksizleştirilmiş dışarı aktarmayı destekler.

FHIR verilerini Azure blob depolamaya aktarmak için önce FHIR sunucunuzu verileri depolama hesabına aktaracak şekilde yapılandırmanız gerekir. (1) Yönetilen Kimliği etkinleştirmeniz, (2) depolama hesabında Access Control gidip rol ataması eklemeniz gerekir, (3) için $exportdepolama hesabınızı seçin. Adım adım daha fazla bilgi burada bulunabilir.

Sunucuyu verileri herhangi bir Azure depolama hesabına aktaracak şekilde yapılandırabilirsiniz, ancak Synapse ile en iyi hizalama için ADL 2. Nesil'e aktarmanızı öneririz.

Komutu kullanma $export

FHIR sunucunuzu yapılandırdıktan sonra FHIR kaynaklarınızı Sistem, Hasta veya Grup düzeyinde dışarı aktarmak için belgeleri izleyebilirsiniz. Örneğin, adl 2. nesil blob depolama adınızı alanında {{BlobContainer}}belirttiğiniz aşağıdaki $export komutu kullanarak içindeki hastalarla Group ilgili tüm FHIR verilerinizi dışarı aktarabilirsiniz:

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

Dışarı aktarmak istediğiniz kaynakları kısıtlamak için yukarıdaki çağrıda $export parametresini de kullanabilirsiniz_type. Örneğin, aşağıdaki çağrı yalnızca Patient, MedicationRequestve Observation kaynaklarını dışarı aktarır:

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

Desteklenen farklı parametreler hakkında daha fazla bilgi için sorgu parametrelerindeki sayfa bölümümüzü $export gözden geçirin.

Analiz için Synapse'i kullanma

Synapse çalışma alanı oluşturma

Synapse'i kullanmadan önce bir Synapse çalışma alanı gerekir. Azure portal'da bir Azure Synapse Analytics hizmeti oluşturacaksınız. Daha fazla adım adım kılavuzu burada bulabilirsiniz. Çalışma alanı oluşturmak için bir ADLSGEN2 hesaba ihtiyacınız vardır. Azure Synapse çalışma alanınız Synapse çalışma alanı verilerinizi depolamak için bu depolama hesabını kullanır.

Çalışma alanı oluşturduktan sonra, üzerinde çalışma alanınızda oturum açarak veya Azure portal Synapse Studio başlatarak çalışma alanınızı https://web.azuresynapse.netSynapse Studio görüntüleyebilirsiniz.

Azure depolama ile Synapse arasında bağlı hizmet oluşturma

Verilerinizi Synapse'e kopyalamak için Verilerinizi dışarı aktardığınız Azure Depolama hesabınızı Synapse'e bağlayan bir bağlı hizmet oluşturmanız gerekir. Daha fazla adım adım yönerge burada bulunabilir.

  1. Synapse Studio'da Yönet sekmesine gidin ve Dış bağlantılar'ın altında Bağlı hizmetler'i seçin.
  2. Yeni bir bağlı hizmet eklemek için Yeni'yi seçin.
  3. Listeden Azure Data Lake Storage 2. Nesil seçin ve Devam'ı seçin.
  4. Kimlik doğrulama kimlik bilgilerinizi girin. Bittiğinde Oluştur’u seçin.

ADL 2. Nesil depolama alanınız ile Synapse arasında bağlı bir hizmetiniz olduğuna göre, FHIR verilerinizi yüklemek ve analiz etmek için Synapse SQL havuzlarını kullanmaya hazırsınız.

Sunucusuz ve ayrılmış SQL havuzu arasında karar verme

Azure Synapse Analytics, sunucusuz SQL havuzu ve ayrılmış SQL havuzu olmak üzere iki farklı SQL havuzu sunar. Sunucusuz SQL havuzu, herhangi bir kaynak sağlama olmadan sunucusuz SQL uç noktasını kullanarak verileri doğrudan blob depolamada sorgulama esnekliği sağlar. Ayrılmış SQL havuzu, yüksek performans ve eşzamanlılık için işlem gücüne sahiptir ve kurumsal ölçekli veri ambarı özellikleri için önerilir. İki SQL havuzu hakkında daha fazla bilgi için SQL mimarisinin Synapse belgeleri sayfasına bakın.

Sunucusuz SQL havuzunu kullanma

Sunucusuz olduğundan, kurulacak altyapı veya bakım için küme yoktur. Çalışma alanı oluşturulur oluşturulmaz Synapse Studio verileri sorgulamaya başlayabilirsiniz.

Örneğin, seçili alanları Patient.ndjson tablosal yapıya dönüştürmek için aşağıdaki sorgu kullanılabilir:

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

Yukarıdaki sorguda OPENROWSET işlev Azure Depolama'daki dosyalara erişir ve OPENJSON JSON metnini ayrıştırarak JSON giriş özelliklerini satır ve sütun olarak döndürür. Bu sorgu her yürütülürken sunucusuz SQL havuzu blob depolamadan dosyayı okur, JSON ayrıştırıp alanları ayıklar.

Aşağıda gösterildiği gibi daha iyi sorgu performansı elde etmek için sonuçları Bir Dış Tablo'da Parquet biçiminde de elde edebilirsiniz:

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

Ayrılmış SQL havuzunu kullanma

Ayrılmış SQL havuzu, bellek içi performans için yönetilen tabloları ve hiyerarşik önbelleği destekler. Basit T-SQL sorgularıyla büyük verileri içeri aktarabilir ve ardından yüksek performanslı analiz çalıştırmak için dağıtılmış sorgu altyapısının gücünü kullanabilirsiniz.

Depolama alanınızdan ayrılmış bir SQL havuzuna veri yüklemenin en basit ve en hızlı yolu, CSV, Parquet ve ORC dosyalarını okuyabilen T-SQL'de komutunu kullanmaktır COPY . Aşağıdaki örnek sorguda olduğu gibi komutunu kullanarak COPY satırları tablosal bir yapıya yükleyin NDJSON .

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

Yukarıdaki tabloda JSON satırlarına StagingPatient sahip olduktan sonra işlevini kullanarak ve sonuçları tablolarda depolayarak OPENJSON verilerin farklı tablosal biçimlerini oluşturabilirsiniz. Aşağıda, kaynaktan birkaç alan ayıklayarak tablo oluşturmaya yönelik örnek bir Patient SQL sorgusu verilmişti Patient :

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

Sonraki adımlar

Bu makalede, FHIR verilerinizi Synapse'e kopyalamanın üç farklı yolunu öğrendiniz.

Daha sonra, PHI'yi korumak için FHIR verilerinizi Synapse'e aktarırken nasıl kimliklerini kaldırabileceğinizi öğrenebilirsiniz.

FHIR®, HL7'nin tescilli ticari markasıdır ve HL7 izniyle kullanılır.