Informazioni sullo schema DICOM di BigQuery

Questa pagina descrive lo schema della tabella BigQuery che viene creata durante l'esportazione dei metadati DICOM in BigQuery.

Terminologia

Per comprendere lo schema e i suoi componenti, acquisisci familiarità con la terminologia di DICOM. In particolare, questa pagina utilizza diversi termini descritti in 3.10 Strutture di dati e definizioni di codifica DICOM.

Panoramica

L'API Cloud Healthcare genera automaticamente lo schema BigQuery utilizzando i dati che stai esportando e il dizionario DICOM. Lo schema contiene solo colonne per gli elementi di dati DICOM esistenti nei metadati. L'unica eccezione è Person Name VR.

Durante l'esportazione dei metadati DICOM, l'API Cloud Healthcare tenta di esportare tutti gli elementi di dati nei metadati. Per informazioni su cosa succede se si verifica un problema, consulta la sezione Tipi in conflitto e non corrispondenti.

Elementi di dati standard e privati

DICOM fornisce elementi di dati standard conformi a una specifica predefinita. Per un elenco di questi elementi di dati, consulta il Registro degli elementi di dati DICOM.

Nei casi in cui devi comunicare dati non conformi agli elementi standard, puoi utilizzare gli elementi di dati privati.

Elementi di dati standard

I seguenti comportamenti si applicano agli elementi di dati standard. Per il comportamento di elementi di dati privati, consulta Elementi di dati privati.

Nomi delle colonne

Le colonne nello schema BigQuery generato vengono denominate in base alla parola chiave dell'elemento dati. Ad esempio, se i metadati DICOM contengono un elemento di dati la cui parola chiave è InstanceCreationDate, lo schema generato ha una colonna corrispondente denominata InstanceCreationDate.

Comportamento standard degli elementi di dati DICOM

La seguente tabella mostra un elenco delle rappresentazioni di valore (VR) e le relative abbreviazioni. Per qualsiasi elemento di dati esportato in BigQuery contenente una di queste VR, l'elemento di dati utilizza il tipo di dati BigQuery trovato in "Tipo di dati":

VR Tipo di dati
  • Entità applicazione (AE)
  • Stringa età (AS)
  • Stringa di codice (CS)
  • Stringa lunga (LO)
  • Testo lungo (LT)
  • Stringa corta (SH)
  • Breve testo (ST)
  • Numero illimitato di caratteri (UC)
  • Identificatore univoco (UI/UID)
  • UR (Universal Resource Identifier) o Universal Resource Locator (URI/URL)
  • Testo illimitato (UT)
Stringa
Data (DA) Date
Ora (TM) Ora
Data e ora (DT) Timestamp
  • Stringa decimale (DS)
  • Stringa intera (IS)
Stringa
Nome persona (PN) Struttura (registrazione)
  • Floating Point - Singolo (FL)
  • Doppio con virgola mobile (FD)
Virgola mobile
  • Tag attributo (AT)
  • Firma lungo (SL)
  • Short firmato (SS)
  • Lungo senza contratto (UL)
  • Short senza contratto (Stati Uniti)
Numero intero
Sequenza di elementi (SQ) Struct (registrazione)

Modalità ripetibili e null

A seconda del valore della moltiplicazione del valore (VM) di un elemento dati, la relativa colonna BigQuery ha una delle due modes: NULLABLE o REPEATED.

Se un elemento di dati ha un valore VM pari a 1, che indica che l'elemento di dati è univoco, l'elemento di dati utilizza la modalità NULLABLE. Per qualsiasi altro valore VM, l'elemento dati utilizza la modalità REPEATED.

Ad esempio, come mostrato nel Registry degli elementi di dati DICOM, la parola chiave SOPInstanceUID ha un valore VM pari a 1. Di conseguenza, quando viene esportato in BigQuery, la sua modalità è NULLABLE e la sua rappresentazione nella tabella è la seguente (se rappresentata come JSON):

"SOPInstanceUID": "0.0.000.000000.0.000.0000.0000000.0000.0000000000.000",

Al contrario, il valore VM della parola chiave ImageType è di 2-n. Di conseguenza, quando viene esportato in BigQuery, la sua modalità è REPEATED e la sua rappresentazione nella tabella è la seguente (se rappresentata come JSON):

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

VR escluse

I dati binari non vengono esportati nella tabella BigQuery generata, pertanto gli elementi di dati contenenti i seguenti VR non vengono esportati. Invece, i seguenti VR sono inclusi in una colonna separata (chiamata DroppedTags.TagName) nella tabella BigQuery di destinazione.

  • Altro doppio (OD)
  • Altro float (OF)
  • Altro lungo (OL)

I seguenti VR non sono inclusi nei metadati esportati e non sono inclusi nella colonna DroppedTags.TagName.

  • Altro byte (OB)
  • Altra parola (OW)
  • Sconosciuto (ONU)

Nome di persona VR

Ogni colonna nello schema BigQuery con un valore VR di Nome persona (PN) contiene sempre tre sottocolonne, indipendentemente dal fatto che contengano o meno dati. Le tre sottocolonne sono:

  • Alfabetico
  • Ideografico
  • Fonetico

Ognuna delle tre sottocolonne ha le sue cinque sottocolonne:

  • FamilyName
  • GivenName
  • MiddleName
  • NamePrefix
  • NameSuffix

Ad esempio, considera il tag pubblico "OperatorsName (0008,1070)", che ha un VR di Person Name (PN). Supponiamo che il valore di OperatorsName sia "Darcy Smith". Lo schema conterrà una colonna OperatorsName contenente le sottocolonne elencate in precedenza, ma solo Alphabetic.FamilyName (Smith) e Alphabetic.GivenName (Darcy) conterranno valori.

Elementi di dati privati

Alcune implementazioni cliniche potrebbero richiedere l'archiviazione di dati personalizzati che non rientrano nella struttura degli elementi di dati pubblici. In alternativa, puoi utilizzare elementi di dati privati.

Gli elementi di dati privati con una VR di SQ (Sequenza di elementi) hanno lo stesso comportamento degli elementi di dati standard. Gli elementi di dati privati con una VR di SQ sono chiamati sequenze di dati privati.

Gli elementi di dati privati che non hanno un VR di SQ vengono nidificati in una colonna denominata OtherElements e vengono convertiti in stringhe. Questi elementi di dati privati sono chiamati dati privati non in sequenza. Per eseguire query su elementi di dati privati non sequenziali, la query deve eseguire la ricerca all'interno della colonna OtherElements dell'elemento.

La colonna OtherElements contiene due sottocolonne, "Dati" e "Tag". La colonna Dati è la rappresentazione stringa del valore dell'elemento di dati privati. È sempre di tipo REPEATED. La colonna Tag utilizza il formato "Tag_HEX", dove HEX è una stringa esadecimale del numero di tag.

LastUpdated e Type colonne

Le colonne LastUpdated e Type vengono aggiunte alla tabella BigQuery creata quando esporti i metadati DICOM. Queste colonne non sono elementi di dati standard o privati e non corrispondono al registry degli elementi di dati DICOM.

Il comportamento di queste colonne è il seguente:

  • La colonna LastUpdated contiene un valore timestamp che mostra quando l'istanza DICOM è stata inserita o eliminata dall'archivio DICOM.
  • La colonna Type contiene una stringa che mostra il tipo di operazione eseguita. I valori possibili sono CREATE o DELETE.

Tipi in conflitto e non corrispondenti

Se si verifica un conflitto di tipo, ad esempio quando un tag pubblico viene utilizzato con un tipo errato, il tag pubblico viene considerato come se fosse un tag privato. Il valore dell'elemento dati è nidificato in una colonna denominata OtherElements e il valore viene convertito in una stringa.

Ad esempio, supponiamo che i metadati DICOM contengano un tag con:

  • Un numero tag "(4010,1017)"
  • Una VR di SL (Signed Long)
  • Il valore 32

(4010,1017) equivale al numero di tag di "Mass", che è un nome di tag pubblico nella specifica DICOM con VR di FL. L'operazione di esportazione prevede che un elemento dati con numero di tag "(4010,1017)" sia il nome del tag pubblico "Mass" con VR di FL. Di conseguenza, l'operazione di esportazione prevede di convertire il valore dell'elemento di dati in un numero in virgola mobile (come mostrato nella tabella in Comportamento standard degli elementi di dati DICOM

Si verifica un conflitto di tipo perché qualsiasi tag con VR o SL utilizza il tipo di dati con numeri interi. Di conseguenza, il tag viene convertito in un tag privato e aggiunto alla colonna OtherElements.

Se per i dati della sequenza viene utilizzato un nome di tag pubblico non di sequenza, si verifica una mancata corrispondenza del tipo. Di conseguenza, la sequenza viene trattata come se fosse un elemento di dati privato. Invece di utilizzare il nome del tag pubblico come nome della colonna nello schema BigQuery, viene utilizzato il numero esadecimale del nome del tag pubblico. Il numero esadecimale è di tipo stringa.

Esempi: esecuzione di query su elementi di dati pubblici e privati

Considera il seguente snippet di uno schema rappresentato come JSON. Lo schema è stato creato dopo l'esportazione dei dati DICOM in 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"
  }
  ...
]

Il seguente esempio mostra come eseguire query per l'elemento di dati pubblici SOPInstanceUID. Per accedere al valore della colonna, esegui la query seguente:

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

L'esecuzione della query restituisce un output simile al seguente:

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

Il seguente esempio mostra come eseguire query per dati privati non di sequenza. Esegui la seguente query sulla colonna OtherElements all'interno della colonna Tag_12345678. Tieni presente l'uso dell'operatore UNNEST, obbligatorio perché stai eseguendo query su un RECORD.

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

L'esecuzione della query restituisce un output simile al seguente, a seconda della quantità e del tipo di dati nella colonna Tag_12345678.OtherElements:

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

Passaggi successivi

Scopri di più sulle operazioni SQL standard di BigQuery e visualizza esempi.