Informazioni sullo schema DICOM di BigQuery

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

Terminologia

Per comprendere lo schema e i relativi componenti, acquisisci familiarità con la terminologia DICOM. In particolare, questa pagina utilizza diversi termini presenti 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 è il VR del nome della persona.

Quando esporta i 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 Registry of DICOM Data Elements (Registro degli elementi di dati DICOM).

Se 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 degli 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 di 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 dell'elemento di dati DICOM standard

La tabella seguente mostra un elenco di rappresentazioni di valore (VR) e le relative abbreviature. Per qualsiasi elemento di dato esportato in BigQuery che contiene una di queste VR, l'elemento di dato utilizza il tipo di dato BigQuery disponibile in "Tipo di dato":

VR Tipo di dati
  • Entità applicazione (AE)
  • Stringa età (AS)
  • Stringa di codice (CS)
  • Stringa lunga (LO)
  • Testo lungo (LT)
  • Stringa breve (SH)
  • Testo breve (ST)
  • Numero di caratteri illimitato (UC)
  • Identificatore univoco (UI/UID)
  • Identificatore universale di risorse (UR) o Universal Resource Locator (URI/URL)
  • SMS illimitati (UT)
Stringa
Data (DA) Data
Tempo (TM) Ora
Data e ora (DT) Timestamp
  • Stringa decimale (DS)
  • Stringa di numeri interi (IS)
Stringa
Nome della persona (PN) Struct (Record)
  • Floating Point Single (FL)
  • Doppio a virgola mobile (FD)
Punto floating
  • Tag attributo (AT)
  • Firmato lungo (SL)
  • Short firmato (SS)
  • Unsigned Long (UL)
  • Short non firmato (Stati Uniti)
Numero intero
Sequence of Items (SQ) Struct (record)

Modalità facoltative e ripetute

A seconda del valore della molteplicità di valori (VM) di un elemento dati, la colonna BigQuery ha una delle due modalità: NULLABLE o REPEATED.

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

Ad esempio, come mostrato nel Registry of DICOM Data Elements (Registro degli elementi di dati DICOM), la parola chiave SOPInstanceUID ha un valore VM pari a 1. Di conseguenza, quando viene esportato in BigQuery, la 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, la parola chiave ImageType ha un valore VM di 2-n. Di conseguenza, quando viene esportato in BigQuery, la modalità èREPEATED e la sua rappresentazione nella tabella è la seguente (se rappresentata come JSON):

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

VR esclusi

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

  • Altro doppio (OD)
  • Altro valore fluttuante (OF)
  • Altro lungo (OL)
  • Altro byte (OB)
  • Altra parola (OW)
  • Sconosciuto (UN)
  • Tag sequenza (SQ) contenenti più di circa 1 MiB di dati
  • Attribute (AT), Floating Point Double (FD), Floating Point Single (FL), Unsigned Long (UL) o Unsigned Short (US), se la molteplicità di valori (VM) è maggiore di 512.
    • Per motivi di compatibilità con le versioni precedenti, i tag delle istanze già importate nell'API Cloud Healthcare potrebbero essere inclusi nella colonna DroppedTags.TagName se la molteplicità del valore è maggiore di 64.

Nome della persona VR

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

  • Alfabetico
  • Ideografico
  • Fonetico

Ciascuna delle tre sottocolonne ha cinque sottocolonne:

  • FamilyName
  • GivenName
  • MiddleName
  • NamePrefix
  • NameSuffix

Ad esempio, prendi in considerazione il tag pubblico "OperatorsName (0008,1070)", che ha un VR di Nome persona (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 di archiviare 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 un VR di SQ (Sequence of Items) hanno lo stesso comportamento degli elementi di dati standard. Gli elementi di dati privati con un VR di SQ sono chiamati sequenze di dati privati.

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

La colonna OtherElements contiene due sottocolonne, "Dati" e "Tag". La colonna Data è 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 del 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 of DICOM Data Elements.

Il comportamento di queste colonne è il seguente:

  • La colonna LastUpdated contiene un valore timestamp che indica quando l'istanza DICOM è stata inserita o eliminata dall'archivio DICOM.
  • La colonna Type contiene una stringa che indica il tipo di operazione che si è verificata. 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 scorretto, il tag pubblico viene trattato come se fosse un tag privato. Il valore dell'elemento di 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 di tag "(4010,1017)"
  • Un VR di SL (Signed Long)
  • Un valore di 32

(4010,1017) è lo stesso numero di tag di "Mass", che è un nome di tag pubblico nella specifica DICOM con un VR di FL. L'operazione di esportazione si aspetta che un elemento di dati con il numero di tag "(4010,1017)" sia il nome del tag pubblico "Mass" con un VR di FL. Pertanto, l'operazione di esportazione prevede di convertire il valore dell'elemento di dati in un valore float (come mostrato nella tabella in Comportamento standard degli elementi di dati DICOM

Si verifica un conflitto di tipo perché tutti i tag con un valore VR di SL utilizzano il tipo di dato intero. Il tag viene quindi convertito in un tag privato e aggiunto alla colonnaOtherElements.

Se per i dati di sequenza viene utilizzato un nome di tag pubblico non di sequenza, si verifica una mancata corrispondenza di tipo. Di conseguenza, la sequenza viene trattata come se fosse un elemento di dati privati. Anziché 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: query sugli elementi di dati pubblici e privati

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

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

#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"
  },
  ...
]

L'esempio seguente mostra come eseguire query sui dati privati non sequenziali. Esegui la seguente query sulla colonna OtherElements che si trova all'interno della colonna Tag_12345678. Tieni presente l'utilizzo dell'operatore UNNEST, obbligatorio perché stai eseguendo una 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 degli esempi.