Aracılığıyla paylaş


FHIR hizmetinden Azure Synapse Analytics'e veri kopyalama

Bu makalede, Azure Health Data Services'teki FHIR® hizmetinden veri tümleştirme, kurumsal veri ambarı 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 Aracısı OSS aracını kullanma

Not

FHIR to Synapse Sync Agent, MIT lisansı altında yayımlanan bir açık kaynak aracıdır ve Azure için Microsoft SLA hizmetleri 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 veri 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ı gösteren 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 gerçek zamanlıya yakın bir şekilde 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ı altında yayımlanan bir açık kaynak aracıdır ve Azure için Microsoft SLA hizmetleri 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şturmak için kullanılan bir araçtı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ıldıkçe verileri tablosal biçime dönüştürmenizi sağlar. FHIR verileri FHIR sunucusundan ayıklandı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. Ardından, T-SQL kullanarak depolamadaki verileri Synapse'deki 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 Azure depolamadan Synapse'e.

Verileri kopyalamak için kullanma $export

FHIR sunucusunda yapılandırma $export

Azure Health Veri Hizmetleri'ndeki FHIR sunucusu, 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 depolama alanına 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 Erişim Denetimi'ne gitmeniz ve rol ataması eklemeniz, (3) için $exportdepolama hesabınızı seçmeniz gerekir. Adım adım daha fazla bilgi için buraya bakın.

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 önceki $export çağrıda 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 parametreleriyle ilgili sayfa bölümümüze $export göz atın.

Analiz için Synapse'i kullanma

Synapse çalışma alanı oluşturma

Synapse'i kullanmadan önce bir Synapse çalışma alanı gerekir. Azure portalında bir Azure Synapse Analytics hizmeti oluşturun. Daha fazla adım adım kılavuza buradan ulaşabilirsiniz. Ç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ında Synapse Studio'yu başlatarak Synapse Studio'da çalışma alanınızı https://web.azuresynapse.netgö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ızla 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 iki farklı SQL havuzu sunar: sunucusuz SQL havuzu ve ayrılmış SQL havuzu. 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şleme 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 mimarisiyle ilgili Synapse belgeleri sayfasına bakın.

Sunucusuz SQL havuzunu kullanma

Sunucusuz olduğundan, kurulacak altyapı veya korunacak kümeler yoktur. Çalışma alanı oluşturulur oluşturulmaz Synapse Studio'dan veri 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', 
       ...
) 

Önceki 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.

Daha iyi sorgu performansı elde etmek için sonuçları aşağıdaki gibi Bir Dış Tablo'da Parquet biçiminde de gerçekleştirebilirsiniz.

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

Önceki StagingPatient tabloda JSON satırlarına sahip olduktan sonra işlevini kullanarak OPENJSON verilerin farklı tablosal biçimlerini oluşturabilir ve sonuçları tablolarda depolayabilirsiniz. Kaynaktan birkaç alan ayıklayarak tablo oluşturmaya Patient yönelik örnek bir SQL sorgusu aşağıda 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.

Not

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