Se usó la API de Cloud Translation para traducir esta página.
Switch to English

Comprende el esquema DICOM de BigQuery

En esta página, se explica el esquema de la tabla de BigQuery que se crea cuando se exportan metadatos de DICOM a BigQuery.

Terminología

Para comprender el esquema y sus componentes, familiarízate con la terminología de DICOM. En particular, esta página usa varios términos que se encuentran en 3.10 Estructuras de datos y codificaciones de datos de DICOM.

Descripción general

La API de Cloud Healthcare genera automáticamente el esquema de BigQuery con los datos que exportas y el diccionario de DICOM. El esquema solo contiene columnas para los elementos de datos DICOM que existen en los metadatos. La única excepción es la VR Name VR.

Cuando se exportan metadatos de DICOM, la API de Cloud Healthcare intenta exportar todos los elementos de datos en los metadatos. Para obtener información sobre lo que sucede si ocurre un problema, consulta Tipos de discrepancias y discrepancias.

Elementos de datos estándares y privados

DICOM proporciona elementos de datos estándar que se ajustan a una especificación predefinida. Para obtener una lista de estos elementos de datos, consulta Registro de elementos de datos de DICOM.

En los casos en los que quieras comunicar datos que no se ajusten a los elementos estándar, puedes usar elementos de datos privados.

Elementos de datos estándar

Los siguientes comportamientos se aplican a los elementos de datos estándares. Para obtener información sobre el comportamiento de los elementos privados de datos, consulta Elementos de datos privados.

Nombres de columnas

Las columnas en el esquema de BigQuery generado se nombran según la palabra clave del elemento de datos. Por ejemplo, si los metadatos de DICOM contienen un elemento de datos cuya palabra clave es InstanceCreationDate, el esquema generado tiene una columna correspondiente llamada InstanceCreationData.

Comportamiento de elemento de datos DICOM estándar

En la siguiente tabla, se muestra una lista de representaciones de valor (RV) y sus abreviaturas. Para cualquier elemento de datos exportado a BigQuery que contiene uno de estos RV, el elemento de datos usa el tipo de datos de BigQuery que se encuentra en “Tipo de datos”:

VR Tipo de datos
  • Entidad de aplicación (AE)
  • String de edad (AS)
  • String de código (CS)
  • String larga (LO)
  • Texto largo (LT)
  • String corta (SH)
  • Texto breve (ST)
  • Caracteres ilimitados (UC)
  • Identificador único (UI/UID)
  • Identificador universal de recursos (UR) o localizador universal de recursos (URI/URL)
  • Texto ilimitado (UT)
String
Fecha (DA) Fecha
Hora (TM) Hora
Fecha y hora (DT) Marca de tiempo
  • String decimal (DS)
  • String de número entero (IS)
String
Nombre de la persona (PN) Estructura (registro)
  • Punto flotante simple (FL)
  • Punto flotante doble (FD)
Punto flotante
  • Etiqueta de atributo (AT)
  • Firmado largo (SL)
  • Firmado corto (SS)
  • Sin firma largo (UL)
  • Sin firma corto (US)
Número entero
Secuencia de elementos (SQ) Estructura (registro)

Modos repetibles y con nulabilidad

Según el valor de Multiplicación de valor (VM) de un elemento de datos, la columna de BigQuery tiene uno de dos modos: NULLABLE o REPEATED.

Si un elemento de datos tiene un valor de VM de 1, lo que indica que el elemento de datos es único, el elemento de datos usa el modo NULLABLE. Para cualquier otro valor de VM, el elemento de datos usa el modo REPEATED.

Por ejemplo, como se muestra en el Registro de elementos de datos de DICOM, la palabra clave SOPInstanceUID tiene un valor de VM de 1. Como resultado, cuando se exporta a BigQuery, su modo es NULLABLE y su representación en la tabla se ve de la siguiente manera (cuando se representa como JSON):

"SOPInstanceUID": "0.0.000.000000.0.000.0000.0000000.0000.0000000000.000",

Por el contrario, la palabra clave ImageType tiene un valor de VM de 2n. Como resultado, cuando se exporta a BigQuery, su modo es REPEATED y su representación en la tabla se ve de la siguiente manera (cuando se representa como JSON):

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

RVs excluidas

Los datos binarios no se exportan a la tabla de BigQuery generada, por lo que los elementos de datos que contienen los siguientes datos de RV no se exportan. En su lugar, se mostrarán en una columna separada (llamada DroppedTags.TagName) en la tabla de destino de BigQuery.

  • Otro byte (OB)
  • Otro doble (OD)
  • Otro valor de número de punto flotante (OF)
  • Otro largo (OL)
  • Otra palabra (OW)
  • Desconocido (UN)

RV de nombre de persona

Cada columna del esquema de BigQuery con un nombre de persona (PN) VR siempre contiene tres subcolumnas, sin importar si las subcolumnas contienen datos. Las tres subcolumnas son las siguientes:

  • Alfabético(a)
  • Ideográfico
  • Fonético(a)

Cada una de las tres subcolumnas tiene sus propias subcolumnas:

  • FamilyName
  • GivenName
  • MiddleName
  • NamePrefix
  • NameSuffix

Por ejemplo, considera la etiqueta pública "OperatorsName (0008,1070)", que tiene una RV del nombre de la persona (PN). Supongamos que el valor de OperatorsName es “Darch Smith”. El esquema contendrá una columna OperatorsName que contiene las subcolumnas enumeradas anteriormente, pero solo Alphabetic.FamilyName (Smith) y Alphabetic.GivenName (Darny) contendrán valores.

Elementos de datos privados

Algunas implementaciones clínicas pueden requerir que almacenes datos personalizados que no se ajusten a la estructura de elementos de datos públicos. Como alternativa, puedes usar elementos de datos privados.

Los elementos de datos privados con una RV de SQ (secuencia de elementos) tienen el mismo comportamiento que los elementos de datos estándar. Los elementos de datos privados con una RV de SQ se denominan secuencias de datos privados.

Los elementos de datos privados que no tienen una RV de SQ se anidan en una columna llamada OtherElements y se convierten en strings. Estos elementos de datos privados se denominan datos privados sin secuencia de comandos. Para consultar elementos de datos privados no secuenciales, tu consulta debe buscar dentro de la columna OtherElements del elemento.

La columna OtherElements contiene dos subcolumnas: "Datos" y "Etiqueta". La columna Datos es la representación de string del valor del elemento de datos privados. Siempre es REPEATED. La columna Etiqueta usa el formato "Tag_HEX", en el que HEX es una string hexadecimal del número de etiqueta.

Tipos de encabezados que no coinciden y que son contradictorios

Si se produce un conflicto de tipos, como cuando se usa una etiqueta pública con un tipo incorrecto, la etiqueta pública se trata como si fuera una etiqueta privada. El valor del elemento de datos se anida en una columna llamada OtherElements, y el valor se convierte en una string.

Por ejemplo, supongamos que los metadatos de DICOM contienen una etiqueta con lo siguiente:

  • Un número de etiqueta "(4010,1017)"
  • Una RV de SL (Firmado largo)
  • Un valor de 32

(4010,1017) es el mismo número de etiqueta que "Mass", que es un nombre de etiqueta público en la especificación DICOM que tiene una RV de FL. La operación de exportación espera que un elemento de datos con el número de etiqueta "(4010,1017)" sea el nombre público de etiqueta "Mass" con una RV de FL. Por lo tanto, la operación de exportación espera convertir el valor del elemento de datos en un número de punto flotante (como se muestra en la tabla en Comportamiento estándar del elemento de datos de DICOM).

Un conflicto de tipo se produce porque cualquier etiqueta con una RV de SL usa el tipo de datos de número entero. Por lo tanto, la etiqueta se convierte en una etiqueta privada y se agrega a la columna OtherElements.

Si se usa un nombre de etiqueta pública no secuencial para los datos de secuencia, se produce un error de coincidencia de tipos. Como resultado, la secuencia se trata como si fuera un elemento de datos privado. En lugar de usar el nombre de etiqueta pública como el nombre de columna en el esquema de BigQuery, se usa el número hexadecimal del nombre público. El número hexadecimal es de tipo string.

Ejemplos: Consulta elementos de datos públicos y privados

Considera el siguiente fragmento de un esquema representado como JSON. El esquema se creó después de la exportación de los datos de DICOM a 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"
  }
  ...
]

En el siguiente ejemplo, se muestra cómo consultar el elemento de datos públicos SOPInstanceUID. Para acceder al valor de la columna, ejecuta la siguiente consulta:

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

Cuando se ejecuta la consulta, se muestra un resultado similar al siguiente:

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

En el siguiente ejemplo, se muestra cómo consultar datos privados no secuenciales. Ejecuta la siguiente consulta en la columna OtherElements, que se encuentra dentro de la columna Tag_12345678. Ten en cuenta el uso del operador UNNEST, que se requiere porque consultas una RECORD.

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

Cuando se ejecuta la consulta, se muestra un resultado similar al siguiente, según la cantidad y el tipo de datos de la columna Tag_12345678.OtherElements:

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

¿Qué sigue?

Obtén más información sobre las operaciones de SQL estándar de BigQuery y ve ejemplos.