Share via


Azure API for FHIR から Azure Synapse Analytics にデータをコピーする

この記事では、Azure API for FHIR から Azure Synapse Analytics にデータをコピーする 3 つの方法について説明します。これは、データ統合、エンタープライズ データ ウェアハウス、ビッグ データ分析をまとめる無制限の分析サービスです。

FHIR to Synapse Sync Agent OSS ツールの使用

注意

FHIR to Synapse Sync Agent は MIT ライセンスでリリースされたオープンソース ツールであり、Azure サービスの Microsoft SLA の対象外です。

FHIR から Synapse Sync Agent は、MIT ライセンスでリリースされた Microsoft OSS プロジェクトです。 これは、FHIR リソース API を使用して FHIR サーバーからデータを抽出し、階層型 Parquet ファイルに変換し、ほぼリアルタイムで Azure Data Lake に書き込む Azure 関数です。 これには、Parquet ファイルを指す Synapse サーバーレス SQL プール に外部テーブルとビューを作成するスクリプトも含まれています。

このソリューションを使用すると、Synapse Studio、SSMS、Power BI などのツールを使用して、FHIR データ全体に対してクエリを実行できます。 Synapse Spark プールから Parquet ファイルに直接アクセスすることもできます。 すべての FHIR データにほぼリアルタイムでアクセスし、カスタム変換をダウンストリーム システムに延期する場合は、このソリューションを検討する必要があります。

インストールと使用手順については、OSS の ドキュメント に従ってください。

FHIR to CDM パイプライン ジェネレーター OSS ツールの使用

Note

FHIR から CDM へのパイプライン ジェネレーターは、MIT ライセンスでリリースされたオープンソース ツールであり、Azure サービスの Microsoft SLA の対象外です。

FHIR から CDM へのパイプライン ジェネレーターは、MIT ライセンスでリリースされた Microsoft OSS プロジェクトです。 これは、$export API を使用して FHIR サーバーからデータのスナップショットをコピーし、csv 形式に変換し、Azure Data Lake Storage Gen 2 の CDM フォルダーに書き込むための ADF パイプラインを生成するツールです。 このツールには、FHIR リソースとフィールドをテーブルに投影してフラット化する手順を含む、ユーザーが作成した構成ファイルが必要です。 Synapse ワークスペースでダウンストリーム パイプラインを作成する手順に従って、CDM フォルダーから Synapse 専用 SQL プールにデータを移動することもできます。

このソリューションを使用すると、CDM フォルダーに書き込まれるデータを表形式に変換できます。 FHIR サーバーから抽出した後で FHIR データをカスタム スキーマに変換する場合は、このソリューションを検討する必要があります。

インストールと使用手順については、OSS の ドキュメント に従ってください。

T-SQL を使用してエクスポートされたデータを Synapse に読み込む

この方法では、FHIR $export 操作を使用して、FHIR リソースを形式で Azure Data Lake Gen 2 (ADL Gen 2) BLOB ストレージNDJSON コピーします。 その後、T-SQL を使用して、ストレージから Synapse の サーバーレスまたは専用 SQL プール にデータを読み込みます。 Synapse パイプラインを使用して、これらの手順を堅牢なデータ移動パイプラインに変換できます。

$exportを使用して Azure Storage から Synapse に。

を使用して $export データをコピーする

FHIR サーバーでの構成$export

Azure API for FHIR では、FHIR 仕様で定義された $export 操作を実装して、FHIR データのすべてまたはフィルター処理されたサブセットを NDJSON 形式でエクスポートします。 さらに、エクスポート中に FHIR データを匿名化するために、匿名化エクスポートがサポートされます。

FHIR データを Azure Blob ストレージにエクスポートするには、まず、データをストレージ アカウントにエクスポートするように FHIR サーバーを構成する必要があります。 (1) マネージド ID を有効にする必要があります。(2) ストレージ アカウントのAccess Controlに移動し、ロールの割り当てを追加し、(3) のストレージ アカウントを 選択する$export必要があります。 詳細については、 こちらを参照してください

任意の種類の Azure Storage アカウントにデータをエクスポートするようにサーバーを構成できますが、Synapse との最適な調整を行う場合は、ADL Gen 2 にエクスポートすることをお勧めします。

$export コマンドの使用

FHIR サーバーを構成したら、ドキュメントに従って、System、Patient、または Group レベルで FHIR リソースをエクスポートできます。 たとえば、次の $export コマンドを使用して、Group 内の患者に関連付けられているすべての FHIR データをエクスポートできます。ここでは、 フィールド {{BlobContainer}} に ADL Gen 2 BLOB ストレージ名を指定します。

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

上記の呼び出しで パラメーターを$export使用_typeして、エクスポートするリソースを制限することもできます。 たとえば、次の呼び出しでは PatientMedicationRequestObservation リソースだけがエクスポートされます。

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

サポートされているさまざまなパラメーターの詳細については、クエリ パラメーターに関する $export ページ セクションを参照してください。

Synapse for Analytics の使用

Synapse ワークスペースの作成

Synapse を使用する前に、Synapse ワークスペースが必要です。 Azure portalでAzure Synapse Analytics サービスを作成します。 より順を追ったガイドについては、こちらを確認してください。 ワークスペースを作成するには、ADLSGEN2 アカウントが必要です。 Azure Synapse ワークスペースでは、このストレージ アカウントを使用して、ワークスペース データを格納します。

ワークスペースを作成したら、 でワークスペースにサインインするか、Azure portalでSynapse Studioを起動することで、Synapse Studioでワークスペースhttps://web.azuresynapse.netを表示できます。

Azure Storage と 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 プールという 2 つの異なる SQL プールが提供されています。 サーバーレス SQL プールを使用すると、リソースをプロビジョニングすることなく、サーバーレス SQL エンドポイントを使用して BLOB ストレージ内のデータに対して直接クエリを実行できます。 専用 SQL プールは、ハイ パフォーマンスとコンカレンシーのための処理能力を備え、エンタープライズ規模のデータ ウェアハウス機能に推奨されます。 2 つの SQL プールの詳細については SQL アーキテクチャに関する Synapse のドキュメント ページをご覧ください。

サーバーレス 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 プールでは BLOB ストレージからファイルが読み取られ、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 プールにデータを読み込む最も簡単で最速の方法は、CSV、Parquet、ORC ファイルを読み取る COPY コマンドを T-SQL で使用することです。 次のクエリ例と同様に、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

上記の StagingPatient 表に JSON 行を作成したら、OPENJSON 関数を使用し、結果をテーブルに格納して、さまざまな表形式のデータを作成できます。 リソースからいくつかのフィールドを抽出してテーブルを Patient 作成するサンプル SQL クエリを次に 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 にコピーする 3 つの異なる方法について説明しました。

次に、PHI を保護するために、FHIR データを Synapse にエクスポートするときに FHIR データを識別解除する方法について説明します。

FHIR® は HL7 の登録商標であり、HL7 の許可を得て使用しています。