醫療保健數據解決方案中的 DICOM 元數據轉換對應
本文說明醫療保健資料解決方案環境如何跨不同湖倉等級擷取和轉換 DICOM 中繼資料。 您還可以了解端到端中繼資料轉換過程,並了解每個等級的轉換對應。
透過擷取管線進行的中繼資料轉換由以下三個連續階段組成:
- 將 DICOM 中繼資料擷取並轉換為銅牌增量表
- 從銅牌到銀牌增量表的中繼資料轉換
- 從銀牌到金牌增量表的中繼資料轉換
以下各節詳細介紹每個階段的轉換對應。
將 DICOM 中繼資料轉換為銅牌增量表的轉換對應
DICOM 標準定義了 5000 多個 DICOM 標籤,其中包括廠商特定的私人標籤。 本節會找出我們要檢索哪些標籤,並說明銅牌湖倉中的擷取過程
標籤提取和 ImagingDicom delta 表創建過程包括以下操作:
從 DICOM 檔案中擷取:從銅牌湖倉最佳化資料夾結構中的 DICOM (DCM) 檔案中擷取所有標記的集合。
像素資料標籤排除:從集合中排除 DICOM 像素數據標記 (7FE0,0010) 和圖像像素資料模組屬性。 DICOM 像素資料標籤包括圖像/像素等級的詳細資訊。
JSON 對應:將所有擷取的 DICOM 標籤對應到以下結構描述中鍵值組的 JSON 結構中:
METADATA_JSON_DICT_SCHEMA = MapType ( StringType(), StructType([ StructField("vr", StringType(), True), StructField("Value", ArrayType(StringType(), True), True) ]) )
這些鍵值 JSON 對將寫入 銅牌湖存放庫 ImagingDicom delta 表中的元數據 列。
注意
該
metadata_string
列還將元數據存儲為字串,因為 Fabric SQL 終端節點不支援複雜的數據類型,例如結構、陣列和映射。 您可以使用 SQL 端點 (T-SQL) 以字串形式查詢這些列,也可以使用 Spark 處理其本機類型 (結構、陣列、映射)。提取並對應銅牌湖存放庫:進一步提取以下 29 個 DICOM 標籤,並將它們寫入 ImagingDicom delta 表中的相應目標列 :
來源 DICOM 標籤 目的地資料行 必要 (0020,000D) [studyInstanceUid]
.是 (0010,0010) [patientName]
無 (0010,0040) [patientSex]
無 (0010,0020) [patientId]
.是 (0010,0030) [patientBirthDate]
無 (0008,0050) [accessionNumber]
.是 (0008,0090) [referringPhysicianName]
.是 (0008,0020) [studyDate]
.是 (0008,1030) [studyDescription]
.是 (0020,000E) [seriesInstanceUid]
.是 (0008,0060) [modality]
.是 (0008,0061) [modalitiesInStudy]
.是 (0040,0244) [performedProcedureStepStartDate]
無 (0008,1090) [manufacturerModelName]
無 (0008,0018) [sopInstanceUid]
.是 (0008,0030) [studyTime]
.是 (0008,0201) [timezoneOffsetFromUtc]
.是 (0020,1206) [numberOfStudyRelatedSeries]
.是 (0020,1208) [numberOfStudyRelatedInstances]
.是 (0020,0011) [seriesNumber]
.是 (0008,103E) [seriesDescription]
.是 (0020,1209) [numberOfSeriesRelatedInstances]
.是 (0018,0015) [bodyPartExamined]
.是 (0020,0060) [laterality]
.是 (0008,0021) [seriesDate]
.是 (0008,0031) [seriesTime]
.是 (0008,0016) [sopClassUid]
.是 (0020,0013) [instanceNumber]
.是 (0042,0010) [documentTitle]
.是 注意
有關我們為何提升這 29 個特定 DICOM 標籤的詳細資訊,請參閱 DICOM 標籤擷取。
有關擷取模式 (附加) 的詳細資訊,請移至銅牌湖倉中的附加模式。
該
modalitiesInStudy_string
列還將 modalitiesInStudy 標籤儲存 為字串,因為 Fabric SQL 端點不支援複雜的數據類型,例如結構、數位和映射。 您可以使用 SQL 端點 (T-SQL) 以字串形式查詢這些列,也可以使用 Spark 處理其本機類型 (結構、陣列、映射)。
DCM 檔案路徑存儲:DCM 檔的完整文件路徑將寫入
filePath
ImagingDicom delta 表中的 列。修改時間日誌記錄:DCM 檔在其源處修改的最新時間戳將寫入
sourceModifiedAt
ImagingDicom delta 表中的 列。命名空間存儲:命名空間值將寫入 ImagingDicom
sourceSystem
delta 表中的 列。 此值派生自統一資料夾結構中的資料夾名稱。- 對於常規攝取,namespace 值是之後
Files\Process\Imaging\DICOM
的文件夾名稱。 - 對於自帶存儲 (BYOS) 攝取,命名空間值是之後
Files\External\Imaging\DICOM
的資料夾名稱。
- 對於常規攝取,namespace 值是之後
執行時間日誌記錄:筆記本的執行日期和時間將寫入
createdDatetime
ImagingDicom delta 表中的 列。
銅牌到銀牌增量表的轉換對應
下表說明瞭將 DICOM 元數據從銅牌湖存放庫 ImagingDicom delta 表轉換為 銀牌湖存放庫中的 ImagingMetastore 和 ImagingStudy delta 表的完整對應。 ImagingMetastore delta 表將每個 DCM 檔的 DICOM 標籤作為 JSON 鍵值對存儲在元數據列中。 將所有元數據從 bronze 複製到 silver 圖層可以保持各層的數據完整性。 ImagingStudy 增量表包括為具有 FHIR 標準欄位的對齊選擇的 29 個 DICOM 標記。 它還包含更多欄位以支援資料跟蹤和世系。
ImagingDicom 中的源列 | ImagingMetastore 中的 Destination 列 | 對應詳細資料 |
---|---|---|
NA | msftModifiedDatetime |
通過應用於 silver 圖層中所有表的通用 delta merge logic 包含在內。 |
studyInstanceUid |
studyInstanceUid |
具有一對一關係的 Direct 對應。 源列中的每個值都直接映射到目標中的單個對應值。 |
seriesInstanceUid |
seriesInstanceUid |
具有一對一關係的 Direct 對應。 |
sopInstanceUid |
sopInstanceUid |
具有一對一關係的 Direct 對應。 |
sourceSystem |
msftSourceSystem |
具有一對一關係的 Direct 對應。 |
metadata |
metadata |
具有一對一關係的 Direct 對應。 |
metadata_string |
metadata_string |
具有一對一關係的 Direct 對應。 |
filePath |
filePath |
具有一對一關係的 Direct 對應。 |
sourceModifiedAt |
sourceModifiedAt |
具有一對一關係的 Direct 對應。 |
NA | id |
使用 Python UUID 模組產生的 GUID。 |
NA | msftCreatedDatetime |
通過應用於 silver 圖層中所有表的通用 delta merge logic 包含在內。 |
ImagingDicom 中的源列 | ImagingStudy 中的目標列 | 對應詳細資料 |
---|---|---|
NA | msftModifiedDatetime |
通過應用於 silver 圖層中所有表的通用 delta merge logic 包含在內。 |
NA | id |
使用 Python UUID 模組產生的 GUID。 |
NA | resourceType |
"ImagingStudy" |
sourceSystem |
msftSourceSystem |
不是直接對應。 在將生成的 NDJSON 檔寫入 Process sourceSystem 資料夾時,DICOM 資料轉換功能使用 銅牌湖存放庫中的列創建 Namespace 資料夾。 要了解有關 Namespace 資料夾的更多資訊 ,請參閱 統一資料夾結構:資料夾描述 。 在此階段,Clinical bronze Ingestion Service 使用 Namespace 文件夾名稱填充 msftSourceSystem silver 湖存放庫中的列。 例如,如果 sourceSystem 該值定義為 as MyPACSsystem 在 bronze ImagingDicom 表中,則成像 bronze 攝取服務會將新創建的 NDJSON 檔寫入以下資料夾結構: Process\Clinical\FHIR-NDJSON\MyPACSsystem\YYYY\MM\DD\ImagingStudy-<timestamp>.ndjson 當 Clinical Bronze 攝取選取這些檔時,它會自動使用 msftSourceSystem 資料夾結構中的列填充 MyPACSsystem 列,並將相同的值傳播到 Silver 圖層。 |
NA | msftFilePath |
資料夾中生成的 ImagingStudy NDJSON Process\Clinical\FHIR-NDJSON\DICOM-HDS 的文件路徑。 |
filePath |
extension |
"extension": [{"url": "lit('file_path')", "valueUrl": "col('FilePath')"}] FilePath 的值包括 OneLake 中屬於此 ImagingStudy 的所有執行個體等級 DCM 檔案的 ABFS 檔案路徑。 |
NA | 中繼 | "meta": {"lastUpdated":"current_timestamp()"} |
studyInstanceUid accessionNumber |
identifier |
ImagingStudy.identifier.where(system = 'urn:dicom:uid') =>StudyInstanceUID ImagingStudy.identifier.where(type.coding.system = 'http://terminology.hl7.org/CodeSystem/v2-0203' 和 type.coding.code = 'ACSN')) =>"AccessionNumber" |
NA | status |
"available" |
modalitiesInStudy |
modality |
modality = List{code = col('ModalitiesInStudy')} |
patientId |
subject |
""subject"": {""identifier"": {""type"": {""coding"": [{""system"": ""lit('http://terminology.hl7.org/CodeSystem/v2-0203')"",""code"": ""lit('MR')""}]},""value"": ""col('PatientID')""},""type": ""lit('Patient')""}," |
patientName patientBirthDate patientSex |
subject |
"subject": {"extension": [{"url": "lit('name')", "valueString": "col('PatientName')"}, {"url": "lit('birthDate')", "valueDateTime": "col('PatientBirthDate')"}, {"url": "lit('gender')", "valueCode": "col('PatientSex')"}]} |
studyDate studyTime timezoneOffsetFromUtc |
started |
concat_ws(' ', col('StudyDate'), col('StudyTime'), col('TimezoneOffsetFromUTC')) |
numberOfStudyRelatedSeries |
numberOfSeries |
col('NumberOfStudyRelatedSeries') |
numberOfStudyRelatedInstances |
numberOfInstances |
col('NumberOfStudyRelatedInstances') |
studyDescription |
description |
col('StudyDescription') |
seriesInstanceUid seriesDate seriesTime timezoneOffsetFromUtc modality laterality bodyPartExamined numberOfSeriesRelatedInstances seriesDescription seriesNumber sopInstanceUid sopClassUid instanceNumber documentTitle |
series |
{"series": [{"uid": "col('SeriesInstanceUID')", "started": {"tag": "SeriesDate,SeriesTime,TimezoneOffsetFromUTC", "calc": "concat_ws(' ', col('SeriesDate'), col('SeriesTime'), col('TimezoneOffsetFromUTC')).cast(TimestampType())"}, "modality": {"code": "col('Modality')", "system": "lit('https://dicom.nema.org/resources/ontology/DCM')"}, "laterality": {"display": "col('Laterality')"}, "bodySite": {"display": "col('BodyPartExamined')"}, "numberOfInstances": "col('NumberOfSeriesRelatedInstances')", "description": "col('SeriesDescription')", "number": "col('SeriesNumber')", "instance": [{"uid": "col('SOPInstanceUID')", "sopClass": {"code": "col('SOPClassUID')"}, "number": "col('InstanceNumber')", "title": "col('DocumentTitle')", "extension": [{"url": "lit('file_path')", "valueUrl": "col('FilePath')"}]}]}]} |
NA | meta.lastupdated |
Currenttimestamp() |
NA | msftCreatedDatetime |
通過應用於 silver 圖層中所有表的通用 delta merge logic 包含在內。 |
注意
在 silver 湖存放庫中創建帶有
Orig
後綴的列,以存儲源自 bronze 圖層的欄位的原始值。 此標準做法包括 ImagingStudy 表中的 以下列: 、、meta_lastUpdatedOrig
identifierOrig
和idOrig
。startedOrig
帶有後綴的
_string
列存儲包含複雜 JSON 數據的欄位的字串化版本,從而支援通過 SQL 分析端點進行查詢。 這種做法適用於銀色湖存放庫中的所有表,並包括 ImagingStudy 表中的 以下列: 、meta_string
、text_string
contained_string
identifier_string
modality_string
subject_string
encounter_string
basedOn_string
referrer_string
interpreter_string
endpoint_string
procedureReference_string
procedureCode_string
location_string
reasonCode_string
reasonReference_string
note_string
和。series_string
identifierOrig_string
生成 ImagingStudy 表中的某些欄位 以對齊 FHIR ImagingStudy 架構。 但是,由於 bronze 圖層不會從 DCM 檔中提取與這些字段準確對應的數據,因此 silver 表中的相關列仍為空。 因此,ImagingStudy 表中的 以下列包含 null 值: ,
implicitRules
,language
,text
contained
encounter
basedOn
referrer
interpreter
endpoint
procedureReference
procedureCode
location
reasonCode
reasonReference
和。note
銀牌到金牌增量表的轉換對應
下表說明瞭將銀色湖存放庫 ImagingStudy delta 表中的 DICOM 數據轉換為金色湖存放庫中的 Observational Medical Outcomes Partnership(OMOP) Image_Occurrence delta 表的完整對應。
ImagingStudy 中的“源”列 | Image_Occurrence 中的 OMOP 目標列 | 資料類型 | 對應詳細資料 |
---|---|---|---|
series.started |
image_occurrence_date |
日期 | 成像程序 (系列) 發生日期。 |
series.modality series.modality.code (和 series.modality.system 的組合) |
modality_concept_id |
string | concat_ws('<->', exp_series.modality.code, exp_series.modality.system) |
NA | SourceTable |
string | 'ImagingStudy_FHIR' |
id |
msftSourceRecordId |
string | 系統生成的源記錄的 ID。 |
identifier['studyInstanceUid'] |
image_study_uid |
string | DICOM 研究 UID。 |
subject |
person_id |
integer | 與記錄程序相關的人員的人員識別碼。 |
字典值的陣列,其中 keyis instance.uid 和 value 為 instance.extension[0].valueUrl |
local_path |
string | to_json(transform(exp_series.instance, x -> map('instanceid', x.uid, 'local_path', from_json(x.extension, 'array<struct<valueUrl:string,url:string>>')[0].valueUrl))) |
NA | SourceModifiedOn |
datetime | 記錄修改日期。 |
resourceType |
msftSourceTableName |
string | 'Imaging Study' |
msftModifiedDatetime |
msftModifiedDatetime |
datetime | 具有一對一關係的 Direct 對應。 |
series.uid |
image_occurrence_id |
string | 成像研究記錄的唯一鍵。 |
series.modality.code |
modality_source_value |
string | 系列的模組 |
注意
Gold 表中的某些欄位生成以對齊 OMOP Image_Occurrence 架構。 但是,由於 bronze 圖層不會提取與這些欄位準確對應的數據,因此 gold 表中的相關列仍為空。 因此,Image_Occurrence 表中的以下列 包含 null 值: 、 visit_occurrence_id
和 procedure_occurrence_id
。 anatomic_site_concept_id