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

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

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

準備

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

BigQuery の権限を設定する

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

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

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

DICOM ストアを構成する

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

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

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

Console

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 という名前の別の列に追加されます。

タグが欠落する理由は次のいずれかです。

  • DICOM タグは、除外される VRに記載されているサポートされていない VR です。
  • DICOM タグが約 1 MB を超えてます。
  • 宛先 BigQuery テーブルの列数が列の最大数を超えています。 DICOM メタデータから BigQuery テーブルへのエクスポートが列の上限を超えると、既存の列に一致しない DICOM タグが DroppedTags.Name 列に追加されます。DroppedTags 列を追加できない場合、DICOM タグは通知なしで削除され、警告ログが生成されます。詳細については、ログ表示のための DICOM ストリーミング リクエストのトラブルシューティングをご覧ください。

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

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

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. [クエリを実行] をクリックします。

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