將 DICOM 中繼資料串流至 BigQuery

本頁說明如何設定 DICOM 儲存庫,以便在發生下列情況時,將 DICOM 執行個體中繼資料匯出至 BigQuery 資料表:

將 DICOM 中繼資料串流至 BigQuery 資料表,可讓資料表與 DICOM 資料同步,方便您對最新版 DICOM 儲存庫執行複雜查詢。

事前準備

設定 DICOM 儲存庫前,請先完成下列

設定 BigQuery 權限

將 DICOM 中繼資料串流至 BigQuery 前,請務必將必要權限授予 Cloud Healthcare Service Agent 服務帳戶。詳情請參閱「DICOM 儲存庫 BigQuery 權限」。

瞭解如何將 DICOM 中繼資料匯出至 BigQuery

設定串流前,請先瞭解如何將 DICOM 中繼資料匯出至 BigQuery

設定 DICOM 儲存庫

如要啟用串流至 BigQuery,請在 DICOM 儲存庫中設定 StreamConfig 物件。在 StreamConfig 物件中,將 BigQueryDestination 物件設為完全合格的 BigQuery 資料表 URI,做為 DICOM 執行個體中繼資料目的地。

您最多可以指定五個 BigQuery 目的地,以半形逗號分隔的 JSON 物件表示。

刪除 DICOM 儲存庫中的 DICOM 執行個體時,系統不會刪除包含這些執行個體中繼資料的 BigQuery 資料列。

控制台

如要更新 DICOM 儲存庫以啟用 BigQuery 串流,請完成下列步驟:

  1. 在 Google Cloud 控制台中,前往「資料集」頁面。
    前往「資料集」
  2. 選取要編輯 DICOM 儲存庫的資料集。
  3. 選取要新增串流設定的 DICOM 存放區。
  4. 在「資料儲存區詳細資料」頁面的「總覽」分頁中,按一下「新增串流設定」
  5. 在「New streaming configuration」(新的串流設定) 欄位中,按一下「Browse」(瀏覽)
    1. 在「選取資料表」窗格中,選取 BigQuery 資料表。
    2. 按一下 [選取]。
  6. 按一下 [完成]

REST

下列範例說明如何更新 DICOM 存放區,以啟用 BigQuery 串流。在這些範例中,DICOM 儲存庫和 BigQuery 資料表位於同一個專案。如要將 DICOM 中繼資料匯出至其他專案,請參閱「將 DICOM 中繼資料匯出至其他專案」。

使用任何要求資料之前,請先替換以下項目:

  • PROJECT_ID:您的 Google Cloud 專案 ID
  • LOCATION:資料集位置
  • DATASET_ID:DICOM 儲存庫的父項資料集
  • DICOM_STORE_ID:DICOM 儲存庫 ID
  • BIGQUERY_DATASET_ID:現有 BigQuery 資料集的名稱
  • BIGQUERY_TABLE_ID:BigQuery 資料集中的資料表專屬名稱。如需命名規定,請參閱「資料表命名」。BigQuery 資料集必須存在,但 Cloud Healthcare API 可以更新現有資料表或建立新資料表。

JSON 要求主體:

{
  'streamConfigs': [{
     'bigqueryDestination': {
      'tableUri': 'bq://PROJECT_ID.BIGQUERY_DATASET_ID.BIGQUERY_TABLE_ID'
     }
  }]
}

如要傳送要求,請選擇以下其中一個選項:

curl

將要求主體儲存在名為 request.json 的檔案中。 在終端機中執行下列指令,在目前目錄中建立或覆寫這個檔案:

cat > request.json << 'EOF'
{
  'streamConfigs': [{
     'bigqueryDestination': {
      'tableUri': 'bq://PROJECT_ID.BIGQUERY_DATASET_ID.BIGQUERY_TABLE_ID'
     }
  }]
}
EOF

接著,請執行下列指令來傳送 REST 要求:

curl -X PATCH \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID?updateMask=streamConfigs"

PowerShell

將要求主體儲存在名為 request.json 的檔案中。 在終端機中執行下列指令,在目前目錄中建立或覆寫這個檔案:

@'
{
  'streamConfigs': [{
     'bigqueryDestination': {
      'tableUri': 'bq://PROJECT_ID.BIGQUERY_DATASET_ID.BIGQUERY_TABLE_ID'
     }
  }]
}
'@  | Out-File -FilePath request.json -Encoding utf8

接著,請執行下列指令來傳送 REST 要求:

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

Invoke-WebRequest `
-Method PATCH `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID?updateMask=streamConfigs" | Select-Object -Expand Content

APIs Explorer

複製要求內文並開啟方法參考資料頁面。系統會在頁面右側開啟 APIs Explorer 面板。您可以使用這項工具來傳送要求。將要求內文貼到這項工具中,並填妥其他必填欄位,然後按一下「Execute」(執行)

您應該會收到如下的 JSON 回應:

刪除中繼資料

在舊版 Cloud Healthcare API 中,只有在 DICOM 執行個體插入 DICOM 儲存庫時,DICOM 執行個體中繼資料才會匯出至 BigQuery。新增刪除作業的中繼資料時,系統會在產生的 DICOM 中繼資料表新增兩個資料欄,分別命名為 TypeLastUpdated

在導入刪除中繼資料之前,資料表中的任何中繼資料,這些資料欄的值都是 NULLNULL 是最低值,以遞減順序排序時會顯示在最後。

產生的 BigQuery 檢視表

在 DICOM 儲存庫中插入或刪除 DICOM 執行個體時,系統會更新已設定的 BigQuery 資料表。

如果資料表檢視區塊不存在,系統會建立檢視區塊。否則系統會更新檢視畫面。

限制和其他行為

匯出的中繼資料可能缺少部分 DICOM 標記。如果是,系統會將缺少的代碼新增至目的地 BigQuery 資料表中,名為 DroppedTags.TagName 的獨立資料欄。

代碼遺失的可能原因如下:

  • DICOM 標記是「排除的 VR」中列出的不支援 VR。
  • DICOM 標記大約超過 1 MB。
  • 目的地 BigQuery 資料表的資料欄數超過資料欄數上限。如果匯出至 BigQuery 資料表的 DICOM 中繼資料超過資料欄限制,系統會將不符合現有資料欄的 DICOM 標記新增至 DroppedTags.Name 資料欄。如果無法新增 DroppedTags 欄,系統會捨棄 DICOM 標記,且不會發出通知,但會產生警告記錄。詳情請參閱「排解 DICOM 串流要求問題,查看記錄」。

將刪除中繼資料併入現有資料表

產生的檢視區塊行為取決於基礎資料表是否含有在刪除中繼資料功能推出前新增的中繼資料。

假設 BigQuery 資料表包含刪除中繼資料支援功能推出前的 DICOM 中繼資料,且發生下列情況:

  1. 將 DICOM 執行個體插入 DICOM 儲存庫。
  2. 從 DICOM 儲存庫刪除 DICOM 執行個體。
  3. 編輯原始 DICOM 執行個體的標記,然後將修改後的 DICOM 執行個體插入 DICOM 儲存庫。

由於 BigQuery 資料表包含原始中繼資料,因此原始 DICOM 執行個體和編輯版本具有相同的研究、系列和執行個體專屬 ID (UID)。產生的檢視畫面可能包含原始 DICOM 執行個體或最新的 DICOM 執行個體。如果沒有 LastUpdated 欄,檢視畫面就無法判斷哪個 DICOM 執行個體較新。

如要確保查詢的是最新的 DICOM 執行個體中繼資料,請執行下列其中一項操作:

  • 請查詢基礎資料表,而非檢視畫面。確認查詢會搜尋已編輯 DICOM 執行個體中的更新標記。
  • 刪除包含 DICOM 中繼資料的現有資料表,然後手動將 DICOM 中繼資料匯出至 BigQuery,重新建立資料表。 重新建立的資料表包含 LastUpdated 欄。

    這個選項會移除歷來串流中繼資料,但可確保表格包含 LastUpdated 欄,且該欄含有有效值。

排解 DICOM 串流要求問題

如果將 DICOM 中繼資料匯出至 BigQuery 的要求發生錯誤,系統會將錯誤記錄到 Cloud Logging。詳情請參閱查看 Cloud Logging 中的錯誤記錄檔

如要在 Google Cloud 控制台中篩選串流 DICOM 中繼資料錯誤記錄,請完成下列步驟:

  1. 前往「Logs Explorer」頁面。

    前往「Logs explorer」(記錄檔探索工具)

  2. 在「Query」(查詢) 欄位中,輸入下列查詢:

    logName="healthcare.googleapis.com%2Fdicom_stream"
    
  3. 點選「執行查詢」

    「Query results」(查詢結果) 部分會顯示所有錯誤記錄。