نسخ البيانات من واجهة برمجة تطبيقات Azure ل FHIR إلى Azure Synapse Analytics

في هذه المقالة، ستتعلم ثلاث طرق لنسخ البيانات من واجهة برمجة تطبيقات Azure ل FHIR إلى Azure Synapse Analytics، وهي خدمة تحليلات لا حدود لها تجمع بين تكامل البيانات وتخزين بيانات المؤسسة وتحليلات البيانات الضخمة.

استخدام أداة FHIR إلى Synapse Sync Agent OSS

ملاحظة

FHIR إلى Synapse Sync Agent هي أداة مصدر مفتوح تم إصدارها بموجب ترخيص MIT، ولا يغطيها Microsoft SLA لخدمات Azure.

FHIR إلى عامل مزامنة Synapse هو مشروع Microsoft OSS تم إصداره بموجب ترخيص MIT. إنها دالة Azure تستخرج البيانات من خادم FHIR باستخدام واجهات برمجة تطبيقات موارد FHIR، وتحولها إلى ملفات Parquet هرمية، وتكتبها في Azure Data Lake في الوقت الفعلي تقريبا. يحتوي هذا أيضا على برنامج نصي لإنشاء جداول خارجية وطرق عرض في تجمع SQL بلا خادم Synapse يشير إلى ملفات Parquet.

يمكنك هذا الحل من الاستعلام مقابل بيانات FHIR بأكملها باستخدام أدوات مثل Synapse Studio وSSMS وPower BI. يمكنك أيضا الوصول إلى ملفات Parquet مباشرة من تجمع Synapse Spark. يجب أن تفكر في هذا الحل إذا كنت تريد الوصول إلى جميع بيانات FHIR الخاصة بك في الوقت الفعلي تقريبا، وتريد تأجيل التحويل المخصص إلى أنظمة انتقال البيانات من الخادم.

اتبع وثائق OSS للحصول على إرشادات التثبيت والاستخدام.

استخدام FHIR إلى أداة OSS لمنشئ البنية الأساسية لبرنامج ربط العمليات التجارية CDM

ملاحظة

FHIR إلى مولد البنية الأساسية لبرنامج ربط العمليات التجارية CDM هو أداة مصدر مفتوح تم إصدارها بموجب ترخيص MIT، ولا يغطيها Microsoft SLA لخدمات Azure.

منشئ البنية الأساسية لبرنامج ربط العمليات التجارية FHIR إلى CDM هو مشروع Microsoft OSS تم إصداره بموجب ترخيص MIT. إنها أداة لإنشاء مسار ADF لنسخ لقطة من البيانات من خادم FHIR باستخدام $export API، وتحويلها إلى تنسيق csv، والكتابة إلى مجلد CDM في Azure Data Lake Storage Gen 2. تتطلب الأداة ملف تكوين أنشأه المستخدم يحتوي على إرشادات لعرض موارد FHIR والحقول وتسويةها في جداول. يمكنك أيضا اتباع الإرشادات الخاصة بإنشاء مسار انتقال البيانات من الخادم في مساحة عمل Synapse لنقل البيانات من مجلد CDM إلى تجمع SQL المخصص ل Synapse.

يمكنك هذا الحل من تحويل البيانات إلى تنسيق جدولي أثناء كتابتها إلى مجلد CDM. يجب مراعاة هذا الحل إذا كنت تريد تحويل بيانات FHIR إلى مخطط مخصص بعد استخراجها من خادم FHIR.

اتبع وثائق OSS للحصول على إرشادات التثبيت والاستخدام.

تحميل البيانات المصدرة إلى Synapse باستخدام T-SQL

في هذا الأسلوب، يمكنك استخدام عملية FHIR $export لنسخ موارد FHIR إلى تخزين كائن ثنائي كبير الحجم Azure Data Lake Gen 2 (ADL Gen 2) بتنسيق NDJSON . بعد ذلك، يمكنك تحميل البيانات من التخزين إلى تجمعات SQL بلا خادم أو مخصصة في Synapse باستخدام T-SQL. يمكنك تحويل هذه الخطوات إلى مسار حركة بيانات قوي باستخدام مسارات Synapse.

تخزين Azure إلى Synapse باستخدام $export.

استخدام $export لنسخ البيانات

التكوين $export في خادم FHIR

تنفذ $export واجهة برمجة تطبيقات Azure ل FHIR العملية المحددة بواسطة مواصفات FHIR لتصدير جميع أو مجموعة فرعية تمت تصفيتها من بيانات FHIR بتنسيق NDJSON . بالإضافة إلى ذلك، فإنه يدعم التصدير غير المحدد إلى بيانات FHIR مجهولة الهوية أثناء التصدير.

لتصدير بيانات FHIR إلى تخزين Azure blob، تحتاج أولا إلى تكوين خادم FHIR الخاص بك لتصدير البيانات إلى حساب التخزين. ستحتاج إلى (1) تمكين الهوية المدارة، (2) انتقل إلى التحكم في الوصول في حساب التخزين وإضافة تعيين الدور، (3) حدد حساب التخزين الخاص بك ل $export. يمكن العثور على المزيد خطوة بخطوة هنا.

يمكنك تكوين الخادم لتصدير البيانات إلى أي نوع من حساب تخزين Azure، ولكننا نوصي بالتصدير إلى ADL Gen 2 للحصول على أفضل محاذاة مع Synapse.

استخدام $export الأمر

بعد تكوين خادم FHIR الخاص بك، يمكنك اتباع الوثائق لتصدير موارد FHIR على مستوى النظام أو المريض أو المجموعة. على سبيل المثال، يمكنك تصدير جميع بيانات FHIR المتعلقة بالمرضى في Group باستخدام الأمر التالي $export ، حيث يمكنك تحديد اسم تخزين كائن ثنائي كبير الحجم ADL Gen 2 في الحقل {{BlobContainer}}:

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

يمكنك أيضا استخدام _type المعلمة في $export الاستدعاء أعلاه لتقييد الموارد التي تريد تصديرها. على سبيل المثال، سيقوم الاستدعاء التالي بتصدير الموارد و و Observation فقطPatientMedicationRequest:

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

لمزيد من المعلومات حول المعلمات المختلفة المدعومة، راجع قسم صفحتنا $export على معلمات الاستعلام.

استخدام Synapse للتحليليات

إنشاء مساحة عمل Synapse

قبل استخدام Synapse، ستحتاج إلى مساحة عمل Synapse. ستقوم بإنشاء خدمة Azure Synapse Analytics على مدخل Microsoft Azure. يمكن العثور على مزيد من الدليل خطوة بخطوة هنا. تحتاج إلى ADLSGEN2 حساب لإنشاء مساحة عمل. ستستخدم مساحة عمل Azure Synapse حساب التخزين هذا لتخزين بيانات مساحة عمل Synapse.

بعد إنشاء مساحة عمل، يمكنك عرض مساحة العمل الخاصة بك في Synapse Studio عن طريق تسجيل الدخول إلى مساحة العمل الخاصة بك على https://web.azuresynapse.net، أو تشغيل Synapse Studio في مدخل Microsoft Azure.

إنشاء خدمة مرتبطة بين تخزين Azure وSynapse

لنسخ بياناتك إلى Synapse، تحتاج إلى إنشاء خدمة مرتبطة تربط حساب Azure Storage الخاص بك، حيث قمت بتصدير بياناتك، باستخدام Synapse. يمكن العثور على مزيد من الإرشادات خطوة بخطوة هنا.

  1. في Synapse Studio، استعرض للوصول إلى علامة التبويب إدارة وضمن الاتصالات الخارجية، حدد الخدمات المرتبطة.
  2. حدد جديد لإضافة خدمة مرتبطة جديدة.
  3. حدد Azure Data Lake Storage Gen2 من القائمة وحدد متابعة.
  4. أدخل بيانات اعتماد المصادقة. قم بتحديدإنشاءعند الانتهاء.

الآن بعد أن أصبح لديك خدمة مرتبطة بين تخزين ADL Gen 2 وSynapse، فأنت مستعد لاستخدام تجمعات Synapse SQL لتحميل بيانات FHIR وتحليلها.

تحديد بين تجمع SQL بلا خادم ومخصص

يوفر Azure Synapse Analytics مجموعتي SQL مختلفتين، تجمع SQL بلا خادم وتجمع SQL مخصص. يمنح تجمع SQL بلا خادم مرونة الاستعلام عن البيانات مباشرة في تخزين الكائن الثنائي كبير الحجم باستخدام نقطة نهاية SQL بلا خادم دون أي توفير للموارد. يحتوي تجمع SQL المخصص على قوة المعالجة للأداء العالي والتزامن، ويوصى به لقدرات تخزين البيانات على نطاق المؤسسة. لمزيد من التفاصيل حول تجمعي SQL، راجع صفحة وثائق Synapse على بنية SQL.

استخدام تجمع SQL بلا خادم

نظرا لأنه بلا خادم، لا توجد بنية أساسية لإعدادها أو مجموعات للحفاظ عليها. يمكنك البدء في الاستعلام عن البيانات من Synapse Studio بمجرد إنشاء مساحة العمل.

على سبيل المثال، يمكن استخدام الاستعلام التالي لتحويل الحقول المحددة من Patient.ndjson إلى بنية جدولية:

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

في الاستعلام أعلاه، تصل الدالة OPENROWSET إلى الملفات في Azure Storage، وتحلل OPENJSON نص JSON وتعيد خصائص إدخال JSON كصفوف وأعمدة. في كل مرة يتم فيها تنفيذ هذا الاستعلام، يقرأ تجمع SQL بلا خادم الملف من تخزين الكائن الثنائي كبير الحجم، ويوزع JSON، ويستخرج الحقول.

يمكنك أيضا تحقيق النتائج بتنسيق Parquet في جدول خارجي للحصول على أداء استعلام أفضل، كما هو موضح أدناه:

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

استخدام تجمع SQL مخصص

يدعم تجمع SQL المخصص الجداول المدارة وذاكرة التخزين المؤقت الهرمية للأداء في الذاكرة. يمكنك استيراد البيانات الضخمة باستخدام استعلامات T-SQL بسيطة، ثم استخدام قوة محرك الاستعلام الموزع لتشغيل التحليلات عالية الأداء.

أبسط وأسرع طريقة لتحميل البيانات من التخزين إلى تجمع SQL مخصص هي استخدام COPY الأمر في T-SQL، والذي يمكنه قراءة ملفات CSV وParquet وORC. كما هو الحال في مثال الاستعلام أدناه، استخدم COPY الأمر لتحميل 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

بمجرد أن يكون لديك صفوف JSON في StagingPatient الجدول أعلاه، يمكنك إنشاء تنسيقات جدولية مختلفة للبيانات باستخدام الدالة OPENJSON وتخزين النتائج في جداول. فيما يلي نموذج استعلام SQL لإنشاء Patient جدول عن طريق استخراج بعض الحقول من 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

الخطوات التالية

في هذه المقالة، تعلمت ثلاث طرق مختلفة لنسخ بيانات FHIR إلى Synapse.

بعد ذلك، يمكنك التعرف على كيفية إلغاء تحديد بيانات FHIR الخاصة بك أثناء تصديرها إلى Synapse من أجل حماية PHI.

FHIR® هي علامة تجارية مسجلة ل HL7 وتستخدم بإذن من HL7.