Informazioni sullo schema DICOM di BigQuery

Questa pagina descrive lo schema della tabella BigQuery 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 disponibili in 3.10 Strutture di dati DICOM e definizioni di codifica.

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 che esistono 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 di sistema 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 dei 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 di età (AS)
  • Stringa di codice (CS)
  • Stringa lunga (LO)
  • Testo lungo (LT)
  • Stringa corta (SH)
  • Testo breve (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 completa (IS)
Stringa
Nome della persona (PN) Struct (record)
  • Virgola mobile singola (FL)
  • Doppio con virgola mobile (FD)
Virgola mobile
  • Tag attributo (AT)
  • Signed Long (SL)
  • Short firmato (SS)
  • Lungo non firmato (UL)
  • Short non firmato (Stati Uniti)
Numero intero
Sequenza di elementi (SQ) Struct (record)

Modalità ripetibili e con valori null

A seconda del valore di moltiplicazione del valore (VM) di un elemento di 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 Registro di elementi di dati DICOM, la parola chiave SOPInstanceUID ha un valore VM pari a 1. Di conseguenza, quando viene esportata 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, la parola chiave ImageType ha un valore VM pari a 2-n. Di conseguenza, quando viene esportata in BigQuery, la sua modalità è REPEATED e la sua rappresentazione nella tabella è la seguente (quando 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 le seguenti VR non vengono esportati. Invece, i seguenti VR vengono inclusi in una colonna separata (chiamata DroppedTags.TagName) nella tabella BigQuery di destinazione.

  • Altro doppio (OD)
  • Altro numero in virgola mobile (OF)
  • Altro in formato lungo (OL)
  • Altro byte (OB)
  • Altra parola (OW)
  • Sconosciuto (UN)
  • Tag di sequenza (SQ) contenenti più di 1 MiB circa di dati
  • Attributo (AT), Virgola mobile doppio (FD), Floating Point Single (FL), UnSign Long (UL) o Unfirmato Short (US), se il valore Multiplicity (VM) è maggiore di 64

Nome di persona VR

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

  • Alfabetico
  • Ideografico
  • Fonetico

Ognuna delle tre sottocolonne ha cinque colonne separate:

  • 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 con le sottocolonne elencate in precedenza, ma solo Alphabetic.FamilyName (Smith) e Alphabetic.DatenName (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 tipo SQ sono chiamati sequenze di dati privati.

Gli elementi di dati privati che non hanno una VR di SQ sono nidificati in una colonna denominata OtherElements e vengono convertiti in stringhe. Questi elementi di dati privati sono chiamati dati privati non sequenziali. Per eseguire query su elementi di dati privati non in sequenza, 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 in formato 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 durante l'esportazione dei metadati DICOM. Queste colonne non sono elementi di dati standard o privati e non corrispondono al registro 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 avvenuta. 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 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)"
  • Una VR di SL (firmata in lungo)
  • Il valore è 32.

(4010,1017) è lo stesso 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 di 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 valore in virgola mobile (come mostrato nella tabella in Comportamento standard degli elementi di dati DICOM

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

Se per i dati della sequenza viene utilizzato il nome di un 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 privati. 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: eseguire query su elementi di dati pubblici e privati

Considera il seguente snippet di uno schema rappresentato come JSON. Lo schema è stato creato dopo aver esportato i 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 una 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 sequenziali. Esegui la seguente query sulla colonna OtherElements all'interno della colonna Tag_12345678. Prendi nota dell'utilizzo dell'operatore UNNEST, necessario 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 esempi.