BigQuery への DICOM メタデータのエクスポート

このページでは、探索と分析のために DICOM メタデータを BigQuery にエクスポートする方法について説明します。DICOM メタデータをエクスポートするときに作成される BigQuery スキーマについては、BigQuery DICOM スキーマについてをご覧ください。

BigQuery の権限を設定する

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

BigQuery の宛先の設定

BigQuery の宛先を設定するときは、次のように完全修飾された URI を使用します。
bq://PROJECT_ID.BIGQUERY_DATASET_ID.BIGQUERY_TABLE_ID
エクスポート オペレーションの動作は、次の事項に応じて異なります。
  • 宛先テーブルがすでに存在するかどうか
  • force フィールド(API を使用)または --overwrite-table フラグ(gcloud コマンドライン ツールを使用)を設定したかどうか
  • writeDisposition enum に値を設定しているかどうか。writeDisposition enumを使用する場合は、force フィールドを設定しないでください。
それぞれの場合の動作は次のようになります。
  • 宛先テーブルがすでに存在し、forcetrue に設定されているか、--overwrite-table フラグが指定されている場合は、エクスポート オペレーションによって既存のテーブルが上書きされます。
  • 宛先テーブルがすでに存在し、forcefalse に設定されているか、--overwrite-table フラグが指定されていない場合は、エラーが発生します。
  • 宛先テーブルがまだ存在しない場合は、force フィールドまたは --overwrite-table フラグを指定しているかに関係なく、新しいテーブルが作成されます。
  • writeDisposition の動作については、そのドキュメントをご覧ください。writeDisposition 列挙型は、force を使用する場合のオプションと同様の動作を行います。ただし、宛先テーブルがすでに存在していて空の場合、エクスポート オペレーションはエラーを返すのではなく完了します。

DICOM メタデータのエクスポート

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

Console

DICOM メタデータを BigQuery にエクスポートするには、次の手順を行います。

  1. Cloud Console で、[データセット] ページに移動します。
    [データセット] ページに移動
  2. DICOM メタデータのエクスポート元の DICOM ストアを含むデータセットをクリックします。
  3. データストアのリストで、DICOM ストアの [アクション] リストから [エクスポート] を選択します。
  4. 表示される [DICOM ストアのエクスポート] ページで、[BigQuery テーブル] を選択します。
  5. [プロジェクト] リストで、BigQuery プロジェクトを選択します。
  6. [データセット ID] リストでデータセットを選択します。
  7. [テーブル名] フィールドに新しいテーブル名を入力します。
    宛先テーブルが有効であることを確認するため、BigQuery によって各選択項目がチェックされます。
  8. [エクスポート] をクリックして、DICOM メタデータを BigQuery の定義済み宛先にエクスポートします。
  9. オペレーションのステータスを追跡するには、[オペレーション] タブをクリックします。オペレーションが完了すると、次の状況が表示されます。
    • [長時間実行オペレーションのステータス] セクションでは、[OK] の見出しの下に、緑色のチェックマークが表示されます。
    • [概要] セクションでは、オペレーション ID と同じ行に緑色のチェックマークと [OK] インジケーターが表示されます。
    エラーが発生した場合は、[アクション] をクリックしてから、[Cloud Logging で詳細を表示] をクリックします。

gcloud

DICOM メタデータを BigQuery にエクスポートするには、gcloud healthcare dicom-stores export bq コマンドを使用します。以下の情報を指定します。

  • 親データセットの名前。
  • DICOM ストアの名前
  • 既存の BigQuery データセットの名前
  • BigQuery エクスポート テーブルの名前。名前には、英字(大文字または小文字)、数字、アンダースコアのみを使用できます。エクスポート オペレーションの動作をカスタマイズする方法については、BigQuery の宛先の設定をご覧ください。

次のサンプルは、gcloud dicom-stores export bq コマンドを示しています。

gcloud healthcare dicom-stores export bq DICOM_STORE_ID \
  --dataset=DATASET_ID \
  --location=LOCATION \
  --bq-table=bq://PROJECT_ID.BIGQUERY_DATASET_ID.BIGQUERY_TABLE_ID \
  [--overwrite-table]

このコマンドを実行すると、オペレーション名が返されます。

name: projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID

オペレーションの詳細を表示するには、レスポンスの OPERATION_ID を指定して gcloud healthcare operations describe コマンドを実行します。

gcloud healthcare operations describe OPERATION_ID \
  --dataset=DATASET_ID

オペレーションが終了すると、レスポンスに done: true が含まれます。

done: true
metadata:
  '@type': type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata
  apiMethodName: google.cloud.healthcare.v1.dicom.DicomService.ExportDicomData
  createTime: 'CREATE_TIME'
  endTime: 'END_TIME'
name: projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID
response:
  '@type': '...'

API

DICOM メタデータを BigQuery にエクスポートするには、projects.locations.datasets.dicomStores.export メソッドを使用します。

curl

DICOM メタデータをエクスポートするには、POST リクエストを行い、次の情報を指定します。

  • 親データセットの名前と場所
  • DICOM ストアの名前
  • 既存の BigQuery データセットの名前
  • BigQuery エクスポート テーブルの名前。名前には、英字(大文字または小文字)、数字、アンダースコアのみを使用できます。エクスポート オペレーションの動作をカスタマイズする方法については、BigQuery の宛先の設定をご覧ください。
  • writeDisposition 列挙型の次のいずれかの値。
    • WRITE_EMPTY: 宛先テーブルが空の場合にのみ、データをエクスポートします。これがデフォルトです。
    • WRITE_TRUNCATE: インスタンスを書き込む前に、テーブル内の既存のデータをすべて削除します。
    • WRITE_APPEND: 既存のテーブルにデータを追加します。

次のサンプルは、curlを使用した POST リクエストを示しています。

curl -X POST \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    --data "{
      'bigqueryDestination': {
        'tableUri': 'bq://PROJECT_ID.BIGQUERY_DATASET_ID.BIGQUERY_TABLE_ID'
      },
      'writeDisposition': '{WRITE_EMPTY|WRITE_TRUNCATE|WRITE_APPEND}'
    }" "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID:export"

リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"
}

レスポンスにはオペレーション名が含まれています。オペレーションのステータスを追跡するには、オペレーションの get メソッドを使用します。

curl -X GET \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"

リクエストが成功すると、サーバーはオペレーションのステータスを含む JSON 形式のレスポンスを返します。

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata",
    "apiMethodName": "google.cloud.healthcare.v1.dicom.DicomService.ExportDicomData",
    "createTime": "CREATE_TIME",
    "endTime": "END_TIME",
    "logsUrl": "https://console.cloud.google.com/logs/viewer/CLOUD_LOGGING_URL"
  },
  "done": true,
  "response": {
    "@type": "..."
  }
}

PowerShell

DICOM メタデータをエクスポートするには、POST リクエストを行い、次の情報を指定します。

  • 親データセットの名前と場所
  • DICOM ストアの名前
  • 既存の BigQuery データセットの名前
  • BigQuery エクスポート テーブルの名前。名前には、英字(大文字または小文字)、数字、アンダースコアのみを使用できます。エクスポート オペレーションの動作をカスタマイズする方法については、BigQuery の宛先の設定をご覧ください。
  • writeDisposition 列挙型の次のいずれかの値。
    • WRITE_EMPTY: 宛先テーブルが空の場合にのみ、データをエクスポートします。これがデフォルトです。
    • WRITE_TRUNCATE: インスタンスを書き込む前に、テーブル内の既存のデータをすべて削除します。
    • WRITE_APPEND: 既存のテーブルにデータを追加します。

次のサンプルは、Windows PowerShell を使用した POST リクエストを示しています。

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

Invoke-WebRequest `
  -Method Post `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Body "{
    'bigqueryDestination': {
      'tableUri': 'bq://PROJECT_ID.BIGQUERY_DATASET_ID.BIGQUERY_TABLE_ID'
    },
    'writeDisposition': '{WRITE_EMPTY|WRITE_TRUNCATE|WRITE_APPEND}'
  }" `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID:export" | Select-Object -Expand Content

リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"
}

レスポンスにはオペレーション名が含まれています。オペレーションのステータスを追跡するには、オペレーションの get メソッドを使用します。

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

Invoke-WebRequest `
  -Method Get `
  -Headers $headers `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand Content

リクエストが成功すると、サーバーはオペレーションのステータスを含む JSON 形式のレスポンスを返します。

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata",
    "apiMethodName": "google.cloud.healthcare.v1.dicom.DicomService.ExportDicomData",
    "createTime": "CREATE_TIME",
    "endTime": "END_TIME",
    "logsUrl": "https://console.cloud.google.com/logs/viewer/CLOUD_LOGGING_URL"
  },
  "done": true,
  "response": {
    "@type": "..."
  }
}

別のプロジェクトへの DICOM メタデータのエクスポート

あるプロジェクトから別のプロジェクトに DICOM メタデータをエクスポートするには、あて先のプロジェクトで IAM 権限を設定する方法について確認するために、まず DICOM メタデータを別のプロジェクトの権限にエクスポートするをご覧ください。

gcloud

あるプロジェクトの DICOM ストアから別のプロジェクトの BigQuery テーブルに DICOM メタデータをエクスポートするには、gcloud healthcare dicom-stores export bq コマンドを使用します。以下の情報を指定します。

  • 親データセットの名前。
  • DICOM ストアの名前
  • エクスポート先のプロジェクト
  • エクスポート先プロジェクト内の既存の BigQuery データセットの名前
  • BigQuery エクスポート テーブルの名前。名前には、英字(大文字または小文字)、数字、アンダースコアのみを使用できます。Cloud Healthcare API が、どのように BigQuery テーブルにデータを書き込むかについては、BigQuery の宛先の設定をご覧ください。

次のサンプルは、gcloud dicom-stores export bq コマンドを示しています。

gcloud healthcare dicom-stores export bq DICOM_STORE_ID \
  --dataset=DATASET_ID \
  --location=LOCATION \
  --bq-table=bq://DESTINATION_PROJECT_ID.BIGQUERY_DATASET_ID.BIGQUERY_TABLE_ID \
  [--overwrite-table]

コマンドラインにオペレーション ID が表示され、オペレーションが完了すると done が表示されます。

Request issued for: [DICOM_STORE_ID]
Waiting for operation [projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/OPERATION_ID] to complete...done.
name: projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID

オペレーションの詳細を表示するには、レスポンスの OPERATION_ID を指定して gcloud healthcare operations describe コマンドを実行します。

gcloud healthcare operations describe OPERATION_ID \
  --dataset=DATASET_ID

オペレーションが終了すると、レスポンスに done: true が含まれます。

done: true
metadata:
  '@type': type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata
  apiMethodName: google.cloud.healthcare.v1.dicom.DicomService.ExportDicomData
  createTime: 'CREATE_TIME'
  endTime: 'END_TIME'
name: projects/SOURCE_PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID
response:
  '@type': '...'

API

DICOM メタデータを BigQuery にエクスポートするには、projects.locations.datasets.dicomStores.export メソッドを使用します。

curl

あるプロジェクトの DICOM ストアから別のプロジェクトの BigQuery テーブルに DICOM メタデータをエクスポートするには、POST リクエストを行い、次の情報を指定します。

  • 元のプロジェクト
  • 親データセットの名前と場所
  • DICOM ストアの名前
  • エクスポート先のプロジェクト
  • エクスポート先プロジェクト内の既存の BigQuery データセットの名前
  • BigQuery エクスポート テーブルの名前。名前には、英字(大文字または小文字)、数字、アンダースコアのみを使用できます。Cloud Healthcare API が、どのように BigQuery テーブルにデータを書き込むかについては、BigQuery の宛先の設定をご覧ください。
  • writeDisposition 列挙型の次のいずれかの値。
    • WRITE_EMPTY: 宛先テーブルが空の場合にのみ、データをエクスポートします。これがデフォルトです。
    • WRITE_TRUNCATE: インスタンスを書き込む前に、テーブル内の既存のデータをすべて削除します。
    • WRITE_APPEND: 既存のテーブルにデータを追加します。

次のサンプルは、curlを使用した POST リクエストを示しています。

curl -X POST \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    --data "{
      'bigqueryDestination': {
        'tableUri': 'bq://DESTINATION_PROJECT_ID.BIGQUERY_DATASET_ID.BIGQUERY_TABLE_ID'
      },
      'writeDisposition': '{WRITE_EMPTY|WRITE_TRUNCATE|WRITE_APPEND}'
    }" "https://healthcare.googleapis.com/v1/projects/SOURCE_PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID:export"

リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。

{
  "name": "projects/SOURCE_PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"
}

レスポンスにはオペレーション名が含まれています。オペレーションのステータスを追跡するには、オペレーションの get メソッドを使用します。

curl -X GET \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    "https://healthcare.googleapis.com/v1/projects/SOURCE_PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"

リクエストが成功すると、サーバーはオペレーションのステータスを含む JSON 形式のレスポンスを返します。

{
  "name": "projects/SOURCE_PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata",
    "apiMethodName": "google.cloud.healthcare.v1.dicom.DicomService.ExportDicomData",
    "createTime": "CREATE_TIME",
    "endTime": "END_TIME",
    "logsUrl": "https://console.cloud.google.com/logs/viewer/CLOUD_LOGGING_URL"
  },
  "done": true,
  "response": {
    "@type": "..."
  }
}

PowerShell

あるプロジェクトの DICOM ストアから別のプロジェクトの BigQuery テーブルに DICOM メタデータをエクスポートするには、POST リクエストを行い、次の情報を指定します。

  • 元のプロジェクト
  • 親データセットの名前と場所
  • DICOM ストアの名前
  • エクスポート先のプロジェクト
  • エクスポート先プロジェクト内の既存の BigQuery データセットの名前
  • BigQuery エクスポート テーブルの名前。名前には、英字(大文字または小文字)、数字、アンダースコアのみを使用できます。Cloud Healthcare API が、どのように BigQuery テーブルにデータを書き込むかについては、BigQuery の宛先の設定をご覧ください。
  • writeDisposition 列挙型の次のいずれかの値。
    • WRITE_EMPTY: 宛先テーブルが空の場合にのみ、データをエクスポートします。これがデフォルトです。
    • WRITE_TRUNCATE: インスタンスを書き込む前に、テーブル内の既存のデータをすべて削除します。
    • WRITE_APPEND: 既存のテーブルにデータを追加します。

次のサンプルは、Windows PowerShell を使用した POST リクエストを示しています。

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

Invoke-WebRequest `
  -Method Post `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Body "{
    'bigqueryDestination': {
      'tableUri': 'bq://DESTINATION_PROJECT_ID.BIGQUERY_DATASET_ID.BIGQUERY_TABLE_ID'
    },
    'writeDisposition': '{WRITE_EMPTY|WRITE_TRUNCATE|WRITE_APPEND}'
  }" `
  -Uri "https://healthcare.googleapis.com/v1/projects/SOURCE_PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID:export" | Select-Object -Expand Content

リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。

{
  "name": "projects/SOURCE_PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"
}

レスポンスにはオペレーション名が含まれています。オペレーションのステータスを追跡するには、オペレーションの get メソッドを使用します。

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

Invoke-WebRequest `
  -Method Get `
  -Headers $headers `
  -Uri "https://healthcare.googleapis.com/v1/projects/SOURCE_PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand Content

リクエストが成功すると、サーバーはオペレーションのステータスを含む JSON 形式のレスポンスを返します。

{
  "name": "projects/SOURCE_PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata",
    "apiMethodName": "google.cloud.healthcare.v1.dicom.DicomService.ExportDicomData",
    "createTime": "CREATE_TIME",
    "endTime": "END_TIME",
    "logsUrl": "https://console.cloud.google.com/logs/viewer/CLOUD_LOGGING_URL"
  },
  "done": true,
  "response": {
    "@type": "..."
  }
}

フィルタを使用した DICOM メタデータのエクスポート

デフォルトでは、DICOM ファイルを Cloud Storage にエクスポートする際は、指定した DICOM ストア内のすべての DICOM ファイルがエクスポートされます。同様に、DICOM メタデータを BigQuery にエクスポートする際は、指定した DICOM ストア内のすべての DICOM データのメタデータがエクスポートされます。

フィルタを使用して、DICOM データまたはメタデータのサブセットをエクスポートできます。フィルタはフィルタ ファイルで定義します。

フィルタ ファイルを構成する

フィルタ ファイルでは、Cloud Storage または BigQuery にどの DICOM ファイルをエクスポートするかを定義します。フィルタ ファイルは次のレベルで構成できます。

  • スタディレベル
  • シリーズ レベル
  • インスタンス レベル

フィルタ ファイルは、エクスポートするスタディ、シリーズ、インスタンスをそれぞれ定義する行を含む、複数の行で構成されます。各行には /studies/STUDY_UID[/series/SERIES_UID[/instances/INSTANCE_UID]] 形式を使用します。

フィルタ ファイルで渡す際に、フィルタ ファイルにスタディ、シリーズ、またはインスタンスが指定されていない場合、そのスタディ、シリーズ、インスタンスはエクスポートされません。

パスの /studies/STUDY_UID の部分のみが必須です。/studies/STUDY_UID を指定してスタディ全体をエクスポートするか、/studies/STUDY_UID/series/SERIES_UID を指定してシリーズ全体をエクスポートすることが可能です。

次のフィルタ ファイルについて考えてみましょう。このフィルタ ファイルを使用すると、1 つのスタディ、2 つのシリーズ、3 つの個別のインスタンスがエクスポートされます。

/studies/1.123.456.789
/studies/1.666.333.111/series/123.456
/studies/1.666.333.111/series/567.890
/studies/1.888.999.222/series/123.456/instances/111
/studies/1.888.999.222/series/123.456/instances/222
/studies/1.888.999.222/series/123.456/instances/333

BigQuery を使用したフィルタ ファイルの作成

通常、フィルタ ファイルを作成するには、まず DICOM ストアから BigQuery にメタデータをエクスポートします。これにより、BigQuery を使用して、DICOM ストア内の DICOM データのスタディ UID、シリーズ UID、インスタンス UID を表示できます。次に、以下の手順を行います。

  1. 目的のスタディ UID、シリーズ UID、インスタンス UID にクエリを実行します。たとえば、DICOM メタデータを BigQuery にエクスポートした後、次のクエリを実行してスタディ UID、シリーズ UID、インスタンス UID をフィルタ ファイル要件と互換性のある形式に連結できます。
    SELECT CONCAT
        ('/studies/', StudyInstanceUID, '/series/', SeriesInstanceUID, '/instances/', SOPInstanceUID)
    FROM
        [PROJECT_ID:BIGQUERY_DATASET.BIGQUERY_TABLE]
    
  2. クエリが大規模な結果セットを返す場合、クエリ結果を BigQuery の宛先テーブルに保存することで、新しいテーブルを実体化できます。
  3. クエリ結果を宛先テーブルに保存する場合は、宛先テーブルの内容をファイルに保存し、Cloud Storage にエクスポートできます。この手順については、テーブルデータのエクスポートをご覧ください。エクスポートされるファイルはフィルタ ファイルです。エクスポート オペレーションでフィルタを指定するときは、Cloud Storage 内のフィルタ ファイルの場所を使用します。

フィルタ ファイルを手動で作成する

カスタム コンテンツを含むフィルタ ファイルを作成し、Cloud Storage バケットにアップロードできます。エクスポート オペレーションでフィルタを指定するときは、Cloud Storage 内のフィルタ ファイルの場所を使用します。次のサンプルは、gsutil cp コマンドを使用してフィルタ ファイルを Cloud Storage バケットにアップロードする方法を示しています。
gsutil cp PATH/TO/FILTER_FILE gs://BUCKET/DIRECTORY

フィルタ ファイルで渡す

フィルタ ファイルを作成したら、DICOM エクスポート オペレーションを呼び出し、REST API を使用してフィルタ ファイルで渡します。以下のサンプルでは、フィルタを使用して DICOM メタデータをエクスポートする方法が示されます。

gcloud

フィルタを使用して DICOM メタデータを BigQuery にエクスポートするには、gcloud beta healthcare dicom-stores export bq コマンドを使用します。

gcloud beta healthcare dicom-stores export bq DICOM_STORE_ID \
  --dataset=DATASET_ID \
  --location=LOCATION \
  --bq-table=bq://PROJECT_ID.BIGQUERY_DATASET_ID.BIGQUERY_TABLE_ID \
  --filter-config-gcs-uri=gs://BUCKET/DIRECTORY/FILTER_FILE

以下を置き換えます。

  • DICOM_STORE_ID: DICOM ストアの ID
  • DATASET_ID: DICOM ストアの親データセットの名前
  • LOCATION: DICOM ストアの親データセットの場所
  • PROJECT_ID: BigQuery データセットを含むプロジェクトの ID
  • BIGQUERY_DATASET_ID: BigQuery データセットの名前
  • BIGQUERY_TABLE_ID: BigQuery エクスポート テーブルの名前。名前には、英字(大文字または小文字)、数字、アンダースコアのみを使用できます。Cloud Healthcare API が、どのように BigQuery テーブルにデータを書き込むかについては、BigQuery の宛先の設定をご覧ください。
  • BUCKET/DIRECTORY/FILTER_FILE: Cloud Storage バケット内のフィルタ ファイルの場所

次のような出力が表示されます。

Request issued for: [DICOM_STORE_ID]
Waiting for operation [projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID] to complete...done.
name: projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID

オペレーションのステータスを表示するには、レスポンスの OPERATION_ID を指定して gcloud healthcare operations describe コマンドを実行します。

gcloud healthcare operations describe OPERATION_ID \
  --location=LOCATION \
  --dataset=DATASET_ID

以下を置き換えます。

  • OPERATION_ID: 前のレスポンスから返された ID 番号
  • DATASET_ID: DICOM ストアの親データセットの名前
  • LOCATION: DICOM ストアの親データセットの場所

次のような出力が表示されます。

done: true
metadata:
  '@type': type.googleapis.com/google.cloud.healthcare.v1beta1.OperationMetadata
  apiMethodName: google.cloud.healthcare.v1beta1.dicom.DicomService.ExportDicomData
  createTime: 'CREATE_TIME'
  endTime: 'END_TIME',
  logsUrl: 'https://console.cloud.google.com/logs/viewer/CLOUD_LOGGING_URL'
name: projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID
response:
  '@type': '...'

API

フィルタを使用して DICOM メタデータを BigQuery にエクスポートするには、projects.locations.datasets.dicomStores.export メソッドを使用します。

curl

フィルタを使用して DICOM メタデータをエクスポートするには、POST リクエストを行い、次の情報を指定します。

  • 親データセットの名前と場所
  • DICOM ストアの名前
  • Cloud Storage バケット内のフィルタ ファイルの場所
  • BigQuery エクスポート テーブルの名前。名前には、英字(大文字または小文字)、数字、アンダースコアのみを使用できます。Cloud Healthcare API が、どのように BigQuery テーブルにデータを書き込むかについては、BigQuery の宛先の設定をご覧ください。
  • writeDisposition 列挙型の次のいずれかの値。
    • WRITE_EMPTY: 宛先テーブルが空の場合にのみ、データをエクスポートします。これがデフォルトです。
    • WRITE_TRUNCATE: インスタンスを書き込む前に、テーブル内の既存のデータをすべて削除します。
    • WRITE_APPEND: 既存のテーブルにデータを追加します。

次のサンプルは、curlを使用した POST リクエストを示しています。

curl -X POST \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    --data "{
      'bigqueryDestination': {
        'tableUri': 'bq://PROJECT_ID.BIGQUERY_DATASET_ID.BIGQUERY_TABLE_ID'
      },
      'filterConfig': {
        'resourcePathsGcsUri': 'gs://BUCKET/DIRECTORY/FILTER_FILE'
      },
      'writeDisposition': '{WRITE_EMPTY|WRITE_TRUNCATE|WRITE_APPEND}'
    }" "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID:export"

リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"
}

レスポンスにはオペレーション名が含まれています。オペレーションのステータスを追跡するには、オペレーションの get メソッドを使用します。

curl -X GET \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"

リクエストが成功すると、サーバーはオペレーションのステータスを含む JSON 形式のレスポンスを返します。

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.healthcare.v1beta1.OperationMetadata",
    "apiMethodName": "google.cloud.healthcare.v1beta1.dicom.DicomService.ExportDicomData",
    "createTime": "CREATE_TIME",
    "endTime": "END_TIME",
    "logsUrl": "https://console.cloud.google.com/logs/viewer/CLOUD_LOGGING_URL"
  },
  "done": true,
  "response": {
    "@type": "..."
  }
}

PowerShell

フィルタを使用して DICOM メタデータをエクスポートするには、POST リクエストを行い、次の情報を指定します。

  • 親データセットの名前と場所
  • DICOM ストアの名前
  • Cloud Storage バケット内のフィルタ ファイルの場所
  • BigQuery エクスポート テーブルの名前。名前には、英字(大文字または小文字)、数字、アンダースコアのみを使用できます。Cloud Healthcare API が、どのように BigQuery テーブルにデータを書き込むかについては、BigQuery の宛先の設定をご覧ください。
  • writeDisposition 列挙型の次のいずれかの値。
    • WRITE_EMPTY: 宛先テーブルが空の場合にのみ、データをエクスポートします。これがデフォルトです。
    • WRITE_TRUNCATE: インスタンスを書き込む前に、テーブル内の既存のデータをすべて削除します。
    • WRITE_APPEND: 既存のテーブルにデータを追加します。

次のサンプルは、Windows PowerShell を使用した POST リクエストを示しています。

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

Invoke-WebRequest `
  -Method Post `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Body "{
    'bigqueryDestination': {
      'tableUri': 'bq://PROJECT_ID.BIGQUERY_DATASET_ID.BIGQUERY_TABLE_ID'
    },
    'filterConfig': {
      'resourcePathsGcsUri': 'gs://BUCKET/DIRECTORY/FILTER_FILE'
    },
    'writeDisposition': '{WRITE_EMPTY|WRITE_TRUNCATE|WRITE_APPEND}'
  }" `
  -Uri "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID:export" | Select-Object -Expand Content

リクエストが成功すると、サーバーは JSON 形式のレスポンスを返します。

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"
}

レスポンスにはオペレーション名が含まれています。オペレーションのステータスを追跡するには、オペレーションの get メソッドを使用します。

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

Invoke-WebRequest `
  -Method Get `
  -Headers $headers `
  -Uri "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand Content

リクエストが成功すると、サーバーはオペレーションのステータスを含む JSON 形式のレスポンスを返します。

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.healthcare.v1beta1.OperationMetadata",
    "apiMethodName": "google.cloud.healthcare.v1beta1.dicom.DicomService.ExportDicomData",
    "createTime": "CREATE_TIME",
    "endTime": "END_TIME",
    "logsUrl": "https://console.cloud.google.com/logs/viewer/CLOUD_LOGGING_URL"
  },
  "done": true,
  "response": {
    "@type": "..."
  }
}

BigQuery で DICOM データのクエリと分析を行う

DICOM メタデータを BigQuery にエクスポートした後、サンプルクエリを実行してメタデータの詳細を取得できます。次のサンプルは、一般的なユースケースに対してクエリを実行する方法を示しています。

メタデータを横断する検索

Picture Archiver and Communication System(PACS)や Vendor Neutral Archive(VNA)など、他のシステムでは検索が難しい大量のメタデータを検索するとします。次のクエリは、患者の PatientID 値をクエリし、DICOMweb パスを使用して特定の画像インスタンスを取得する方法を示しています。サンプルでは、NIH 胸部 X 線データセットchc-nih-chest-xray.nih_chest_xray.nih_chest_xray テーブルを使用します。

#standardSQL
SELECT CONCAT('/dicomWeb/studies/', StudyInstanceUID, '/series/', SeriesInstanceUID, '/instances/', SOPInstanceUID) as DICOMwebPath
FROM `chc-nih-chest-xray.nih_chest_xray.nih_chest_xray`
WHERE PatientID = '19045';

このクエリにより、患者に関連付けられたスタディが返されます。次のレスポンスでは、JSON 形式を使用しています。

[
  {
    "DICOMwebPath": "/dicomWeb/studies/1.3.6.1.4.1.11129.5.5.169629990647803559688464142879817265366193/series/1.3.6.1.4.1.11129.5.5.141990184899344268273968625887396932057061/instances/1.3.6.1.4.1.11129.5.5.162448513493627342869165322873398445570578"
  },
  {
    "DICOMwebPath": "/dicomWeb/studies/1.3.6.1.4.1.11129.5.5.114160532832901355654444239008681456919023/series/1.3.6.1.4.1.11129.5.5.178361108150351071908200174504411112440700/instances/1.3.6.1.4.1.11129.5.5.145959606905209488520697484018030440952428"
  },
  {
    "DICOMwebPath": "/dicomWeb/studies/1.3.6.1.4.1.11129.5.5.177801331756958922168115732894519725643007/series/1.3.6.1.4.1.11129.5.5.134128639331055702643451404466208677561042/instances/1.3.6.1.4.1.11129.5.5.148534317486838863760908141408862094292875"
  },
  {
    "DICOMwebPath": "/dicomWeb/studies/1.3.6.1.4.1.11129.5.5.119570482687494886334491471870663517807852/series/1.3.6.1.4.1.11129.5.5.148050768676645373034111775531663876425927/instances/1.3.6.1.4.1.11129.5.5.111153708388576066195389700503245704293300"
  },
  {
    "DICOMwebPath": "/dicomWeb/studies/1.3.6.1.4.1.11129.5.5.144704399171290022427247626928443085419319/series/1.3.6.1.4.1.11129.5.5.190285793344339390593165731988543561416633/instances/1.3.6.1.4.1.11129.5.5.110245902713751842026864359179754889505217"
  },
  {
    "DICOMwebPath": "/dicomWeb/studies/1.3.6.1.4.1.11129.5.5.172276126220388966649736649950361623806435/series/1.3.6.1.4.1.11129.5.5.171512371498506519035489729484464872160452/instances/1.3.6.1.4.1.11129.5.5.111721417729733087384317002785068394901165"
  }
]

最新スタディのクエリ

PACS 読み取り作業リストに、データセットの最新スタディを入力するとします。

次のクエリは、最新のスタディを、インスタンス数や周囲のメタデータとともに取得して表示する方法を示しています。このサンプルは、TCIA LungCT-Diagnosis データセットchc-tcia:lungct_diagnosis.lungct_diagnosis テーブルを使用します。

#standardSQL
SELECT MIN(CONCAT(StudyDate, ' ', StudyTime)) as StudyDateTime, MIN(PatientID) as PatientID, StudyInstanceUID, COUNT(*) as InstanceCount
FROM `chc-tcia.lungct_diagnosis.lungct_diagnosis`
GROUP BY StudyInstanceUID
ORDER BY StudyDateTime DESC
LIMIT 20;

クエリにより次の情報が返されます。

  • システムに入力された最新 20 件のスタディとそのスタディがシステムに入力された日時
  • 各スタディに関連する患者
  • スタディの UID
  • スタディに関連付けられたインスタンスの数

次のレスポンスでは、JSON 形式を使用しています。

[
  {
    "StudyDateTime": "1998-09-24 07:59:11",
    "PatientID": "R_006",
    "StudyInstanceUID": "1.3.6.1.4.1.14519.5.2.1.4320.5030.203059346048546067166621241946",
    "InstanceCount": "130"
  },
  {
    "StudyDateTime": "1998-09-19 15:02:00",
    "PatientID": "R_168",
    "StudyInstanceUID": "1.3.6.1.4.1.14519.5.2.1.4320.5030.339960057327890022720983572187",
    "InstanceCount": "73"
  },
  {
    "StudyDateTime": "1998-09-03 13:59:23",
    "PatientID": "R_232",
    "StudyInstanceUID": "1.3.6.1.4.1.14519.5.2.1.4320.5030.339835546587977846672632754158",
    "InstanceCount": "74"
  },
  {
    "StudyDateTime": "1998-08-20 09:54:23",
    "PatientID": "R_210",
    "StudyInstanceUID": "1.3.6.1.4.1.14519.5.2.1.4320.5030.296738593990263872210071427126",
    "InstanceCount": "108"
  },
  {
    "StudyDateTime": "1998-08-17 15:22:14",
    "PatientID": "R_053",
    "StudyInstanceUID": "1.3.6.1.4.1.14519.5.2.1.4320.5030.517417975270684537124932347957",
    "InstanceCount": "104"
  },
  {
    "StudyDateTime": "1998-08-03 08:53:02",
    "PatientID": "R_043",
    "StudyInstanceUID": "1.3.6.1.4.1.14519.5.2.1.4320.5030.227672022111453893046049224932",
    "InstanceCount": "111"
  },
  {
    "StudyDateTime": "1998-07-24 10:01:17",
    "PatientID": "R_141",
    "StudyInstanceUID": "1.3.6.1.4.1.14519.5.2.1.4320.5030.179196140853257709306370614304",
    "InstanceCount": "110"
  },
  {
    "StudyDateTime": "1998-06-29 09:18:16",
    "PatientID": "R_069",
    "StudyInstanceUID": "1.3.6.1.4.1.14519.5.2.1.4320.5030.272642986942028254801481747252",
    "InstanceCount": "118"
  },
  {
    "StudyDateTime": "1998-06-27 12:47:58",
    "PatientID": "R_233",
    "StudyInstanceUID": "1.3.6.1.4.1.14519.5.2.1.4320.5030.681962696010777092272412255441",
    "InstanceCount": "65"
  },
  {
    "StudyDateTime": "1998-06-13 11:25:35",
    "PatientID": "R_075",
    "StudyInstanceUID": "1.3.6.1.4.1.14519.5.2.1.4320.5030.905893527127370577828717624475",
    "InstanceCount": "112"
  },
  {
    "StudyDateTime": "1998-06-06 12:16:24",
    "PatientID": "R_029",
    "StudyInstanceUID": "1.3.6.1.4.1.14519.5.2.1.4320.5030.125721920632162119492941634336",
    "InstanceCount": "109"
  },
  {
    "StudyDateTime": "1998-04-30 10:52:34",
    "PatientID": "R_116",
    "StudyInstanceUID": "1.3.6.1.4.1.14519.5.2.1.4320.5030.140526923029511055644251155499",
    "InstanceCount": "115"
  },
  {
    "StudyDateTime": "1998-04-11 08:55:15",
    "PatientID": "R_014",
    "StudyInstanceUID": "1.3.6.1.4.1.14519.5.2.1.4320.5030.231039938881330096566986102847",
    "InstanceCount": "76"
  },
  {
    "StudyDateTime": "1998-04-06 13:48:50",
    "PatientID": "R_061",
    "StudyInstanceUID": "1.3.6.1.4.1.14519.5.2.1.4320.5030.148444392206166653380348096858",
    "InstanceCount": "70"
  },
  {
    "StudyDateTime": "1998-04-05 12:57:54",
    "PatientID": "R_126",
    "StudyInstanceUID": "1.3.6.1.4.1.14519.5.2.1.4320.5030.803397998355063686023109438391",
    "InstanceCount": "71"
  },
  {
    "StudyDateTime": "1998-03-21 13:23:15",
    "PatientID": "R_093",
    "StudyInstanceUID": "1.3.6.1.4.1.14519.5.2.1.4320.5030.201986527949877334068747060981",
    "InstanceCount": "65"
  },
  {
    "StudyDateTime": "1998-03-06 13:27:51",
    "PatientID": "R_065",
    "StudyInstanceUID": "1.3.6.1.4.1.14519.5.2.1.4320.5030.233872568071694592857630274388",
    "InstanceCount": "69"
  },
  {
    "StudyDateTime": "1998-03-06 09:09:43",
    "PatientID": "R_191",
    "StudyInstanceUID": "1.3.6.1.4.1.14519.5.2.1.4320.5030.243097352990517043299166705830",
    "InstanceCount": "76"
  },
  {
    "StudyDateTime": "1998-01-14 14:59:23",
    "PatientID": "R_237",
    "StudyInstanceUID": "1.3.6.1.4.1.14519.5.2.1.4320.5030.213658277730427015624893071198",
    "InstanceCount": "68"
  },
  {
    "StudyDateTime": "1998-01-02 14:00:00",
    "PatientID": "R_078",
    "StudyInstanceUID": "1.3.6.1.4.1.14519.5.2.1.4320.5030.200669196334798686049957852894",
    "InstanceCount": "87"
  }
]

制限事項と追加の動作

DICOM タグに BigQuery でサポートされている型がない場合(除外される VRをご覧ください)、DICOM タグは、宛先 BigQuery テーブルの別の列(DroppedTags.TagName と呼ばれます)に一覧表示されます。

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

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