Memahami skema DICOM BigQuery

Halaman ini menjelaskan skema tabel BigQuery yang dibuat saat mengekspor metadata DICOM ke BigQuery.

Terminologi

Untuk memahami skema dan komponennya, pahami terminologi DICOM. Secara khusus, halaman ini menggunakan beberapa istilah yang ditemukan dalam 3.10 Struktur Data dan Definisi Encoding DICOM.

Ringkasan

Cloud Healthcare API otomatis membuat skema BigQuery menggunakan data yang Anda ekspor dan kamus DICOM. Skema ini hanya berisi kolom untuk elemen data DICOM yang ada dalam metadata. Satu-satunya pengecualian adalah Person Name VR.

Saat mengekspor metadata DICOM, Cloud Healthcare API akan mencoba mengekspor semua elemen data dalam metadata. Untuk informasi tentang apa yang terjadi jika muncul masalah, lihat Jenis yang bertentangan dan tidak cocok.

Elemen data standar dan pribadi

DICOM menyediakan elemen data standar yang sesuai dengan spesifikasi yang telah ditentukan. Untuk mengetahui daftar elemen data ini, lihat Registry Elemen Data DICOM.

Jika harus mengomunikasikan data yang tidak sesuai dengan elemen standar, Anda dapat menggunakan elemen data pribadi.

Elemen data standar

Perilaku berikut berlaku untuk elemen data standar. Untuk perilaku elemen data pribadi, lihat Elemen data pribadi.

Nama kolom

Kolom dalam skema BigQuery yang dihasilkan diberi nama sesuai dengan kata kunci elemen data. Misalnya, jika metadata DICOM berisi elemen data yang kata kuncinya adalah InstanceCreationDate, skema yang dihasilkan akan memiliki kolom yang sesuai bernama InstanceCreationDate.

Perilaku elemen data DICOM standar

Tabel berikut menampilkan daftar Representasi Nilai (VR) dan singkatannya. Untuk elemen data apa pun yang diekspor ke BigQuery yang berisi salah satu VR ini, elemen data menggunakan jenis data BigQuery yang ada di "Jenis data":

VR Jenis data
  • Entitas Aplikasi (AE)
  • String Usia (AS)
  • String Kode (CS)
  • String Panjang (LO)
  • Teks Panjang (LT)
  • String Pendek (SH)
  • Teks Singkat (ST)
  • Karakter Tanpa Batas (UC)
  • ID Unik (UI/UID)
  • Universal Resource Identifier (UR) atau Universal Resource Locator (URI/URL)
  • Teks Tak Terbatas (UT)
String
Tanggal (DA) Date
Waktu (TM) Waktu
Tanggal Waktu (DT) Stempel waktu
  • String Desimal (DS)
  • String Bilangan Bulat (IS)
String
Nama Orang (PN) Struktur (Kumpulan data)
  • Floating Point Single (FL)
  • Titik Mengambang Ganda (FD)
Titik mengambang
  • Tag Atribut (AT)
  • Ditandatangani Panjang (SL)
  • Video Shorts Bertanda Tangan (SS)
  • Panjang Tanpa Tanda Tangan (UL)
  • Video Shorts Tanpa Tanda Tangan (AS)
Bilangan Bulat
Urutan Item (SQ) Struct (Catatan)

Mode nullable dan berulang

Bergantung pada nilai Multiplisitas Nilai (VM) dari elemen data, kolom BigQuery-nya memiliki salah satu dari dua modes: NULLABLE atau REPEATED.

Jika elemen data memiliki nilai VM 1, yang menunjukkan bahwa elemen data tersebut unik, elemen data akan menggunakan mode NULLABLE. Untuk nilai VM lainnya, elemen data menggunakan mode REPEATED.

Misalnya, seperti yang ditampilkan dalam Registry Elemen Data DICOM, kata kunci SOPInstanceUID memiliki nilai VM 1. Akibatnya, saat diekspor ke BigQuery, modenya adalah NULLABLE, dan representasinya dalam tabel akan terlihat seperti berikut (jika ditampilkan sebagai JSON):

"SOPInstanceUID": "0.0.000.000000.0.000.0000.0000000.0000.0000000000.000",

Sebaliknya, kata kunci ImageType memiliki nilai VM sebesar 2-n. Akibatnya, saat diekspor ke BigQuery, modenya adalah REPEATED, dan representasinya dalam tabel akan terlihat seperti berikut (jika diwakili sebagai JSON):

"ImageType": [
  "ORIGINAL",
  "PRIMARY",
  "OTHER",
  "..."
],

VR yang dikecualikan

Data biner tidak diekspor ke tabel BigQuery yang dihasilkan, sehingga elemen data yang berisi VR berikut tidak diekspor. Sebagai gantinya, VR berikut disertakan dalam kolom terpisah (disebut DroppedTags.TagName) di tabel BigQuery tujuan.

  • Ganda (OD) Lainnya
  • Float Lainnya (OF)
  • Panjang Lainnya (OL)

VR berikut tidak disertakan dalam metadata yang diekspor dan tidak disertakan dalam kolom DroppedTags.TagName.

  • Byte Lainnya (OB)
  • Kata Lain (OW)
  • Tidak diketahui (UN)

Nama Orang VR

Setiap kolom dalam skema BigQuery dengan VR Person Name (PN) selalu berisi tiga subkolom, terlepas dari apakah subkolom berisi data atau tidak. Ketiga subkolom tersebut adalah:

  • Alfabetis
  • Ideografis
  • Fonetik

Masing-masing dari tiga subkolom memiliki lima subkolomnya sendiri:

  • FamilyName
  • GivenName
  • MiddleName
  • NamePrefix
  • NameSuffix

Misalnya, pertimbangkan tag publik "OperatorsName (0008,1070)" yang memiliki VR Nama Orang (PN). Misalkan nilai OperatorsName adalah "Darcy Smith". Skema ini akan berisi kolom OperatorsName yang berisi subkolom yang tercantum sebelumnya, tetapi hanya Alphabetic.FamilyName (Smith) dan Alphabetic.givennName (Darcy) yang akan berisi nilai.

Elemen data pribadi

Beberapa penerapan klinis mungkin mengharuskan Anda menyimpan data khusus yang tidak sesuai dengan struktur elemen data publik. Sebagai alternatif, Anda dapat menggunakan elemen data pribadi.

Elemen data pribadi dengan VR SQ (Urutan Item) memiliki perilaku yang sama seperti elemen data standar. Elemen data pribadi dengan VR SQ disebut urutan data pribadi.

Elemen data pribadi yang tidak memiliki VR SQ ditempatkan di bawah kolom yang disebut OtherElements dan dikonversi menjadi string. Elemen data pribadi ini disebut data pribadi non-urutan. Untuk mengueri elemen data pribadi non-urutan, kueri Anda harus menelusuri dalam kolom OtherElements elemen.

Kolom OtherElements berisi dua subkolom, "Data" dan "Tag". Kolom data adalah representasi string dari nilai elemen data pribadi. Jenisnya selalu REPEATED. Kolom Tag menggunakan format "Tag_HEX", dengan HEX adalah string heksadesimal dari nomor tag.

LastUpdated dan Type kolom

Kolom LastUpdated dan Type ditambahkan ke tabel BigQuery yang dibuat saat Anda mengekspor metadata DICOM. Kolom ini bukan elemen data standar atau pribadi, dan tidak sesuai dengan Registry Elemen Data DICOM.

Perilaku kolom ini adalah sebagai berikut:

  • Kolom LastUpdated berisi nilai stempel waktu yang menunjukkan kapan instance DICOM disisipkan ke atau dihapus dari penyimpanan DICOM.
  • Kolom Type berisi string yang menunjukkan jenis operasi yang terjadi. Kemungkinan nilainya adalah CREATE atau DELETE.

Jenis yang bertentangan dan tidak cocok

Jika terjadi konflik jenis, seperti saat tag publik digunakan dengan jenis yang salah, tag publik tersebut akan diperlakukan seolah-olah tag tersebut adalah tag pribadi. Nilai elemen data ditempatkan dalam kolom yang disebut OtherElements dan nilai dikonversi menjadi string.

Misalnya, metadata DICOM berisi tag dengan:

  • Nomor tag "(4010,1017)"
  • VR SL (Ditandatangani Panjang)
  • Nilai 32

(4010,1017) adalah nomor tag yang sama dengan "Mass", yang merupakan nama tag publik dalam spesifikasi DICOM yang memiliki VR FL. Operasi ekspor mengharapkan elemen data dengan nomor tag "(4010,1017)" menjadi nama tag publik "Mass" dengan VR FL. Oleh karena itu, operasi ekspor diharapkan untuk mengonversi nilai elemen data menjadi float (seperti yang ditunjukkan dalam tabel dalam Perilaku elemen data DICOM standar

Konflik jenis terjadi karena tag apa pun dengan VR SL menggunakan jenis data bilangan bulat. Oleh karena itu, tag dikonversi menjadi tag pribadi dan ditambahkan ke kolom OtherElements.

Jika nama tag publik non-urutan digunakan untuk data urutan, ketidakcocokan jenis akan terjadi. Akibatnya, urutan tersebut diperlakukan seolah-olah merupakan elemen data pribadi. Nomor heksadesimal nama tag publik digunakan, bukan nama tag publik sebagai nama kolom dalam skema BigQuery. Bilangan heksadesimal adalah string jenis.

Contoh: Membuat kueri elemen data publik dan pribadi

Pertimbangkan cuplikan skema berikut yang diwakili sebagai JSON. Skema dibuat setelah mengekspor data DICOM ke 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"
  }
  ...
]

Contoh berikut menunjukkan cara membuat kueri untuk elemen data publik SOPInstanceUID. Untuk mengakses nilai kolom, jalankan kueri berikut:

#standardSQL
SELECT
  SOPInstanceUID
FROM
  `PROJECT_ID.DATASET_ID.TABLE_ID`

Menjalankan kueri akan menampilkan output yang mirip dengan berikut ini:

[
  ...
  {
    "SOPInstanceUID": "0.0.000.000000.0.000.0000.0000000.0000.0000000000.000"
  },
  ...
]

Contoh berikut menunjukkan cara membuat kueri untuk data pribadi non-urutan. Jalankan kueri berikut terhadap kolom OtherElements yang ada di dalam kolom Tag_12345678. Perhatikan penggunaan operator UNNEST, yang diperlukan karena Anda membuat kueri RECORD.

#standardSQL
SELECT
  Tag_12345678.OtherElements AS OtherElements
FROM
  `PROJECT_ID.DATASET_ID.TABLE_ID`,
  UNNEST(Tag_12345678) AS Tag_12345678

Menjalankan kueri akan menampilkan output yang mirip dengan berikut ini, bergantung pada jumlah dan jenis data di kolom Tag_12345678.OtherElements:

[
  {
    "OtherElements": [
      {
        "Tag": "Tag_12345678",
        "Data": [
          "DATA"
        ]
      }
    ]
  },
  {
    "OtherElements": [
      {
        "Tag": "Tag_12345678",
        "Data": [
          "DATA"
        ]
      }
    ]
  },
  {
    "OtherElements": [
      {
        "Tag": "Tag_12345678",
        "Data": [
          "DATA"
        ]
      }
    ]
  }
]

Langkah selanjutnya

Pelajari operasi SQL standar BigQuery lebih lanjut dan lihat contohnya.