このページでは、探索と分析のために 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 メタデータを別のプロジェクトにエクスポートする場合は、DICOM メタデータを別のプロジェクトにエクスポートするをご覧ください。
Console
DICOM メタデータを BigQuery にエクスポートするには、次の手順を行います。
- コンソールで、[データセット] ページに移動します。
[データセット] ページに移動 - DICOM メタデータのエクスポート元の DICOM ストアを含むデータセットをクリックします。
- データストアのリストで、DICOM ストアの [アクション] リストから [エクスポート] を選択します。
- 表示される [DICOM ストアのエクスポート] ページで、[BigQuery テーブル] を選択します。
- [プロジェクト] リストで、BigQuery プロジェクトを選択します。
- [データセット ID] リストでデータセットを選択します。
- [テーブル名] フィールドに新しいテーブル名を入力します。
宛先テーブルが有効であることを確認するため、BigQuery によって各選択項目がチェックされます。 - [BigQuery の出力オプション] セクションで、次のいずれかを選択します。
- 既存のテーブルにデータを追加する:
writeDisposition
パラメータのWRITE_APPEND
値と同等です。 - リソースをエクスポートする前に、データセット内の対象の DICOM テーブル内の既存のデータを削除する: これは
writeDisposition
パラメータのWRITE_TRUNCATE
値と同等です。
- 既存のテーブルにデータを追加する:
- [エクスポート] をクリックして、DICOM メタデータを BigQuery の定義済み宛先にエクスポートします。
- オペレーションのステータスを追跡するには、[オペレーション] タブをクリックします。オペレーションが完了すると、次の状況が表示されます。
- [長時間実行オペレーションのステータス] セクションでは、[OK] の見出しの下に、緑色のチェックマークが表示されます。
- [概要] セクションでは、オペレーション ID と同じ行に緑色のチェックマークと [OK] インジケーターが表示されます。
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/query/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/query/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/query/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/query/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 を表示できます。次に、以下の手順を行います。
-
目的のスタディ 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 内のフィルタ ファイルの場所を使用します。次のサンプルは、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/query/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/query/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/query/CLOUD_LOGGING_URL" }, "done": true, "response": { "@type": "..." } }
BigQuery で DICOM データのクエリと分析を行う
DICOM メタデータを BigQuery にエクスポートした後、サンプルクエリを実行してメタデータの詳細を取得できます。次のサンプルは、一般的なユースケースに対してクエリを実行する方法を示しています。
メタデータを横断する検索
Picture Archiving 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 でのエラーログの表示をご覧ください。