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 オブジェクトで、DICOM インスタンスのメタデータの宛先として、完全修飾された BigQuery テーブル URI に BigQueryDestination オブジェクトを設定します。

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

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