共用方式為


醫療保健數據解決方案中的 DICOM 元數據轉換對應

本文說明醫療保健資料解決方案環境如何跨不同湖倉等級擷取和轉換 DICOM 中繼資料。 您還可以了解端到端中繼資料轉換過程,並了解每個等級的轉換對應。

透過擷取管線進行的中繼資料轉換由以下三個連續階段組成:

  1. 將 DICOM 中繼資料擷取並轉換為銅牌增量表
  2. 從銅牌到銀牌增量表的中繼資料轉換
  3. 從銀牌到金牌增量表的中繼資料轉換

以下各節詳細介紹每個階段的轉換對應。

將 DICOM 中繼資料轉換為銅牌增量表的轉換對應

DICOM 標準定義了 5000 多個 DICOM 標籤,其中包括廠商特定的私人標籤。 本節會找出我們要檢索哪些標籤,並說明銅牌湖倉中的擷取過程

標籤提取和 ImagingDicom delta 表創建過程包括以下操作:

  1. 從 DICOM 檔案中擷取:從銅牌湖倉最佳化資料夾結構中的 DICOM (DCM) 檔案中擷取所有標記的集合。

  2. 像素資料標籤排除:從集合中排除 DICOM 像素數據標記 (7FE0,0010) 和圖像像素資料模組屬性。 DICOM 像素資料標籤包括圖像/像素等級的詳細資訊。

  3. 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 處理其本機類型 (結構、陣列、映射)。

  4. 提取並對應銅牌湖存放庫:進一步提取以下 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 處理其本機類型 (結構、陣列、映射)。

  5. DCM 檔案路徑存儲:DCM 檔的完整文件路徑將寫入 filePath ImagingDicom delta 表中的 列。

  6. 修改時間日誌記錄:DCM 檔在其源處修改的最新時間戳將寫入 sourceModifiedAt ImagingDicom delta 表中的 列。

  7. 命名空間存儲:命名空間值將寫入 ImagingDicom sourceSystem delta 表中的 列。 此值派生自統一資料夾結構中的資料夾名稱。

    • 對於常規攝取,namespace 值是之後 Files\Process\Imaging\DICOM的文件夾名稱。
    • 對於自帶存儲 (BYOS) 攝取,命名空間值是之後 Files\External\Imaging\DICOM的資料夾名稱。
  8. 執行時間日誌記錄:筆記本的執行日期和時間將寫入 createdDatetime ImagingDicom delta 表中的 列。

銅牌到銀牌增量表的轉換對應

下表說明瞭將 DICOM 元數據從銅牌湖存放庫 ImagingDicom delta 表轉換為 銀牌湖存放庫中的 ImagingMetastoreImagingStudy 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 identifierOrigidOrigstartedOrig

  • 帶有後綴的 _string 列存儲包含複雜 JSON 數據的欄位的字串化版本,從而支援通過 SQL 分析端點進行查詢。 這種做法適用於銀色湖存放庫中的所有表,並包括 ImagingStudy 表中的 以下列:meta_stringtext_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 值:implicitRuleslanguagetext 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_idprocedure_occurrence_idanatomic_site_concept_id