本頁說明如何將 DICOM 中繼資料匯出至 BigQuery,以供探索和分析。如要瞭解匯出 DICOM 中繼資料時建立的 BigQuery 結構定義,請參閱「瞭解 BigQuery DICOM 結構定義」。
設定 BigQuery 權限
將 DICOM 中繼資料匯出至 BigQuery 資料表前,您必須授予 Cloud Healthcare 服務代理程式 服務帳戶額外權限。詳情請參閱「DICOM 儲存庫 BigQuery 權限」。
設定 BigQuery 目的地
設定 BigQuery 目的地時,請使用完整 URI,如下所示:bq://PROJECT_ID.BIGQUERY_DATASET_ID.BIGQUERY_TABLE_ID
- 目的地資料表是否已存在
- 您是否已設定
force
欄位 (使用 API) 或--overwrite-table
標記 (使用 Google Cloud CLI) - 您是否已為
writeDisposition
列舉設定值。如果您使用writeDisposition
列舉,請勿設定force
欄位。
- 如果目的地資料表已存在,且
force
設為true
或指定--overwrite-table
旗標,匯出作業會覆寫現有資料表。 - 如果目的地資料表已存在,且
force
設為false
或未指定--overwrite-table
旗標,就會發生錯誤。 - 如果目的地資料表不存在,無論您是否指定
force
欄位或--overwrite-table
旗標,系統都會建立新資料表。 - 如要瞭解
writeDisposition
的行為,請參閱說明文件。writeDisposition
列舉的行為與使用force
時的選項類似,但有以下例外狀況:如果目的地資料表已存在且為空白,匯出作業會完成,而不是傳回錯誤。
匯出 DICOM 中繼資料
下列範例說明如何將 DICOM 中繼資料匯出至 BigQuery 資料表。在這些範例中,DICOM 存放區和 BigQuery 資料表位於同一個專案。如要將 DICOM 中繼資料匯出至其他專案的 BigQuery 資料表,請參閱「將 DICOM 中繼資料匯出至其他專案」。
控制台
如要將 DICOM 中繼資料匯出至 BigQuery 資料表,請完成下列步驟:
在 Google Cloud 控制台中,前往「Datasets」(資料集) 頁面。
按一下包含要匯出中繼資料的 DICOM 儲存庫的資料集。
在 DICOM 儲存庫所在的資料列中,開啟「動作」清單,然後選取「匯出」。
在隨即顯示的「Export DICOM store」(匯出 DICOM 儲存庫) 頁面中,選取「BigQuery table」(BigQuery 資料表)。
在「Project」(專案) 欄位中,按一下「Browse」(瀏覽),然後選取專案。
在「資料集」清單中,選取要匯出 DICOM 中繼資料的 BigQuery 資料集。
在「Table」(資料表) 欄位中,輸入新的資料表名稱。BigQuery 會檢查每個選取項目,確保目的地資料表有效。
在「目標資料表寫入配置」部分,選取下列其中一項。這些選項對應於
WriteDisposition
列舉。- 只在目的地資料表空白時匯出資料:相當於
WRITE_EMPTY
- 將資料附加至目的地資料表:相當於
WRITE_APPEND
- 在寫入執行個體前清除目的地資料表中的所有現有資料:等同於
WRITE_TRUNCATE
。
- 只在目的地資料表空白時匯出資料:相當於
按一下「匯出」,將 DICOM 中繼資料匯出至 BigQuery 資料表。
- 如要追蹤作業狀態,請按一下「Operations」(作業) 分頁標籤。作業完成後,會顯示下列指標:
- 「長時間執行的作業狀態」部分在「OK」標題下方顯示綠色勾號。
- 「總覽」部分會顯示綠色勾號和「OK」指標,與作業 ID 位於同一列。
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:現有 BigQuery 資料集的名稱,您要將 DICOM 中繼資料匯出至該資料集
- BIGQUERY_TABLE_ID:BigQuery 資料集中新資料表或現有資料表的名稱。如果匯出作業會建立新資料表,請參閱資料表命名,瞭解資料表名稱規定。
- WRITE_DISPOSITION:
WriteDisposition
列舉的值。請使用下列其中一個值: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:現有 BigQuery 資料集的名稱,您要將 DICOM 中繼資料匯出至該資料集
- BIGQUERY_TABLE_ID:BigQuery 資料集中新資料表或現有資料表的名稱。如果匯出作業會建立新資料表,請參閱資料表命名,瞭解資料表名稱規定。
- WRITE_DISPOSITION:
WriteDisposition
列舉的值。請使用下列其中一個值: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 ContentAPIs Explorer
複製要求內文並開啟方法參考資料頁面。系統會在頁面右側開啟 APIs 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 ContentAPIs Explorer
開啟方法參考頁面。系統會在頁面右側開啟 APIs Explorer 面板。您可以使用這項工具來傳送要求。完成任何必填欄位,然後按一下「執行」。
"done": true
,表示長時間執行的作業已完成。
將 DICOM 中繼資料匯出至其他專案
如要將一個專案中 DICOM 儲存庫的 DICOM 中繼資料匯出至另一個專案的 BigQuery 資料集,請先參閱「將 DICOM 中繼資料匯出至其他專案的權限」,瞭解如何在目的地專案中設定 IAM 權限。
gcloud
如要將一個專案中 DICOM 儲存庫的 DICOM 中繼資料匯出至另一個專案的 BigQuery 資料表,請使用 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
列舉的值。請使用下列其中一個值: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 儲存庫的 DICOM 中繼資料匯出至另一個專案的 BigQuery 表格,請使用 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
列舉的值。請使用下列其中一個值: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 ContentAPIs Explorer
複製要求內文並開啟方法參考資料頁面。系統會在頁面右側開啟 APIs 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 ContentAPIs Explorer
開啟方法參考頁面。系統會在頁面右側開啟 APIs Explorer 面板。您可以使用這項工具來傳送要求。完成任何必填欄位,然後按一下「執行」。
"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
匯出整個系列。
請參考下列篩選器檔案。篩選檔案會匯出一個研究、兩個序列和三個個別執行個體:
/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。
舉例來說,將 DICOM 中繼資料匯出至 BigQuery 後,您可以執行下列查詢,將研究、系列和例項 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
傳遞篩選器檔案
建立篩選器檔案後,您可以使用 REST API 呼叫 DICOM 匯出作業,並傳遞篩選器檔案。下列範例說明如何使用篩選器匯出 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:現有 BigQuery 資料集的名稱,您要將 DICOM 中繼資料匯出至該資料集
- BIGQUERY_TABLE_ID:BigQuery 資料集中新資料表或現有資料表的名稱。如果匯出作業會建立新資料表,請參閱資料表命名,瞭解資料表名稱規定。
- BUCKET:包含篩選器檔案的 Cloud Storage bucket 名稱。如果篩選器檔案位於目錄中,請在路徑中加入該目錄。
- FILTER_FILE:Cloud Storage 值區中篩選器檔案的位置和名稱
- WRITE_DISPOSITION:
WriteDisposition
列舉的值。請使用下列其中一個值: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:現有 BigQuery 資料集的名稱,您要將 DICOM 中繼資料匯出至該資料集
- BIGQUERY_TABLE_ID:BigQuery 資料集中新資料表或現有資料表的名稱。如果匯出作業會建立新資料表,請參閱資料表命名,瞭解資料表名稱規定。
- BUCKET:包含篩選器檔案的 Cloud Storage bucket 名稱。如果篩選器檔案位於目錄中,請在路徑中加入該目錄。
- FILTER_FILE:Cloud Storage 值區中篩選器檔案的位置和名稱
- WRITE_DISPOSITION:
WriteDisposition
列舉的值。請使用下列其中一個值: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 ContentAPIs Explorer
複製要求內文並開啟方法參考資料頁面。系統會在頁面右側開啟 APIs 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 ContentAPIs Explorer
開啟方法參考頁面。系統會在頁面右側開啟 APIs Explorer 面板。您可以使用這項工具來傳送要求。完成任何必填欄位,然後按一下「執行」。
"done": true
,表示長時間執行的作業已完成。
在 BigQuery 中查詢及分析 DICOM 資料
將 DICOM 中繼資料匯出至 BigQuery 資料表後,即可執行範例查詢,進一步瞭解中繼資料。下列範例說明如何針對一些常見用途執行查詢。
搜尋中繼資料
假設您想搜尋大量中繼資料,但這些資料難以在其他系統 (例如影像封存與通訊系統 (PACS) 或供應商中立封存 (VNA)) 中搜尋,以下查詢顯示如何查詢病患的 PatientID
值,並使用 DICOMweb 路徑擷取特定影像執行個體。這個範例使用「NIH Chest X-ray dataset」中的「chc-nih-chest-xray.nih_chest_xray.nih_chest_xray」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 匯出要求問題
如果將 DICOM 中繼資料匯出至 BigQuery 的要求發生錯誤,系統會將錯誤記錄到 Cloud Logging。詳情請參閱查看 Cloud Logging 中的錯誤記錄檔。