本頁說明將 DICOM 中繼資料匯出至 BigQuery時,所建立的 BigQuery 資料表架構。
術語
如要瞭解結構定義及其元件,請先熟悉 DICOM 術語。本頁面特別使用 3.10 DICOM 資料結構和編碼定義 中的幾個詞彙。
總覽
Cloud Healthcare API 會使用您匯出的資料和 DICOM 字典,自動產生 BigQuery 結構定義。此架構只包含中繼資料中 DICOM 資料元素的資料欄。唯一的例外狀況是Person Name VR。
匯出 DICOM 中繼資料時,Cloud Healthcare API 會嘗試匯出中繼資料中的所有資料元素。如要瞭解發生問題時會發生什麼情況,請參閱「相衝突和不相符的類型」。
標準和私人資料元素
DICOM 提供符合預先定義規格的標準資料元素。如需這些資料元素的清單,請參閱「DICOM 資料元素註冊表」。
如果您必須傳送不符合標準元素的資料,可以使用私人資料元素。
標準資料元素
以下行為適用於標準資料元素。如要瞭解私人資料元素的行為,請參閱「私人資料元素」。
欄名稱
產生的 BigQuery 結構定義中的資料欄會根據資料元素的關鍵字命名。舉例來說,如果 DICOM 中繼資料包含關鍵字為 InstanceCreationDate 的資料元素,則產生的結構定義會有對應的資料欄,名稱為 InstanceCreationDate。
標準 DICOM 資料元素行為
下表列出值表示法 (VR) 及其縮寫。對於匯出至 BigQuery 的任何資料元素,如果包含其中一個 VR,則資料元素會使用「資料類型」下方的 BigQuery 資料類型:
VR | 資料類型 |
---|---|
|
字串 |
日期 (DA) | 日期 |
時間 (TM) | 時間 |
日期時間 (DT) | 時間戳記 |
|
字串 |
人名 (PN) | 結構 (記錄) |
|
浮點 |
|
整數 |
項目序列 (SQ) | 結構 (記錄) |
可為空值和重複模式
視資料元素的值多重度 (VM) 值而定,其 BigQuery 資料欄會採用以下任一模式:NULLABLE
或 REPEATED
。
如果資料元素的 VM 值為 1,表示該資料元素是唯一的,因此會使用 NULLABLE
模式。如果是其他 VM 值,資料元素會使用 REPEATED
模式。
舉例來說,如DICOM 資料元素的註冊表所示,SOPInstanceUID 關鍵字的 VM 值為 1。因此,當匯出至 BigQuery 時,其模式為 NULLABLE
,在表格中的表示方式如下 (以 JSON 表示):
"SOPInstanceUID": "0.0.000.000000.0.000.0000.0000000.0000.0000000000.000",
相反地,ImageType 關鍵字的 VM 值為 2-n。因此,當匯出至 BigQuery 時,其模式為 REPEATED
,在表格中的表示方式如下 (以 JSON 表示):
"ImageType": [
"ORIGINAL",
"PRIMARY",
"OTHER",
"..."
],
排除的 VR
二進位和長篇幅資料不會匯出至產生的 BigQuery 資料表,因此不會匯出包含下列 VR 的資料元素。相反地,目的地 BigQuery 資料表會在名為 DroppedTags.TagName
的獨立資料欄中納入下列 VR。
- 其他雙精度浮點數 (OD)
- 其他浮動 (OF)
- 其他長篇 (OL)
- 其他位元組 (OB)
- 其他字詞 (OW)
- 不明 (UN)
- 序列 (SQ) 代碼含有超過約 1 MiB 的資料
- 屬性 (AT)、浮點雙精度 (FD)、浮點單精度 (FL)、無符號長整數 (UL) 或無符號短整數 (US),如果值多重度 (VM) 大於 512。
- 基於舊版原因,如果值倍數大於 64,已擷取至 Cloud Healthcare API 的例項標記可能會列入
DroppedTags.TagName
欄。
- 基於舊版原因,如果值倍數大於 64,已擷取至 Cloud Healthcare API 的例項標記可能會列入
Person Name VR
無論子欄是否包含任何資料,具有 Person Name (PN) VR 的 BigQuery 結構定義中的每個欄都會一律包含三個子欄。三個子欄為:
- 字母順序
- 表意文字
- 拼音
三個子欄各有五個子欄:
- FamilyName
- GivenName
- MiddleName
- NamePrefix
- NameSuffix
舉例來說,請考慮「OperatorsName (0008,1070)」這個公開標記,其 VR 為「Person Name (PN)」。假設「OperatorsName」的值為「Darcy Smith」。架構會包含 OperatorsName 欄,其中包含先前列出的子欄,但只有 Alphabetic.FamilyName (Smith) 和 Alphabetic.GivenName (Darcy) 會包含值。
私人資料元素
某些臨床實作可能需要您儲存不符合公開資料元素結構的自訂資料。您也可以改用私人資料元素。
私人資料元素的 VR 為 SQ (項目序列),其行為與標準資料元素相同。具有 SQ 虛擬實體的私人資料元素稱為私人資料序列。
私人資料元素如果沒有 SQ 的 VR,就會在名為 OtherElements
的資料欄下方巢狀,並轉換為字串。這些私人資料元素稱為非序列私人資料。如要查詢非序列的私人資料元素,查詢必須在元素的 OtherElements
欄中搜尋。
OtherElements
欄包含兩個子欄:「資料」和「標記」。「資料」欄是私人資料元素值的字串表示法。一律為 REPEATED
類型。「Tag」欄的格式為「Tag_HEX」,其中 HEX 是代碼號碼的十六進位字串。
LastUpdated
和 Type
欄
匯出 DICOM 中繼資料時,系統會將 LastUpdated
和 Type
欄位新增至 BigQuery 資料表。這些欄並非標準或私人資料元素,也不對應至 DICOM 資料元素註冊表。
這些資料欄的行為如下:
衝突和不相符的類型
如果發生類型衝突 (例如使用公開標記的類型不正確),系統會將公開標記視為私人標記。資料元素的值會巢狀在名為 OtherElements
的資料欄下方,且值會轉換為字串。
舉例來說,假設 DICOM 中繼資料包含以下標記:
- 標籤編號「(4010,1017)」
- SL (Signed Long) 的 VR
- 值為 32
(4010,1017) 與「Mass」的標記編號相同,這是 DICOM 規格中的公開標記名稱,其 VR 為 FL。匯出作業預期標記編號為「(4010,1017)」的資料元素,會是「Mass」公開標記名稱,且 VR 為 FL。因此,匯出作業會將資料元素的值轉換為浮點值 (如「標準 DICOM 資料元素行為」一文的資料表所示)。
由於任何 VR 為 SL 的標記都會使用整數資料類型,因此會發生類型衝突。因此,代碼會轉換為私人代碼,並新增至 OtherElements
欄。
如果序列資料使用非序列的公開代碼名稱,就會發生類型不相符的情況。因此,系統會將序列視為私人資料元素。公開標記名稱的十六進制數字會用於 BigQuery 結構定義中的資料欄名稱,而非公開標記名稱本身。十六進制數為字串類型。
範例:查詢公開和私人資料元素
請參考以下以 JSON 表示的結構定義程式碼片段。將 DICOM 資料匯出至 BigQuery 後,系統會建立此結構定義。
[
...
{
"name": "SOPInstanceUID",
"type": "STRING"
},
{
"fields": [
{
"fields": [
{
"mode": "REQUIRED",
"name": "Tag",
"type": "STRING"
},
{
"mode": "REPEATED",
"name": "Data",
"type": "STRING"
}
],
"mode": "REPEATED",
"name": "OtherElements",
"type": "RECORD"
}
],
"mode": "REPEATED",
"name": "Tag_12345678",
"type": "RECORD"
}
...
]
以下範例說明如何查詢 SOPInstanceUID
公開資料元素。如要存取資料欄的值,請執行下列查詢:
#standardSQL SELECT SOPInstanceUID FROM `PROJECT_ID.DATASET_ID.TABLE_ID`
執行查詢會傳回類似以下的輸出內容:
[ ... { "SOPInstanceUID": "0.0.000.000000.0.000.0000.0000000.0000.0000000000.000" }, ... ]
以下範例說明如何查詢非序列私人資料。針對 Tag_12345678
欄內的 OtherElements
欄執行以下查詢。請注意,您必須使用 UNNEST
運算子,因為您要查詢 RECORD
。
#standardSQL SELECT Tag_12345678.OtherElements AS OtherElements FROM `PROJECT_ID.DATASET_ID.TABLE_ID`, UNNEST(Tag_12345678) AS Tag_12345678
執行查詢後,系統會傳回類似以下的輸出結果,具體取決於 Tag_12345678.OtherElements
欄中的資料量和類型:
[ { "OtherElements": [ { "Tag": "Tag_12345678", "Data": [ "DATA" ] } ] }, { "OtherElements": [ { "Tag": "Tag_12345678", "Data": [ "DATA" ] } ] }, { "OtherElements": [ { "Tag": "Tag_12345678", "Data": [ "DATA" ] } ] } ]
後續步驟
進一步瞭解 BigQuery 標準 SQL 作業,並查看範例。