次の方法で共有


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

重要

Azure API for FHIR は、2026 年 9 月 30 日に廃止されます。 移行戦略に従って、その日までに Azure Health Data Services FHIR® サービスに切り替えてください。 Azure API for FHIR が廃止されたため、2025 年 4 月 1 日以降、新しいデプロイは許可されません。 Azure Health Data Services FHIR サービス は、お客様が他の Azure サービスへの統合を使用して、FHIR、DICOM、および MedTech サービスを管理できるようにする、進化したバージョンの Azure API for FHIR です。

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

FHIR を使用した Synapse 同期エージェント OSS ツールの使用

Note

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

Synapse Sync Agent への FHIR は、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 documentation に従ってください。

FHIR を CDM パイプライン ジェネレーター OSS ツールに使用する

Note

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

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

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

インストールと使用方法については、OSS documentation に従ってください。

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) ストレージ アカウントのアクセス制御に移動してロールの割り当てを追加し、(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 パラメーターを使用して、エクスポートするリソースを制限することもできます。 たとえば、次の呼び出しでは、 PatientMedicationRequest、および Observation リソースのみがエクスポートされます。

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 ワークスペースでは、このストレージ アカウントを使用して Synapse ワークスペース データを格納します。

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

Azure Storage と Synapse の間のリンクされたサービスの作成

Synapse にデータをコピーするには、Synapse を使用してデータをエクスポートした Azure Storage アカウントに接続するリンクされたサービスを作成する必要があります。 詳細な手順については、こちら 参照してください

  1. Synapse Studio で、 Manage タブを参照します。[ 外部接続で、 リンクされたサービスを選択します。
  2. 新しいリンク サービスを追加するには、[新規] を選択します。
  3. 一覧から Azure Data Lake Storage Gen2 を選択し、 Continue を選択します。
  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 が解析され、フィールドが抽出されます。

次のように、クエリのパフォーマンスを向上させるために、 External Table で 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 リソースからいくつかのフィールドを抽出して、Patient テーブルを作成するサンプル SQL クエリを次に示します。

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 データを識別解除する方法について説明します。

Note

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