BigQuery に DICOM メタデータをストリーミングする

このページでは、次のいずれかが発生した場合に、DICOM インスタンスのメタデータを BigQuery テーブルにエクスポートするように DICOM ストアを構成する方法について説明します。

BigQuery テーブルに DICOM メタデータをストリーミングすると、テーブルが DICOM データと同期されるため、最新バージョンの DICOM ストアで複雑なクエリを実行できます。

準備

DICOM ストアを構成する前に、次の作業を完了します。

BigQuery の権限を設定する

DICOM メタデータを BigQuery にストリーミングする前に、Cloud Healthcare Service Agentサービス アカウントに必要な権限を付与する必要があります。詳しくは、DICOM ストアの BigQuery 権限をご覧ください。

DICOM メタデータを BigQuery にエクスポートする方法を学習する

ストリーミングを構成する前に、DICOM メタデータを BigQuery にエクスポートする方法を理解してください。

DICOM ストアの構成

BigQuery へのストリーミングを有効にするには、DICOM ストアで StreamConfig オブジェクトを構成します。StreamConfig オブジェクトで、BigQueryDestination オブジェクトを DICOM インスタンスのメタデータの宛先として完全修飾された BigQuery テーブル URI に設定します。

最大 5 つの BigQuery の宛先をカンマ区切りの JSON オブジェクトとして指定できます。

DICOM ストア内の DICOM インスタンスを削除しても、それらのインスタンスのメタデータが含まれる BigQuery 行は削除されません。

コンソール

DICOM ストアを更新して BigQuery ストリーミングを有効にするには、次の手順に従います。

  1. Google Cloud コンソールで、[データセット] ページに移動します。
    データセットに移動
  2. 編集する DICOM ストアを含むデータセットを選択します。
  3. ストリーミング構成を追加する DICOM ストアを選択します。
  4. [Datastore の詳細] ページの [概要] タブで、[新しいストリーミング構成を追加] をクリックします。
  5. [新しいストリーミング構成] フィールドで、[参照] をクリックします。
    1. [テーブルを選択] ペインで、BigQuery テーブルを選択します。
    2. [選択] をクリックします。
  6. [完了] をクリックします。

REST

以下のサンプルは、DICOM ストアを更新して BigQuery ストリーミングを有効にする方法を示しています。これらのサンプルでは、DICOM ストアと BigQuery テーブルは同じプロジェクトにあります。DICOM メタデータを別のプロジェクトにエクスポートする場合は、DICOM メタデータを別のプロジェクトにエクスポートするをご覧ください。

リクエストのデータを使用する前に、次のように置き換えます。

  • PROJECT_ID: Google Cloud プロジェクトの ID
  • LOCATION: データセットの場所
  • DATASET_ID: DICOM ストアの親データセット
  • DICOM_STORE_ID: DICOM ストアの ID
  • BIGQUERY_DATASET_ID: 既存の BigQuery データセットの名前
  • BIGQUERY_TABLE_ID: BigQuery データセット内のテーブルの一意の名前。命名要件については、テーブルの命名をご覧ください。BigQuery データセットが存在している必要がありますが、Cloud Healthcare API で既存のテーブルの更新や、新しいテーブルの作成ができます。

JSON 本文のリクエスト:

{
  'streamConfigs': [{
     'bigqueryDestination': {
      'tableUri': 'bq://PROJECT_ID.BIGQUERY_DATASET_ID.BIGQUERY_TABLE_ID'
     }
  }]
}

リクエストを送信するには、次のいずれかのオプションを選択します。

curl

リクエスト本文を request.json という名前のファイルに保存します。ターミナルで次のコマンドを実行して、このファイルを現在のディレクトリに作成または上書きします。

cat > request.json << 'EOF'
{
  'streamConfigs': [{
     'bigqueryDestination': {
      'tableUri': 'bq://PROJECT_ID.BIGQUERY_DATASET_ID.BIGQUERY_TABLE_ID'
     }
  }]
}
EOF

その後、次のコマンドを実行して REST リクエストを送信します。

curl -X PATCH \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID?updateMask=streamConfigs"

PowerShell

リクエスト本文を request.json という名前のファイルに保存します。ターミナルで次のコマンドを実行して、このファイルを現在のディレクトリに作成または上書きします。

@'
{
  'streamConfigs': [{
     'bigqueryDestination': {
      'tableUri': 'bq://PROJECT_ID.BIGQUERY_DATASET_ID.BIGQUERY_TABLE_ID'
     }
  }]
}
'@  | Out-File -FilePath request.json -Encoding utf8

その後、次のコマンドを実行して REST リクエストを送信します。

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method PATCH `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID?updateMask=streamConfigs" | Select-Object -Expand Content

API Explorer

リクエスト本文をコピーして、メソッド リファレンス ページを開きます。ページの右側に [API Explorer] パネルが開きます。このツールを操作してリクエストを送信できます。このツールにリクエスト本文を貼り付け、その他の必須フィールドに入力して、[Execute] をクリックします。

次のような JSON レスポンスが返されます。

削除メタデータ

以前の Cloud Healthcare API バージョンでは、DICOM インスタンスが DICOM ストアに挿入されたときにのみ、DICOM インスタンスのメタデータが BigQuery にエクスポートされていました。削除のメタデータを書き込む際に、DICOM メタデータを含む生成テーブルに TypeLastUpdated という名前の 2 つの新しい列が追加されました。

削除メタデータの導入前に存在していたテーブルのメタデータには、これらの列の NULL 値が設定されます。NULL は最小値であり、降順で並べ替えると最後に表示されます。

生成された BigQuery ビュー

DICOM ストアで DICOM インスタンスを挿入または削除すると、構成された BigQuery テーブルが更新されます。

テーブルのビューが存在しない場合、ビューが作成されます。それ以外の場合、ビューが更新されます。

制限事項と追加の動作

エクスポートしたメタデータに、DICOM タグの一部が含まれていない場合があります。存在する場合、欠落しているタグは、宛先の BigQuery テーブルの DroppedTags.TagName という名前の別の列に追加されます。

次のいずれかの理由により、タグが欠落しています。

削除メタデータを既存のテーブルに組み込む

生成されたビューの動作は、ベーステーブルに削除メタデータ機能が導入される前に追加されたメタデータが含まれているかどうかによって異なります。

BigQuery テーブルに、削除メタデータがサポートされる前の DICOM メタデータが含まれていると仮定すると、次のことが生じます。

  1. DICOM インスタンスを DICOM ストアに挿入します。
  2. DICOM ストアから DICOM インスタンスを削除します。
  3. 元の DICOM インスタンスのタグを編集し、変更した DICOM インスタンスを DICOM ストアに挿入します。

BigQuery テーブルでは、削除メタデータがサポートされる前の元のメタデータが含まれていたため、元の DICOM インスタンスとその編集されたバージョンには、同じスタディ、シリーズ、インスタンスの一意の識別子(UID)が付与されています。生成されたビューには、元の DICOM インスタンスまたは最新の DICOM インスタンスのいずれかが含まれている可能性があります。LastUpdated 列がない場合、ビューはどの DICOM インスタンスが新しいかを識別できません。

最新の DICOM インスタンス メタデータを確実にクエリするには、次のいずれかを行います。

  • ビューではなくベーステーブルにクエリを実行します。編集した DICOM インスタンスの更新タグをクエリが検索していることを確認します。
  • DICOM メタデータを含む既存のテーブルを削除し、DICOM メタデータを BigQuery に手動でエクスポートして再作成します。再作成されたテーブルには LastUpdated 列が含まれます。

    このオプションでは、過去のストリーミング メタデータが削除されますが、テーブルには有効な値を持つ LastUpdated 列が含まれています。

DICOM ストリーミング リクエストのトラブルシューティング

BigQuery リクエストに対する DICOM のメタデータのエクスポート中にエラーが発生した場合は、エラーが Cloud Logging に記録されます。詳細については、Cloud Logging でのエラーログの表示をご覧ください。

Google Cloud コンソールでストリーミング DICOM メタデータエラーログをフィルタリングするには、次の手順を行います。

  1. ログ エクスプローラ ページに移動

    [ログ エクスプローラ] に移動

  2. [Query] フィールドに次のクエリを入力します。

    logName="healthcare.googleapis.com%2Fdicom_stream"
    
  3. [クエリを実行] をクリックします。

    エラーログは、[クエリ結果] セクションに表示されます。