このページでは、探索と分析のために 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
フラグ(Google Cloud CLI を使用)を設定したかどうかwriteDisposition
enum に値を設定しているかどうか。writeDisposition
enumを使用する場合は、force
フィールドを設定しないでください。
- 宛先テーブルがすでに存在し、
force
がtrue
に設定されているか、--overwrite-table
フラグが指定されている場合は、エクスポート オペレーションによって既存のテーブルが上書きされます。 - 宛先テーブルがすでに存在し、
force
がfalse
に設定されているか、--overwrite-table
フラグが指定されていない場合は、エラーが発生します。 - 宛先テーブルがまだ存在しない場合は、
force
フィールドまたは--overwrite-table
フラグを指定しているかに関係なく、新しいテーブルが作成されます。 writeDisposition
の動作については、そのドキュメントをご覧ください。writeDisposition
列挙型は、force
を使用する場合のオプションと同様の動作を行います。ただし、宛先テーブルがすでに存在していて空の場合、エクスポート オペレーションはエラーを返すのではなく完了します。
DICOM メタデータのエクスポート
以下のサンプルは、DICOM メタデータを BigQuery テーブルにエクスポートする方法を示しています。これらのサンプルでは、DICOM ストアと BigQuery テーブルは同じプロジェクトにあります。DICOM メタデータを別のプロジェクトの BigQuery テーブルにエクスポートするには、DICOM メタデータを別のプロジェクトにエクスポートするをご覧ください。
Console
DICOM メタデータを BigQuery テーブルにエクスポートするには、次の手順を行います。
Google Cloud コンソールで、[データセット] ページに移動します。
エクスポートするメタデータを含む DICOM ストアがあるデータセットをクリックします。
DICOM ストアと同じ行で [アクション] リストを開き、[エクスポート] を選択します。
表示される [DICOM ストアのエクスポート] ページで、[BigQuery テーブル] を選択します。
[プロジェクト] フィールドで [参照] をクリックして、プロジェクトを選択します。
[データセット] リストで、DICOM メタデータをエクスポートする BigQuery データセットを選択します。
[テーブル] フィールドに新しいテーブル名を入力します。宛先テーブルが有効であることを確認するため、BigQuery によって各選択項目がチェックされます。
[宛先テーブルの書き込み処理] セクションで、次のいずれかを選択します。これらのオプションは
WriteDisposition
列挙型に対応しています。- 宛先テーブルが空の場合にのみデータをエクスポート:
WRITE_EMPTY
と同等です。 - 宛先テーブルにデータを追加する:
WRITE_APPEND
と同等です。 - インスタンスを書き込む前に宛先テーブル内の既存のデータをすべて消去する:
WRITE_TRUNCATE
と同等です。
- 宛先テーブルが空の場合にのみデータをエクスポート:
[エクスポート] をクリックして、DICOM メタデータを BigQuery テーブルにエクスポートします。
- オペレーションのステータスを追跡するには、[オペレーション] タブをクリックします。オペレーションが完了すると、次の状況が表示されます。
- [長時間実行オペレーションのステータス] セクションでは、[OK] の見出しの下に、緑色のチェックマークが表示されます。
- [概要] セクションでは、オペレーション ID と同じ行に緑色のチェックマークと [OK] インジケーターが表示されます。
gcloud
DICOM メタデータを BigQuery テーブルにエクスポートするには、gcloud healthcare dicom-stores export bq
コマンドを実行します。
DICOM メタデータをエクスポートします。
後述のコマンドデータを使用する前に、次のように置き換えます。
- PROJECT_ID: Google Cloud プロジェクトの ID
- LOCATION: データセットの場所
- DATASET_ID: DICOM ストアの親データセット
- DICOM_STORE_ID: DICOM ストアの ID
- BIGQUERY_DATASET_ID: DICOM メタデータをエクスポートする既存の BigQuery データセットの名前
- BIGQUERY_TABLE_ID: BigQuery データセット内の新規または既存のテーブルの名前。エクスポート オペレーションによって新しいテーブルが作成される場合は、テーブルの命名に関するページでテーブル名の要件をご確認ください。
- WRITE_DISPOSITION:
WriteDisposition
enum の値。次の値のいずれかを使用できます。write-empty
: BigQuery テーブルが空の場合にのみデータをエクスポートします。write-truncate
: DICOM インスタンスを書き込む前に、BigQuery テーブル内の既存のデータをすべて消去します。write-append
: BigQuery テーブルにデータを追加します。
次のコマンドを実行します。
Linux、macOS、Cloud Shell
gcloud healthcare dicom-stores export bq DICOM_STORE_ID \ --location=LOCATION \ --dataset=DATASET_ID \ --bq-table=bq://PROJECT_ID.BIGQUERY_DATASET_ID.BIGQUERY_TABLE_ID \ --write-disposition=WRITE_DISPOSITION
Windows(PowerShell)
gcloud healthcare dicom-stores export bq DICOM_STORE_ID ` --location=LOCATION ` --dataset=DATASET_ID ` --bq-table=bq://PROJECT_ID.BIGQUERY_DATASET_ID.BIGQUERY_TABLE_ID ` --write-disposition=WRITE_DISPOSITION
Windows(cmd.exe)
gcloud healthcare dicom-stores export bq DICOM_STORE_ID ^ --location=LOCATION ^ --dataset=DATASET_ID ^ --bq-table=bq://PROJECT_ID.BIGQUERY_DATASET_ID.BIGQUERY_TABLE_ID ^ --write-disposition=WRITE_DISPOSITION
name
フィールドにオペレーションの名前を出力します。OPERATION_ID
の値をメモします。この値は次の手順で必要になります。レスポンス
Request issued for: [DICOM_STORE_ID] Waiting for operation [projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID] to complete...⠏ name: projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID
オペレーションの詳細を表示するには、
gcloud healthcare operations describe
コマンドを実行してレスポンスの OPERATION_ID を指定します。後述のコマンドデータを使用する前に、次のように置き換えます。
- PROJECT_ID: Google Cloud プロジェクトの ID
- DATASET_ID: データセット ID
- LOCATION: データセットの場所
- OPERATION_ID: 長時間実行オペレーションから返された ID
次のコマンドを実行します。
Linux、macOS、Cloud Shell
gcloud healthcare operations describe OPERATION_ID \ --project=PROJECT_ID \ --dataset=DATASET_ID \ --location=LOCATION
Windows(PowerShell)
gcloud healthcare operations describe OPERATION_ID ` --project=PROJECT_ID ` --dataset=DATASET_ID ` --location=LOCATION
Windows(cmd.exe)
gcloud healthcare operations describe OPERATION_ID ^ --project=PROJECT_ID ^ --dataset=DATASET_ID ^ --location=LOCATION
次のようなレスポンスが返されます。
レスポンス
done: true // If there were any errors, an `error` field displays instead of a `response` field. // See Troubleshooting long-running operations for a list of response codes. error: ERROR code: ERROR_CODE message: DESCRIPTION metadata: '@type': 'type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata' apiMethodName: 'google.cloud.healthcare.v1.dicom.DicomService.ExportDicomData_bq' counter: success: 'SUCCESS_COUNT' // If there were any failures, they display in the `failure` field. failure: 'FAILURE_COUNT' createTime: 'YYYY-MM-DDTHH:MM:SS+ZZ:ZZ' endTime: 'YYYY-MM-DDTHH:MM:SS+ZZ:ZZ' logsUrl: https://console.cloud.google.com/CLOUD_LOGGING_URL name: projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID // The `response` field only displays if there were no errors. response: '@type': 'type.googleapis.com/google.protobuf.Empty'
REST
DICOM メタデータを BigQuery テーブルにエクスポートするには、projects.locations.datasets.dicomStores.export
メソッドを使用します。
DICOM メタデータをエクスポートします。
リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: Google Cloud プロジェクトの ID
- LOCATION: データセットの場所
- DATASET_ID: DICOM ストアの親データセット
- DICOM_STORE_ID: DICOM ストアの ID
- BIGQUERY_DATASET_ID: DICOM メタデータをエクスポートする既存の BigQuery データセットの名前
- BIGQUERY_TABLE_ID: BigQuery データセット内の新規または既存のテーブルの名前。エクスポート オペレーションによって新しいテーブルが作成される場合は、テーブルの命名に関するページでテーブル名の要件をご確認ください。
- WRITE_DISPOSITION:
WriteDisposition
enum の値。次の値のいずれかを使用できます。WRITE_EMPTY
: BigQuery テーブルが空の場合にのみデータをエクスポートします。WRITE_TRUNCATE
: DICOM インスタンスを書き込む前に、BigQuery テーブル内の既存のデータをすべて消去します。WRITE_APPEND
: BigQuery テーブルにデータを追加します。
リクエストの本文(JSON):
{ "bigqueryDestination": { "tableUri": "bq://PROJECT_ID.BIGQUERY_DATASET_ID.BIGQUERY_TABLE_ID", "writeDisposition": "WRITE_DISPOSITION" } }
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
リクエスト本文を
request.json
という名前のファイルに保存します。ターミナルで次のコマンドを実行して、このファイルを現在のディレクトリに作成または上書きします。cat > request.json << 'EOF' { "bigqueryDestination": { "tableUri": "bq://PROJECT_ID.BIGQUERY_DATASET_ID.BIGQUERY_TABLE_ID", "writeDisposition": "WRITE_DISPOSITION" } } EOF
その後、次のコマンドを実行して REST リクエストを送信します。
curl -X POST \
-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:export"PowerShell
リクエスト本文を
request.json
という名前のファイルに保存します。ターミナルで次のコマンドを実行して、このファイルを現在のディレクトリに作成または上書きします。@' { "bigqueryDestination": { "tableUri": "bq://PROJECT_ID.BIGQUERY_DATASET_ID.BIGQUERY_TABLE_ID", "writeDisposition": "WRITE_DISPOSITION" } } '@ | Out-File -FilePath request.json -Encoding utf8
その後、次のコマンドを実行して REST リクエストを送信します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-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:export" | Select-Object -Expand ContentAPI Explorer
リクエスト本文をコピーして、メソッドのリファレンス ページを開きます。ページの右側に [API Explorer] パネルが開きます。このツールを操作してリクエストを送信できます。このツールにリクエスト本文を貼り付け、その他の必須フィールドに入力して、[Execute] をクリックします。
OPERATION_ID
の値をメモします。この値は次の手順で必要になります。projects.locations.datasets.operations.get
メソッドを使用して、長時間実行オペレーションのステータスを取得します。リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: Google Cloud プロジェクトの ID
- DATASET_ID: データセット ID
- LOCATION: データセットの場所
- OPERATION_ID: 長時間実行オペレーションから返された ID。
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
次のコマンドを実行します。
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"PowerShell
次のコマンドを実行します。
$cred = gcloud auth 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 ContentAPI Explorer
メソッド リファレンス ページを開きます。ページの右側に [API Explorer] パネルが開きます。このツールを操作してリクエストを送信できます。必須フィールドを入力して、[Execute] をクリックします。
"done": true
が含まれている場合、長時間実行オペレーションは終了しています。
別のプロジェクトへの DICOM メタデータのエクスポート
あるプロジェクトの DICOM ストアから別のプロジェクトの BigQuery データセットに DICOM メタデータをエクスポートするには、まず、宛先プロジェクトで IAM 権限を設定する方法について、別のプロジェクトの権限に DICOM メタデータをエクスポートするをご覧ください。
gcloud
あるプロジェクトの DICOM ストアから別のプロジェクトの BigQuery テーブルに DICOM メタデータをエクスポートするには、gcloud healthcare dicom-stores export bq
コマンドを使用します。
DICOM メタデータをエクスポートします。
後述のコマンドデータを使用する前に、次のように置き換えます。
- SOURCE_PROJECT_ID: ソースの Google Cloud プロジェクトの ID
- SOURCE_LOCATION: ソース データセットのロケーション
- SOURCE_DATASET_ID: ソース DICOM ストアの親データセット
- SOURCE_DICOM_STORE_ID: ソース DICOM ストアの ID
- DESTINATION_PROJECT_ID: 別のプロジェクトの ID
- DESTINATION_BIGQUERY_DATASET_ID: DICOM メタデータをエクスポートする宛先プロジェクト内の既存の BigQuery データセットの名前
- DESTINATION_BIGQUERY_TABLE_ID: BigQuery データセット内の新規または既存のテーブルの名前。エクスポート オペレーションによって新しいテーブルが作成される場合は、テーブルの命名に関するページでテーブル名の要件をご確認ください。
- WRITE_DISPOSITION:
WriteDisposition
enum の値。次の値のいずれかを使用できます。write-empty
: BigQuery テーブルが空の場合にのみデータをエクスポートします。write-truncate
: DICOM インスタンスを書き込む前に、BigQuery テーブル内の既存のデータをすべて消去します。write-append
: BigQuery テーブルにデータを追加します。
次のコマンドを実行します。
Linux、macOS、Cloud Shell
gcloud healthcare dicom-stores export bq SOURCE_DICOM_STORE_ID \ --project=SOURCE_PROJECT_ID \ --location=SOURCE_LOCATION \ --dataset=SOURCE_DATASET_ID \ --bq-table=bq://DESTINATION_PROJECT_ID.DESTINATION_BIGQUERY_DATASET_ID.DESTINATION_BIGQUERY_TABLE_ID \ --write-disposition=WRITE_DISPOSITION
Windows(PowerShell)
gcloud healthcare dicom-stores export bq SOURCE_DICOM_STORE_ID ` --project=SOURCE_PROJECT_ID ` --location=SOURCE_LOCATION ` --dataset=SOURCE_DATASET_ID ` --bq-table=bq://DESTINATION_PROJECT_ID.DESTINATION_BIGQUERY_DATASET_ID.DESTINATION_BIGQUERY_TABLE_ID ` --write-disposition=WRITE_DISPOSITION
Windows(cmd.exe)
gcloud healthcare dicom-stores export bq SOURCE_DICOM_STORE_ID ^ --project=SOURCE_PROJECT_ID ^ --location=SOURCE_LOCATION ^ --dataset=SOURCE_DATASET_ID ^ --bq-table=bq://DESTINATION_PROJECT_ID.DESTINATION_BIGQUERY_DATASET_ID.DESTINATION_BIGQUERY_TABLE_ID ^ --write-disposition=WRITE_DISPOSITION
name
フィールドにオペレーションの名前を出力します。OPERATION_ID
の値をメモします。この値は次の手順で必要になります。レスポンス
Request issued for: [SOURCE_DICOM_STORE_ID] Waiting for operation [projects/SOURCE_PROJECT_ID/locations/SOURCE_LOCATION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID] to complete...⠏ name: projects/SOURCE_PROJECT_ID/locations/SOURCE_LOCATION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID
オペレーションの詳細を表示するには、
gcloud healthcare operations describe
コマンドを実行してレスポンスの OPERATION_ID を指定します。後述のコマンドデータを使用する前に、次のように置き換えます。
- SOURCE_PROJECT_ID: ソースの Google Cloud プロジェクトの ID
- SOURCE_LOCATION: ソース データセットのロケーション
- SOURCE_DATASET_ID: ソース データセットの ID
- OPERATION_ID: 長時間実行オペレーションから返された ID
次のコマンドを実行します。
Linux、macOS、Cloud Shell
gcloud healthcare operations describe OPERATION_ID \ --project=SOURCE_PROJECT_ID \ --dataset=SOURCE_DATASET_ID \ --location=SOURCE_LOCATION
Windows(PowerShell)
gcloud healthcare operations describe OPERATION_ID ` --project=SOURCE_PROJECT_ID ` --dataset=SOURCE_DATASET_ID ` --location=SOURCE_LOCATION
Windows(cmd.exe)
gcloud healthcare operations describe OPERATION_ID ^ --project=SOURCE_PROJECT_ID ^ --dataset=SOURCE_DATASET_ID ^ --location=SOURCE_LOCATION
次のようなレスポンスが返されます。
レスポンス
done: true // If there were any errors, an `error` field displays instead of a `response` field. // See Troubleshooting long-running operations for a list of response codes. error: ERROR code: ERROR_CODE message: DESCRIPTION metadata: '@type': 'type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata' apiMethodName: 'google.cloud.healthcare.v1.dicom.DicomService.ExportDicomData_bq' counter: success: 'SUCCESS_COUNT' // If there were any failures, they display in the `failure` field. failure: 'FAILURE_COUNT' createTime: 'YYYY-MM-DDTHH:MM:SS+ZZ:ZZ' endTime: 'YYYY-MM-DDTHH:MM:SS+ZZ:ZZ' logsUrl: https://console.cloud.google.com/CLOUD_LOGGING_URL name: projects/SOURCE_PROJECT_ID/locations/SOURCE_LOCATION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID // The `response` field only displays if there were no errors. response: '@type': 'type.googleapis.com/google.protobuf.Empty'
REST
あるプロジェクトの DICOM ストアから別のプロジェクトの BigQuery テーブルに DICOM メタデータをエクスポートするには、projects.locations.datasets.dicomStores.export
メソッドを使用します。
DICOM メタデータをエクスポートします。
リクエストのデータを使用する前に、次のように置き換えます。
- SOURCE_PROJECT_ID: ソースの Google Cloud プロジェクトの ID
- SOURCE_LOCATION: ソース データセットのロケーション
- SOURCE_DATASET_ID: ソース DICOM ストアの親データセット
- SOURCE_DICOM_STORE_ID: ソース DICOM ストアの ID
- DESTINATION_PROJECT_ID: 別のプロジェクトの ID
- DESTINATION_BIGQUERY_DATASET_ID: DICOM メタデータをエクスポートする宛先プロジェクト内の既存の BigQuery データセットの名前
- DESTINATION_BIGQUERY_TABLE_ID: BigQuery データセット内の新規または既存のテーブルの名前。エクスポート オペレーションによって新しいテーブルが作成される場合は、テーブルの命名に関するページでテーブル名の要件をご確認ください。
- WRITE_DISPOSITION:
WriteDisposition
enum の値。次の値のいずれかを使用できます。WRITE_EMPTY
: BigQuery テーブルが空の場合にのみデータをエクスポートします。WRITE_TRUNCATE
: DICOM インスタンスを書き込む前に、BigQuery テーブル内の既存のデータをすべて消去します。WRITE_APPEND
: BigQuery テーブルにデータを追加します。
リクエストの本文(JSON):
{ "bigqueryDestination": { "tableUri": "bq://DESTINATION_PROJECT_ID.DESTINATION_BIGQUERY_DATASET_ID.DESTINATION_BIGQUERY_TABLE_ID", "writeDisposition": "WRITE_DISPOSITION" } }
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
リクエスト本文を
request.json
という名前のファイルに保存します。ターミナルで次のコマンドを実行して、このファイルを現在のディレクトリに作成または上書きします。cat > request.json << 'EOF' { "bigqueryDestination": { "tableUri": "bq://DESTINATION_PROJECT_ID.DESTINATION_BIGQUERY_DATASET_ID.DESTINATION_BIGQUERY_TABLE_ID", "writeDisposition": "WRITE_DISPOSITION" } } EOF
その後、次のコマンドを実行して REST リクエストを送信します。
curl -X POST \
-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/SOURCE_PROJECT_ID/locations/SOURCE_LOCATION/datasets/SOURCE_DATASET_ID/dicomStores/SOURCE_DICOM_STORE_ID:export"PowerShell
リクエスト本文を
request.json
という名前のファイルに保存します。ターミナルで次のコマンドを実行して、このファイルを現在のディレクトリに作成または上書きします。@' { "bigqueryDestination": { "tableUri": "bq://DESTINATION_PROJECT_ID.DESTINATION_BIGQUERY_DATASET_ID.DESTINATION_BIGQUERY_TABLE_ID", "writeDisposition": "WRITE_DISPOSITION" } } '@ | Out-File -FilePath request.json -Encoding utf8
その後、次のコマンドを実行して REST リクエストを送信します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://healthcare.googleapis.com/v1/projects/SOURCE_PROJECT_ID/locations/SOURCE_LOCATION/datasets/SOURCE_DATASET_ID/dicomStores/SOURCE_DICOM_STORE_ID:export" | Select-Object -Expand ContentAPI Explorer
リクエスト本文をコピーして、メソッドのリファレンス ページを開きます。ページの右側に [API Explorer] パネルが開きます。このツールを操作してリクエストを送信できます。このツールにリクエスト本文を貼り付け、その他の必須フィールドに入力して、[Execute] をクリックします。
OPERATION_ID
の値をメモします。この値は次の手順で必要になります。projects.locations.datasets.operations.get
メソッドを使用して、長時間実行オペレーションのステータスを取得します。リクエストのデータを使用する前に、次のように置き換えます。
- SOURCE_PROJECT_ID: ソースの Google Cloud プロジェクトの ID
- SOURCE_LOCATION: ソース データセットのロケーション
- SOURCE_DATASET_ID: ソース データセットの ID
- OPERATION_ID: 長時間実行オペレーションから返された ID。
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
次のコマンドを実行します。
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1/projects/SOURCE_PROJECT_ID/locations/SOURCE_LOCATION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID"PowerShell
次のコマンドを実行します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://healthcare.googleapis.com/v1/projects/SOURCE_PROJECT_ID/locations/SOURCE_LOCATION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand ContentAPI Explorer
メソッド リファレンス ページを開きます。ページの右側に [API Explorer] パネルが開きます。このツールを操作してリクエストを送信できます。必須フィールドを入力して、[Execute] をクリックします。
"done": true
が含まれている場合、長時間実行オペレーションは終了しています。
フィルタを使用した 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 を表示できます。次に、以下の手順を行います。
-
目的のスタディ UID、シリーズ UID、インスタンス UID にクエリを実行します。たとえば、DICOM メタデータを BigQuery にエクスポートした後、次のクエリを実行してスタディ UID、シリーズ UID、インスタンス UID をフィルタ ファイル要件と互換性のある形式に連結できます。
SELECT CONCAT ('/studies/', StudyInstanceUID, '/series/', SeriesInstanceUID, '/instances/', SOPInstanceUID) FROM [PROJECT_ID:BIGQUERY_DATASET.BIGQUERY_TABLE]
- クエリが大規模な結果セットを返す場合、クエリ結果を BigQuery の宛先テーブルに保存することで、新しいテーブルを実体化できます。
- クエリ結果を宛先テーブルに保存する場合は、宛先テーブルの内容をファイルに保存し、Cloud Storage にエクスポートできます。この手順については、テーブルデータのエクスポートをご覧ください。エクスポートされるファイルはフィルタ ファイルです。エクスポート オペレーションでフィルタを指定するときは、Cloud Storage 内のフィルタ ファイルの場所を使用します。
フィルタ ファイルを手動で作成する
カスタム コンテンツを含むフィルタ ファイルを作成し、Cloud Storage バケットにアップロードできます。エクスポート オペレーションでフィルタを指定するときは、Cloud Storage 内のフィルタ ファイルの場所を使用します。次のサンプルは、gcloud storage cp
コマンドを使用してフィルタ ファイルを Cloud Storage バケットにアップロードする方法を示しています。
gcloud storage cp FILTER_FILE gs://BUCKET
フィルタ ファイルで渡す
フィルタ ファイルを作成したら、DICOM エクスポート オペレーションを呼び出し、REST API を使用してフィルタ ファイルで渡します。以下のサンプルでは、フィルタを使用して DICOM メタデータをエクスポートする方法が示されます。
gcloud
フィルタを使用して DICOM メタデータを BigQuery テーブルにエクスポートするには、gcloud beta healthcare dicom-stores export bq
コマンドを実行します。
DICOM メタデータをエクスポートします。
後述のコマンドデータを使用する前に、次のように置き換えます。
- PROJECT_ID: Google Cloud プロジェクトの ID
- LOCATION: データセットの場所
- DATASET_ID: DICOM ストアの親データセット
- DICOM_STORE_ID: DICOM ストアの ID
- BIGQUERY_DATASET_ID: DICOM メタデータをエクスポートする既存の BigQuery データセットの名前
- BIGQUERY_TABLE_ID: BigQuery データセット内の新規または既存のテーブルの名前。エクスポート オペレーションによって新しいテーブルが作成される場合は、テーブルの命名に関するページでテーブル名の要件をご確認ください。
- BUCKET: フィルタ ファイルを含む Cloud Storage バケットの名前。フィルタ ファイルがディレクトリ内にある場合は、パスにディレクトリを含めます。
- FILTER_FILE: Cloud Storage バケット内のフィルタ ファイルの場所と名前
- WRITE_DISPOSITION:
WriteDisposition
enum の値。次の値のいずれかを使用できます。write-empty
: BigQuery テーブルが空の場合にのみデータをエクスポートします。write-truncate
: DICOM インスタンスを書き込む前に、BigQuery テーブル内の既存のデータをすべて消去します。write-append
: BigQuery テーブルにデータを追加します。
次のコマンドを実行します。
Linux、macOS、Cloud Shell
gcloud beta healthcare dicom-stores export bq DICOM_STORE_ID \ --location=LOCATION \ --dataset=DATASET_ID \ --bq-table=bq://PROJECT_ID.BIGQUERY_DATASET_ID.BIGQUERY_TABLE_ID \ --filter-config-gcs-uri=gs://BUCKET/FILTER_FILE \ --write-disposition=WRITE_DISPOSITION
Windows(PowerShell)
gcloud beta healthcare dicom-stores export bq DICOM_STORE_ID ` --location=LOCATION ` --dataset=DATASET_ID ` --bq-table=bq://PROJECT_ID.BIGQUERY_DATASET_ID.BIGQUERY_TABLE_ID ` --filter-config-gcs-uri=gs://BUCKET/FILTER_FILE ` --write-disposition=WRITE_DISPOSITION
Windows(cmd.exe)
gcloud beta healthcare dicom-stores export bq DICOM_STORE_ID ^ --location=LOCATION ^ --dataset=DATASET_ID ^ --bq-table=bq://PROJECT_ID.BIGQUERY_DATASET_ID.BIGQUERY_TABLE_ID ^ --filter-config-gcs-uri=gs://BUCKET/FILTER_FILE ^ --write-disposition=WRITE_DISPOSITION
name
フィールドにオペレーションの名前を出力します。OPERATION_ID
の値をメモします。この値は次の手順で必要になります。レスポンス
Request issued for: [DICOM_STORE_ID] Waiting for operation [projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID] to complete...⠏ name: projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID
オペレーションの詳細を表示するには、
gcloud healthcare operations describe
コマンドを実行してレスポンスの OPERATION_ID を指定します。後述のコマンドデータを使用する前に、次のように置き換えます。
- PROJECT_ID: Google Cloud プロジェクトの ID
- DATASET_ID: データセット ID
- LOCATION: データセットの場所
- OPERATION_ID: 長時間実行オペレーションから返された ID
次のコマンドを実行します。
Linux、macOS、Cloud Shell
gcloud healthcare operations describe OPERATION_ID \ --project=PROJECT_ID \ --dataset=DATASET_ID \ --location=LOCATION
Windows(PowerShell)
gcloud healthcare operations describe OPERATION_ID ` --project=PROJECT_ID ` --dataset=DATASET_ID ` --location=LOCATION
Windows(cmd.exe)
gcloud healthcare operations describe OPERATION_ID ^ --project=PROJECT_ID ^ --dataset=DATASET_ID ^ --location=LOCATION
次のようなレスポンスが返されます。
レスポンス
done: true // If there were any errors, an `error` field displays instead of a `response` field. // See Troubleshooting long-running operations for a list of response codes. error: ERROR code: ERROR_CODE message: DESCRIPTION metadata: '@type': 'type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata' apiMethodName: 'google.cloud.healthcare.v1.dicom.DicomService.ExportDicomData_bq' counter: success: 'SUCCESS_COUNT' // If there were any failures, they display in the `failure` field. failure: 'FAILURE_COUNT' createTime: 'YYYY-MM-DDTHH:MM:SS+ZZ:ZZ' endTime: 'YYYY-MM-DDTHH:MM:SS+ZZ:ZZ' logsUrl: https://console.cloud.google.com/CLOUD_LOGGING_URL name: projects/SOURCE_PROJECT_ID/locations/SOURCE_LOCATION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID // The `response` field only displays if there were no errors. response: '@type': 'type.googleapis.com/google.protobuf.Empty'
REST
フィルタを使用して DICOM メタデータを BigQuery テーブルにエクスポートするには、projects.locations.datasets.dicomStores.export
メソッドを使用します。
DICOM メタデータをエクスポートします。
リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: Google Cloud プロジェクトの ID
- LOCATION: データセットの場所
- DATASET_ID: DICOM ストアの親データセット
- DICOM_STORE_ID: DICOM ストアの ID
- BIGQUERY_DATASET_ID: DICOM メタデータをエクスポートする既存の BigQuery データセットの名前
- BIGQUERY_TABLE_ID: BigQuery データセット内の新規または既存のテーブルの名前。エクスポート オペレーションによって新しいテーブルが作成される場合は、テーブルの命名に関するページでテーブル名の要件をご確認ください。
- BUCKET: フィルタ ファイルを含む Cloud Storage バケットの名前。フィルタ ファイルがディレクトリ内にある場合は、パスにディレクトリを含めます。
- FILTER_FILE: Cloud Storage バケット内のフィルタ ファイルの場所と名前
- WRITE_DISPOSITION:
WriteDisposition
enum の値。次の値のいずれかを使用できます。WRITE_EMPTY
: BigQuery テーブルが空の場合にのみデータをエクスポートします。WRITE_TRUNCATE
: DICOM インスタンスを書き込む前に、BigQuery テーブル内の既存のデータをすべて消去します。WRITE_APPEND
: BigQuery テーブルにデータを追加します。
リクエストの本文(JSON):
{ "bigqueryDestination": { "tableUri": "bq://PROJECT_ID.BIGQUERY_DATASET_ID.BIGQUERY_TABLE_ID", "writeDisposition": "WRITE_DISPOSITION" }, "filterConfig": { "resourcePathsGcsUri": "gs://BUCKET/FILTER_FILE" } }
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
リクエスト本文を
request.json
という名前のファイルに保存します。ターミナルで次のコマンドを実行して、このファイルを現在のディレクトリに作成または上書きします。cat > request.json << 'EOF' { "bigqueryDestination": { "tableUri": "bq://PROJECT_ID.BIGQUERY_DATASET_ID.BIGQUERY_TABLE_ID", "writeDisposition": "WRITE_DISPOSITION" }, "filterConfig": { "resourcePathsGcsUri": "gs://BUCKET/FILTER_FILE" } } EOF
その後、次のコマンドを実行して REST リクエストを送信します。
curl -X POST \
-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:export"PowerShell
リクエスト本文を
request.json
という名前のファイルに保存します。ターミナルで次のコマンドを実行して、このファイルを現在のディレクトリに作成または上書きします。@' { "bigqueryDestination": { "tableUri": "bq://PROJECT_ID.BIGQUERY_DATASET_ID.BIGQUERY_TABLE_ID", "writeDisposition": "WRITE_DISPOSITION" }, "filterConfig": { "resourcePathsGcsUri": "gs://BUCKET/FILTER_FILE" } } '@ | Out-File -FilePath request.json -Encoding utf8
その後、次のコマンドを実行して REST リクエストを送信します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-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:export" | Select-Object -Expand ContentAPI Explorer
リクエスト本文をコピーして、メソッドのリファレンス ページを開きます。ページの右側に [API Explorer] パネルが開きます。このツールを操作してリクエストを送信できます。このツールにリクエスト本文を貼り付け、その他の必須フィールドに入力して、[Execute] をクリックします。
OPERATION_ID
の値をメモします。この値は次の手順で必要になります。projects.locations.datasets.operations.get
メソッドを使用して、長時間実行オペレーションのステータスを取得します。リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: Google Cloud プロジェクトの ID
- DATASET_ID: データセット ID
- LOCATION: データセットの場所
- OPERATION_ID: 長時間実行オペレーションから返された ID。
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
次のコマンドを実行します。
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"PowerShell
次のコマンドを実行します。
$cred = gcloud auth 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 ContentAPI Explorer
メソッド リファレンス ページを開きます。ページの右側に [API Explorer] パネルが開きます。このツールを操作してリクエストを送信できます。必須フィールドを入力して、[Execute] をクリックします。
"done": true
が含まれている場合、長時間実行オペレーションは終了しています。
BigQuery で DICOM データのクエリと分析を行う
DICOM メタデータを BigQuery テーブルにエクスポートしたら、サンプルクエリを実行してメタデータの詳細を確認できます。次のサンプルは、一般的なユースケースでクエリを実行する方法を示しています。
メタデータを横断する検索
画像保存通信システム(PACS)や、ベンダー ニュートラル アーカイブ(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 データセットの bigquery-public-data.idc_v5.dicom_metadata テーブルを使用します。
#standardSQL
SELECT
MIN(CONCAT(StudyDate, ' ', StudyTime)) as StudyDateTime, MIN(PatientID) as PatientID, StudyInstanceUID, COUNT(*) as InstanceCount
FROM
`bigquery-public-data.idc_v5.dicom_metadata` AS dicom
GROUP BY StudyInstanceUID
ORDER BY StudyDateTime DESC
LIMIT 10;
クエリにより次の情報が返されます。
- システムに入力された最新 10 件のスタディとそのスタディがシステムに入力された日時
- 各スタディに関連する患者
- スタディの UID
- スタディに関連付けられたインスタンスの数
次のレスポンスでは、JSON 形式を使用しています。
[
{
"StudyDateTime": "2021-07-11 00:38:22",
"PatientID": "C3L-01924",
"StudyInstanceUID": "1.3.6.1.4.1.5962.99.1.2466232160.763753303.1625963902816.3.0",
"InstanceCount": "4"
}, {
"StudyDateTime": "2021-07-10 23:52:10",
"PatientID": "C3L-01924",
"StudyInstanceUID": "1.3.6.1.4.1.5962.99.1.2463459463.1074873794.1625961130119.3.0",
"InstanceCount": "4"
}, {
"StudyDateTime": "2021-07-10 23:31:13",
"PatientID": "C3L-02513",
"StudyInstanceUID": "1.3.6.1.4.1.5962.99.1.2462202516.1453336368.1625959873172.3.0",
"InstanceCount": "7"
}, {
"StudyDateTime": "2021-07-10 23:25:17",
"PatientID": "C3L-01924",
"StudyInstanceUID": "1.3.6.1.4.1.5962.99.1.2461846936.496969835.1625959517592.3.0",
"InstanceCount": "4"
}, {
"StudyDateTime": "2021-07-10 22:35:16",
"PatientID": "C3L-02515",
"StudyInstanceUID": "1.3.6.1.4.1.5962.99.1.2458845347.1905567435.1625956516003.3.0",
"InstanceCount": "6"
}, {
"StudyDateTime": "2021-07-10 21:49:46",
"PatientID": "C3L-02515",
"StudyInstanceUID": "1.3.6.1.4.1.5962.99.1.2456116127.1264613559.1625953786783.3.0",
"InstanceCount": "7"
}, {
"StudyDateTime": "2021-07-10 21:46:04",
"PatientID": "C3L-02513",
"StudyInstanceUID": "1.3.6.1.4.1.5962.99.1.2455894080.1705479047.1625953564736.3.0",
"InstanceCount": "6"
}, {
"StudyDateTime": "2021-07-10 21:13:30",
"PatientID": "C3L-01924",
"StudyInstanceUID": "1.3.6.1.4.1.5962.99.1.2453939652.2052768474.1625951610308.3.0",
"InstanceCount": "4"
}, {
"StudyDateTime": "2021-07-10 21:10:17",
"PatientID": "C3L-02515",
"StudyInstanceUID": "1.3.6.1.4.1.5962.99.1.2453746219.164669562.1625951416875.3.0",
"InstanceCount": "6"
}, {
"StudyDateTime": "2021-07-10 20:05:48",
"PatientID": "C3L-02513",
"StudyInstanceUID": "1.3.6.1.4.1.5962.99.1.2449877792.1996682667.1625947548448.3.0",
"InstanceCount": "6"
}
]
制限事項と追加の動作
DICOM タグが BigQuery でサポートされているタイプでない(除外される VR に表示される)場合、宛先 BigQuery テーブルの別の列(DroppedTags.TagName
)に表示されます。
DICOM エクスポート リクエストのトラブルシューティング
BigQuery リクエストに対する DICOM のメタデータのエクスポート中にエラーが発生した場合は、エラーが Cloud Logging に記録されます。詳細については、Cloud Logging でのエラーログの表示をご覧ください。