Exportar metadatos de DICOM a BigQuery

En esta página, se explica cómo exportar metadatos de DICOM a BigQuery para realizar exploraciones y análisis. Para obtener información sobre el esquema de BigQuery que se crea cuando se exportan metadatos de DICOM, consulta Comprende el esquema de DICOM de BigQuery.

Configura permisos de BigQuery

Antes de exportar metadatos de DICOM a BigQuery, debes otorgar permisos adicionales a la cuenta de servicio del Agente de servicios de Cloud Healthcare. Para obtener más información, consulta Permisos de BigQuery para el almacén de DICOM.

Configura el destino de BigQuery

Cuando configures el destino de BigQuery, usa el URI completamente calificado como se indica a continuación:
bq://PROJECT_ID.BIGQUERY_DATASET_ID.BIGQUERY_TABLE_ID
El comportamiento de la operación de exportación puede variar según los siguientes factores:
  • Si la tabla de destino ya existe
  • Si estableciste el campo force (con la API) o la marca --overwrite-table (con la herramienta de línea de comandos de gcloud)
  • Si ya estableciste un valor para la enumeración writeDisposition. Si usas la enumeración writeDisposition, no configures el campo force.
El comportamiento en cada uno de estos casos es el siguiente:
  • Si la tabla de destino ya existe y force se configura como true o si se especifica la marca --overwrite-table, la operación de exportación reemplaza la tabla existente.
  • Si la tabla de destino ya existe y force se configura como false o si no se especifica la marca --overwrite-table, se produce un error.
  • Si la tabla de destino aún no existe, se crea una tabla nueva, sin importar si especificas el campo force o la marca --overwrite-table.
  • El comportamiento de writeDisposition se describe en su documentación. La enumeración writeDisposition realiza un comportamiento similar a las opciones cuando se usa force, con la siguiente excepción: si la tabla de destino ya existe y está vacía, la operación de exportación finaliza en lugar de mostrar un error.

Exporta metadatos de DICOM

En los siguientes ejemplos, se muestra cómo exportar metadatos de DICOM a una tabla de BigQuery. En estas muestras, el almacén de DICOM y la tabla de BigQuery están en el mismo proyecto. Para exportar metadatos de DICOM a otro proyecto, consulta Exporta metadatos de DICOM a un proyecto diferente.

Console

Para exportar metadatos de DICOM a BigQuery, completa los siguientes pasos:

  1. En Cloud Console, ve a la página Conjuntos de datos.
    Ir a la página Conjuntos de datos
  2. Haz clic en el conjunto de datos que contiene el almacén de DICOM desde el que exportas las instancias de DICOM.
  3. En la lista de almacenes de datos, selecciona Exportar en la lista Acciones para el almacén de DICOM.
  4. En la página Exportar almacén de DICOM que aparece, selecciona Tabla de BigQuery.
  5. En la lista Project (Proyecto), selecciona el proyecto de BigQuery.
  6. En la lista ID de conjunto de datos, selecciona el conjunto de datos.
  7. En el campo Nombre de la tabla, ingresa un nombre de tabla nuevo.
    BigQuery verifica cada selección para asegurarse de que la tabla de destino sea válida.
  8. Haz clic en Exportar para exportar los metadatos de DICOM al destino definido en BigQuery.
  9. Para seguir el estado de la operación, haz clic en la pestaña Operaciones. Una vez que se completa la operación, aparecen las siguientes indicaciones:
    • La sección Estado de la operación de larga duración tiene una marca de verificación verde debajo del encabezado Aceptar.
    • La sección Descripción general tiene una marca de verificación verde y un indicador Aceptar en la misma fila que el ID de la operación.
    Si encuentras algún error, haz clic en Acciones y, luego, en Ver detalles en Cloud Logging.

gcloud

Para exportar metadatos de DICOM a BigQuery, usa el comando gcloud healthcare dicom-stores export bq. Especifica la siguiente información:

  • El nombre del conjunto de datos superior
  • El nombre del almacén de DICOM
  • El nombre de un conjunto de datos de BigQuery existente
  • Un nombre para la tabla de exportación de BigQuery. El nombre solo puede contener letras (mayúsculas o minúsculas), números y guiones bajos. Consulta Configura el destino de BigQuery para obtener una explicación sobre cómo personalizar el comportamiento de la operación de exportación.

En el siguiente ejemplo, se muestra el comando gcloud dicom-stores export bq.

gcloud healthcare dicom-stores export bq DICOM_STORE_ID \
  --dataset=DATASET_ID \
  --location=LOCATION \
  --bq-table=bq://PROJECT_ID.BIGQUERY_DATASET_ID.BIGQUERY_TABLE_ID \
  [--overwrite-table]

Después de que ejecutas el comando, se muestra el nombre de la operación:

name: projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID

Para ver más detalles de la operación, ejecuta el comando gcloud healthcare operations describe y proporciona OPERATION_ID desde la respuesta:

gcloud healthcare operations describe OPERATION_ID \
  --dataset=DATASET_ID

Cuando finaliza la operación, la respuesta incluye done: true.

done: true
metadata:
  '@type': type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata
  apiMethodName: google.cloud.healthcare.v1.dicom.DicomService.ExportDicomData
  createTime: 'CREATE_TIME'
  endTime: 'END_TIME'
name: projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID
response:
  '@type': '...'

API

Para exportar metadatos de DICOM a BigQuery, usa el método projects.locations.datasets.dicomStores.export.

curl

Para exportar metadatos de DICOM, realiza una solicitud POST y especifica la siguiente información:

  • El nombre y la ubicación del conjunto de datos superior
  • El nombre del almacén de DICOM
  • El nombre de un conjunto de datos de BigQuery existente
  • Un nombre para la tabla de exportación de BigQuery. El nombre solo puede contener letras (mayúsculas o minúsculas), números y guiones bajos. Consulta Configura el destino de BigQuery para obtener una explicación sobre cómo personalizar el comportamiento de la operación de exportación.
  • Uno de los siguientes valores para la enumeración writeDisposition:
    • WRITE_EMPTY: Solo exporta datos si las tablas de destino están vacías. Esta es la opción predeterminada.
    • WRITE_TRUNCATE: Borra todos los datos existentes en las tablas antes de escribir las instancias.
    • WRITE_APPEND: Agrega datos a las tablas existentes.

En el siguiente ejemplo, se muestra una solicitud POST mediante curl.

curl -X POST \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    --data "{
      'bigqueryDestination': {
        'tableUri': 'bq://PROJECT_ID.BIGQUERY_DATASET_ID.BIGQUERY_TABLE_ID'
      },
      'writeDisposition': '{WRITE_EMPTY|WRITE_TRUNCATE|WRITE_APPEND}'
    }" "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID:export"

Si la solicitud tiene éxito, se mostrará la respuesta en formato JSON en el servidor:

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"
}

La respuesta contiene un nombre de operación. Para realizar un seguimiento del estado de la operación, puedes usar el método get de la operación:

curl -X GET \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"

Si la solicitud es exitosa, el servidor mostrará una respuesta con el estado de la operación en formato JSON:

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata",
    "apiMethodName": "google.cloud.healthcare.v1.dicom.DicomService.ExportDicomData",
    "createTime": "CREATE_TIME",
    "endTime": "END_TIME",
    "logsUrl": "https://console.cloud.google.com/logs/viewer/CLOUD_LOGGING_URL"
  },
  "done": true,
  "response": {
    "@type": "..."
  }
}

PowerShell

Para exportar metadatos de DICOM, realiza una solicitud POST y especifica la siguiente información:

  • El nombre y la ubicación del conjunto de datos superior
  • El nombre del almacén de DICOM
  • El nombre de un conjunto de datos de BigQuery existente
  • Un nombre para la tabla de exportación de BigQuery. El nombre solo puede contener letras (mayúsculas o minúsculas), números y guiones bajos. Consulta Configura el destino de BigQuery para obtener una explicación sobre cómo personalizar el comportamiento de la operación de exportación.
  • Uno de los siguientes valores para la enumeración writeDisposition:
    • WRITE_EMPTY: Solo exporta datos si las tablas de destino están vacías. Esta es la opción predeterminada.
    • WRITE_TRUNCATE: Borra todos los datos existentes en las tablas antes de escribir las instancias.
    • WRITE_APPEND: Agrega datos a las tablas existentes.

En el siguiente ejemplo, se muestra una solicitud POST mediante Windows PowerShell.

$cred = gcloud auth application-default print-access-token
$headers = @{ Authorization = "Bearer $cred" }

Invoke-WebRequest `
  -Method Post `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Body "{
    'bigqueryDestination': {
      'tableUri': 'bq://PROJECT_ID.BIGQUERY_DATASET_ID.BIGQUERY_TABLE_ID'
    },
    'writeDisposition': '{WRITE_EMPTY|WRITE_TRUNCATE|WRITE_APPEND}'
  }" `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID:export" | Select-Object -Expand Content

Si la solicitud tiene éxito, se mostrará la respuesta en formato JSON en el servidor:

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"
}

La respuesta contiene un nombre de operación. Para realizar un seguimiento del estado de la operación, puedes usar el método get de la operación:

$cred = gcloud auth application-default print-access-token
$headers = @{ Authorization = "Bearer $cred" }

Invoke-WebRequest `
  -Method Get `
  -Headers $headers `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand Content

Si la solicitud es exitosa, el servidor mostrará una respuesta con el estado de la operación en formato JSON:

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata",
    "apiMethodName": "google.cloud.healthcare.v1.dicom.DicomService.ExportDicomData",
    "createTime": "CREATE_TIME",
    "endTime": "END_TIME",
    "logsUrl": "https://console.cloud.google.com/logs/viewer/CLOUD_LOGGING_URL"
  },
  "done": true,
  "response": {
    "@type": "..."
  }
}

Exporta metadatos de DICOM a un proyecto diferente

Para exportar metadatos de DICOM de un proyecto a otro, primero consulta Permisos para exportar metadatos de DICOM a un proyecto diferente para obtener información sobre cómo establecer permisos de IAM en el proyecto de destino.

gcloud

Para exportar metadatos de DICOM desde un almacén de DICOM en un proyecto a una tabla de BigQuery en otro proyecto, usa el comando gcloud healthcare dicom-stores export bq. Especifica la siguiente información:

  • El nombre del conjunto de datos superior
  • El nombre del almacén de DICOM
  • El proyecto de destino
  • El nombre de un conjunto de datos de BigQuery existente en el proyecto de destino
  • Un nombre para la tabla de exportación de BigQuery. El nombre solo puede contener letras (mayúsculas o minúsculas), números y guiones bajos. Consulta Configura el destino de BigQuery para obtener una explicación de cómo la API de Cloud Healthcare escribe datos en la tabla de BigQuery.

En el siguiente ejemplo, se muestra el comando gcloud dicom-stores export bq.

gcloud healthcare dicom-stores export bq DICOM_STORE_ID \
  --dataset=DATASET_ID \
  --location=LOCATION \
  --bq-table=bq://DESTINATION_PROJECT_ID.BIGQUERY_DATASET_ID.BIGQUERY_TABLE_ID \
  [--overwrite-table]

La línea de comandos muestra el ID de la operación y, después de que se completa la operación, done:

Request issued for: [DICOM_STORE_ID]
Waiting for operation [projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/OPERATION_ID] to complete...done.
name: projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID

Para ver más detalles de la operación, ejecuta el comando gcloud healthcare operations describe y proporciona OPERATION_ID desde la respuesta:

gcloud healthcare operations describe OPERATION_ID \
  --dataset=DATASET_ID

Cuando finaliza la operación, la respuesta incluye done: true.

done: true
metadata:
  '@type': type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata
  apiMethodName: google.cloud.healthcare.v1.dicom.DicomService.ExportDicomData
  createTime: 'CREATE_TIME'
  endTime: 'END_TIME'
name: projects/SOURCE_PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID
response:
  '@type': '...'

API

Para exportar metadatos de DICOM a BigQuery, usa el método projects.locations.datasets.dicomStores.export.

curl

Para exportar metadatos de DICOM de un almacén de DICOM en un proyecto a una tabla de BigQuery en otro proyecto, realiza una solicitud POST y especifica la siguiente información:

  • El proyecto de origen
  • El nombre y la ubicación del conjunto de datos superior
  • El nombre del almacén de DICOM
  • El proyecto de destino
  • El nombre de un conjunto de datos de BigQuery existente en el proyecto de destino
  • Un nombre para la tabla de exportación de BigQuery. El nombre solo puede contener letras (mayúsculas o minúsculas), números y guiones bajos. Consulta Configura el destino de BigQuery para obtener una explicación de cómo la API de Cloud Healthcare escribe datos en la tabla de BigQuery.
  • Uno de los siguientes valores para la enumeración writeDisposition:
    • WRITE_EMPTY: Solo exporta datos si las tablas de destino están vacías. Esta es la opción predeterminada.
    • WRITE_TRUNCATE: Borra todos los datos existentes en las tablas antes de escribir las instancias.
    • WRITE_APPEND: Agrega datos a las tablas existentes.

En el siguiente ejemplo, se muestra una solicitud POST mediante curl.

curl -X POST \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    --data "{
      'bigqueryDestination': {
        'tableUri': 'bq://DESTINATION_PROJECT_ID.BIGQUERY_DATASET_ID.BIGQUERY_TABLE_ID'
      },
      'writeDisposition': '{WRITE_EMPTY|WRITE_TRUNCATE|WRITE_APPEND}'
    }" "https://healthcare.googleapis.com/v1/projects/SOURCE_PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID:export"

Si la solicitud tiene éxito, se mostrará la respuesta en formato JSON en el servidor:

{
  "name": "projects/SOURCE_PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"
}

La respuesta contiene un nombre de operación. Para realizar un seguimiento del estado de la operación, puedes usar el método get de la operación:

curl -X GET \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    "https://healthcare.googleapis.com/v1/projects/SOURCE_PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"

Si la solicitud es exitosa, el servidor mostrará una respuesta con el estado de la operación en formato JSON:

{
  "name": "projects/SOURCE_PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata",
    "apiMethodName": "google.cloud.healthcare.v1.dicom.DicomService.ExportDicomData",
    "createTime": "CREATE_TIME",
    "endTime": "END_TIME",
    "logsUrl": "https://console.cloud.google.com/logs/viewer/CLOUD_LOGGING_URL"
  },
  "done": true,
  "response": {
    "@type": "..."
  }
}

PowerShell

Para exportar metadatos de DICOM de un almacén de DICOM en un proyecto a una tabla de BigQuery en otro proyecto, realiza una solicitud POST y especifica la siguiente información:

  • El proyecto de origen
  • El nombre y la ubicación del conjunto de datos superior
  • El nombre del almacén de DICOM
  • El proyecto de destino
  • El nombre de un conjunto de datos de BigQuery existente en el proyecto de destino
  • Un nombre para la tabla de exportación de BigQuery. El nombre solo puede contener letras (mayúsculas o minúsculas), números y guiones bajos. Consulta Configura el destino de BigQuery para obtener una explicación de cómo la API de Cloud Healthcare escribe datos en la tabla de BigQuery.
  • Uno de los siguientes valores para la enumeración writeDisposition:
    • WRITE_EMPTY: Solo exporta datos si las tablas de destino están vacías. Esta es la opción predeterminada.
    • WRITE_TRUNCATE: Borra todos los datos existentes en las tablas antes de escribir las instancias.
    • WRITE_APPEND: Agrega datos a las tablas existentes.

En el siguiente ejemplo, se muestra una solicitud POST mediante Windows PowerShell.

$cred = gcloud auth application-default print-access-token
$headers = @{ Authorization = "Bearer $cred" }

Invoke-WebRequest `
  -Method Post `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Body "{
    'bigqueryDestination': {
      'tableUri': 'bq://DESTINATION_PROJECT_ID.BIGQUERY_DATASET_ID.BIGQUERY_TABLE_ID'
    },
    'writeDisposition': '{WRITE_EMPTY|WRITE_TRUNCATE|WRITE_APPEND}'
  }" `
  -Uri "https://healthcare.googleapis.com/v1/projects/SOURCE_PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID:export" | Select-Object -Expand Content

Si la solicitud tiene éxito, se mostrará la respuesta en formato JSON en el servidor:

{
  "name": "projects/SOURCE_PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"
}

La respuesta contiene un nombre de operación. Para realizar un seguimiento del estado de la operación, puedes usar el método get de la operación:

$cred = gcloud auth application-default print-access-token
$headers = @{ Authorization = "Bearer $cred" }

Invoke-WebRequest `
  -Method Get `
  -Headers $headers `
  -Uri "https://healthcare.googleapis.com/v1/projects/SOURCE_PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand Content

Si la solicitud es exitosa, el servidor mostrará una respuesta con el estado de la operación en formato JSON:

{
  "name": "projects/SOURCE_PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata",
    "apiMethodName": "google.cloud.healthcare.v1.dicom.DicomService.ExportDicomData",
    "createTime": "CREATE_TIME",
    "endTime": "END_TIME",
    "logsUrl": "https://console.cloud.google.com/logs/viewer/CLOUD_LOGGING_URL"
  },
  "done": true,
  "response": {
    "@type": "..."
  }
}

Exportar metadatos de DICOM mediante filtros

De forma predeterminada, cuando exportas archivos de DICOM a Cloud Storage, se exportan todos los archivos de DICOM en el almacén de DICOM especificado. Del mismo modo, cuando exportas metadatos de DICOM a BigQuery, se exportan los metadatos de todos los datos de DICOM en el almacén de DICOM especificado.

Puedes exportar un subconjunto de datos o metadatos de DICOM mediante un filtro. Debes definir el filtro en un archivo de filtro.

Configura archivos de filtro

Un archivo de filtro define qué archivos DICOM que se exportarán a Cloud Storage o BigQuery. Puedes configurar archivos en los siguientes niveles:

  • A nivel del estudio
  • En el nivel de la serie
  • En el nivel de la instancia

El archivo de filtro está compuesto por varias líneas, con cada línea que define el estudio, la serie o la instancia que deseas exportar. Cada línea usa el formato /studies/STUDY_UID[/series/SERIES_UID[/instances/INSTANCE_UID]].

Si no se especifica un estudio, una serie o una instancia en el archivo de filtro cuando pasas el archivo de filtro, no se exportará ese estudio, serie ni instancia.

Solo se requiere la parte /studies/STUDY_UID de la ruta de acceso. Puedes exportar un estudio completo si especificas /studies/STUDY_UID o puedes exportar una serie completa si especificas /studies/STUDY_UID/series/SERIES_UID.

Considera el siguiente archivo de filtro. El archivo de filtro dará como resultado que se exporten un estudio, dos series y tres instancias individuales:

/studies/1.123.456.789
/studies/1.666.333.111/series/123.456
/studies/1.666.333.111/series/567.890
/studies/1.888.999.222/series/123.456/instances/111
/studies/1.888.999.222/series/123.456/instances/222
/studies/1.888.999.222/series/123.456/instances/333

Crea un archivo de filtro con BigQuery

Por lo general, para crear un archivo de filtro, primero debes exportar los metadatos de un almacén de DICOM a BigQuery. Esto te permite usar BigQuery para ver los UID del estudio, serie y de las instancias de los datos de DICOM en tu almacén de DICOM. A continuación, puedes completar los siguientes pasos:

  1. Realiza consultas para los UID del estudio, la serie y la instancia que te interesa. Por ejemplo, después de exportar los metadatos de DICOM a BigQuery, puedes ejecutar la siguiente consulta para concatenar los UID del estudio, la serie y la instancia en un formato compatible con los requisitos del archivo de filtro:
    SELECT CONCAT
        ('/studies/', StudyInstanceUID, '/series/', SeriesInstanceUID, '/instances/', SOPInstanceUID)
    FROM
        [PROJECT_ID:BIGQUERY_DATASET.BIGQUERY_TABLE]
    
  2. Si la consulta muestra un conjunto de resultados grande, puedes materializar una tabla nueva si guardas los resultados de las consultas en una tabla de destino en BigQuery.
  3. Si guardaste los resultados de la consulta en una tabla de destino, puedes guardar el contenido de la tabla de destino en un archivo y exportarlo a Cloud Storage. Si quieres obtener los pasos para hacerlo, consulta Exporta datos de tablas. El archivo exportado es tu archivo de filtro. Usarás la ubicación del archivo de filtro en Cloud Storage cuando especifiques el filtro en la operación de exportación.

Crea un archivo de filtro de forma manual

Puedes crear un archivo de filtro con contenido personalizado y subirlo a un bucket de Cloud Storage. Usarás la ubicación del archivo de filtro en Cloud Storage cuando especifiques el filtro en la operación de exportación. En el siguiente ejemplo, se muestra cómo subir un archivo de filtro a un bucket de Cloud Storage con el comando gsutil cp:
gsutil cp PATH/TO/FILTER_FILE gs://BUCKET/DIRECTORY

Pasa el archivo de filtro

Después de crear un archivo de filtro, puedes llamar a la operación de exportación de DICOM y pasar el archivo de filtro con la API de REST. En los siguientes ejemplos, se muestra cómo exportar metadatos de DICOM mediante un filtro.

gcloud

Para exportar metadatos de DICOM a BigQuery mediante un filtro, usa el comando gcloud beta healthcare dicom-stores export bq:

gcloud beta healthcare dicom-stores export bq DICOM_STORE_ID \
  --dataset=DATASET_ID \
  --location=LOCATION \
  --bq-table=bq://PROJECT_ID.BIGQUERY_DATASET_ID.BIGQUERY_TABLE_ID \
  --filter-config-gcs-uri=gs://BUCKET/DIRECTORY/FILTER_FILE

Reemplaza lo siguiente:

  • DICOM_STORE_ID: Es el identificador del almacén de DICOM
  • DATASET_ID: el nombre del conjunto de datos superior del almacén de DICOM
  • LOCATION: Es la ubicación del conjunto de datos superior del almacén de DICOM.
  • PROJECT_ID: el identificador del proyecto que contiene el conjunto de datos de BigQuery
  • BIGQUERY_DATASET_ID: Es el nombre del conjunto de datos de BigQuery.
  • BIGQUERY_TABLE_ID: Un nombre para la tabla de exportación de BigQuery. El nombre solo puede contener letras (mayúsculas o minúsculas), números y guiones bajos. Consulta Configura el destino de BigQuery para obtener una explicación de cómo la API de Cloud Healthcare escribe datos en la tabla de BigQuery.
  • BUCKET/DIRECTORY/FILTER_FILE: la ubicación del archivo de filtro en un bucket de Cloud Storage

Este es el resultado:

Request issued for: [DICOM_STORE_ID]
Waiting for operation [projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID] to complete...done.
name: projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID

Para ver el estado de la operación, ejecuta el comando gcloud healthcare operations describe y proporciona OPERATION_ID desde la respuesta:

gcloud healthcare operations describe OPERATION_ID \
  --location=LOCATION \
  --dataset=DATASET_ID

Reemplaza lo siguiente:

  • OPERATION_ID: El número de ID que se muestra en la respuesta anterior
  • DATASET_ID: el nombre del conjunto de datos superior del almacén de DICOM
  • LOCATION: Es la ubicación del conjunto de datos superior del almacén de DICOM.

Este es el resultado:

done: true
metadata:
  '@type': type.googleapis.com/google.cloud.healthcare.v1beta1.OperationMetadata
  apiMethodName: google.cloud.healthcare.v1beta1.dicom.DicomService.ExportDicomData
  createTime: 'CREATE_TIME'
  endTime: 'END_TIME',
  logsUrl: 'https://console.cloud.google.com/logs/viewer/CLOUD_LOGGING_URL'
name: projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID
response:
  '@type': '...'

API

Para exportar metadatos de DICOM a BigQuery mediante un filtro, usa el método projects.locations.datasets.dicomStores.export.

curl

Para exportar metadatos de DICOM con un filtro, realiza una solicitud POST y especifica la siguiente información:

  • El nombre y la ubicación del conjunto de datos superior
  • El nombre del almacén de DICOM
  • La ubicación del archivo de filtro en un bucket de Cloud Storage
  • Un nombre para la tabla de exportación de BigQuery. El nombre solo puede contener letras (mayúsculas o minúsculas), números y guiones bajos. Consulta Configura el destino de BigQuery para obtener una explicación de cómo la API de Cloud Healthcare escribe datos en la tabla de BigQuery.
  • Uno de los siguientes valores para la enumeración writeDisposition:
    • WRITE_EMPTY: Solo exporta datos si las tablas de destino están vacías. Esta es la opción predeterminada.
    • WRITE_TRUNCATE: Borra todos los datos existentes en las tablas antes de escribir las instancias.
    • WRITE_APPEND: Agrega datos a las tablas existentes.

En el siguiente ejemplo, se muestra una solicitud POST mediante curl.

curl -X POST \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    --data "{
      'bigqueryDestination': {
        'tableUri': 'bq://PROJECT_ID.BIGQUERY_DATASET_ID.BIGQUERY_TABLE_ID'
      },
      'filterConfig': {
        'resourcePathsGcsUri': 'gs://BUCKET/DIRECTORY/FILTER_FILE'
      },
      'writeDisposition': '{WRITE_EMPTY|WRITE_TRUNCATE|WRITE_APPEND}'
    }" "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID:export"

Si la solicitud tiene éxito, se mostrará la respuesta en formato JSON en el servidor:

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"
}

La respuesta contiene un nombre de operación. Para realizar un seguimiento del estado de la operación, puedes usar el método get de la operación:

curl -X GET \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"

Si la solicitud es exitosa, el servidor mostrará una respuesta con el estado de la operación en formato JSON:

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.healthcare.v1beta1.OperationMetadata",
    "apiMethodName": "google.cloud.healthcare.v1beta1.dicom.DicomService.ExportDicomData",
    "createTime": "CREATE_TIME",
    "endTime": "END_TIME",
    "logsUrl": "https://console.cloud.google.com/logs/viewer/CLOUD_LOGGING_URL"
  },
  "done": true,
  "response": {
    "@type": "..."
  }
}

PowerShell

Para exportar metadatos de DICOM con un filtro, realiza una solicitud POST y especifica la siguiente información:

  • El nombre y la ubicación del conjunto de datos superior
  • El nombre del almacén de DICOM
  • La ubicación del archivo de filtro en un bucket de Cloud Storage.
  • Un nombre para la tabla de exportación de BigQuery. El nombre solo puede contener letras (mayúsculas o minúsculas), números y guiones bajos. Consulta Configura el destino de BigQuery para obtener una explicación de cómo la API de Cloud Healthcare escribe datos en la tabla de BigQuery.
  • Uno de los siguientes valores para la enumeración writeDisposition:
    • WRITE_EMPTY: Solo exporta datos si las tablas de destino están vacías. Esta es la opción predeterminada.
    • WRITE_TRUNCATE: Borra todos los datos existentes en las tablas antes de escribir las instancias.
    • WRITE_APPEND: Agrega datos a las tablas existentes.

En el siguiente ejemplo, se muestra una solicitud POST mediante Windows PowerShell.

$cred = gcloud auth application-default print-access-token
$headers = @{ Authorization = "Bearer $cred" }

Invoke-WebRequest `
  -Method Post `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Body "{
    'bigqueryDestination': {
      'tableUri': 'bq://PROJECT_ID.BIGQUERY_DATASET_ID.BIGQUERY_TABLE_ID'
    },
    'filterConfig': {
      'resourcePathsGcsUri': 'gs://BUCKET/DIRECTORY/FILTER_FILE'
    },
    'writeDisposition': '{WRITE_EMPTY|WRITE_TRUNCATE|WRITE_APPEND}'
  }" `
  -Uri "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID:export" | Select-Object -Expand Content

Si la solicitud tiene éxito, se mostrará la respuesta en formato JSON en el servidor:

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"
}

La respuesta contiene un nombre de operación. Para realizar un seguimiento del estado de la operación, puedes usar el método get de la operación:

$cred = gcloud auth application-default print-access-token
$headers = @{ Authorization = "Bearer $cred" }

Invoke-WebRequest `
  -Method Get `
  -Headers $headers `
  -Uri "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand Content

Si la solicitud es exitosa, el servidor mostrará una respuesta con el estado de la operación en formato JSON:

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.healthcare.v1beta1.OperationMetadata",
    "apiMethodName": "google.cloud.healthcare.v1beta1.dicom.DicomService.ExportDicomData",
    "createTime": "CREATE_TIME",
    "endTime": "END_TIME",
    "logsUrl": "https://console.cloud.google.com/logs/viewer/CLOUD_LOGGING_URL"
  },
  "done": true,
  "response": {
    "@type": "..."
  }
}

Consulta y analiza datos de DICOM en BigQuery

Después de exportar los metadatos de DICOM a BigQuery, puedes ejecutar consultas de muestra para obtener más detalles sobre los metadatos. En los siguientes ejemplos, se muestra cómo ejecutar consultas para algunos casos prácticos comunes.

Busca en los metadatos

Supongamos que deseas buscar en una gran cantidad de metadatos que son difíciles de buscar en otros sistemas, como un sistema de archivo y comunicación de imágenes (PACS) o un archivo neutral del proveedor (VNA). En la siguiente consulta, se muestra cómo consultar el valor PatientID de un paciente y usar la ruta de DICOMweb para recuperar instancias de imágenes específicas. La muestra usa la tabla chc-nih-chet-xray.nih_chet_xray.nih_chet_xray del conjunto de datos de radiografías de tórax de los NIH.

#standardSQL
SELECT CONCAT('/dicomWeb/studies/', StudyInstanceUID, '/series/', SeriesInstanceUID, '/instances/', SOPInstanceUID) as DICOMwebPath
FROM `chc-nih-chest-xray.nih_chest_xray.nih_chest_xray`
WHERE PatientID = '19045';

La consulta muestra los estudios asociados con el paciente. La siguiente respuesta usa formato JSON:

[
  {
    "DICOMwebPath": "/dicomWeb/studies/1.3.6.1.4.1.11129.5.5.169629990647803559688464142879817265366193/series/1.3.6.1.4.1.11129.5.5.141990184899344268273968625887396932057061/instances/1.3.6.1.4.1.11129.5.5.162448513493627342869165322873398445570578"
  },
  {
    "DICOMwebPath": "/dicomWeb/studies/1.3.6.1.4.1.11129.5.5.114160532832901355654444239008681456919023/series/1.3.6.1.4.1.11129.5.5.178361108150351071908200174504411112440700/instances/1.3.6.1.4.1.11129.5.5.145959606905209488520697484018030440952428"
  },
  {
    "DICOMwebPath": "/dicomWeb/studies/1.3.6.1.4.1.11129.5.5.177801331756958922168115732894519725643007/series/1.3.6.1.4.1.11129.5.5.134128639331055702643451404466208677561042/instances/1.3.6.1.4.1.11129.5.5.148534317486838863760908141408862094292875"
  },
  {
    "DICOMwebPath": "/dicomWeb/studies/1.3.6.1.4.1.11129.5.5.119570482687494886334491471870663517807852/series/1.3.6.1.4.1.11129.5.5.148050768676645373034111775531663876425927/instances/1.3.6.1.4.1.11129.5.5.111153708388576066195389700503245704293300"
  },
  {
    "DICOMwebPath": "/dicomWeb/studies/1.3.6.1.4.1.11129.5.5.144704399171290022427247626928443085419319/series/1.3.6.1.4.1.11129.5.5.190285793344339390593165731988543561416633/instances/1.3.6.1.4.1.11129.5.5.110245902713751842026864359179754889505217"
  },
  {
    "DICOMwebPath": "/dicomWeb/studies/1.3.6.1.4.1.11129.5.5.172276126220388966649736649950361623806435/series/1.3.6.1.4.1.11129.5.5.171512371498506519035489729484464872160452/instances/1.3.6.1.4.1.11129.5.5.111721417729733087384317002785068394901165"
  }
]

Consulta los estudios más recientes

Supongamos que deseas propagar una lista de trabajo de lectura de PACS con los estudios más recientes de tu conjunto de datos.

En la siguiente consulta, se muestra cómo recuperar y mostrar los estudios más recientes junto con los recuentos de instancias y los metadatos circundantes. En la muestra, se usa la tabla chc-tcia:lpct_diagnosis.lpct_diagnosis del conjunto de datos LungCT-Diagnosis de TCIA.

#standardSQL
SELECT MIN(CONCAT(StudyDate, ' ', StudyTime)) as StudyDateTime, MIN(PatientID) as PatientID, StudyInstanceUID, COUNT(*) as InstanceCount
FROM `chc-tcia.lungct_diagnosis.lungct_diagnosis`
GROUP BY StudyInstanceUID
ORDER BY StudyDateTime DESC
LIMIT 20;

La consulta muestra la siguiente información:

  • Los 20 estudios más recientes que ingresaron al sistema y cuándo lo hicieron
  • El paciente asociado con cada estudio
  • El UID del estudio
  • La cantidad de instancias asociadas con el estudio

La siguiente respuesta usa formato JSON:

[
  {
    "StudyDateTime": "1998-09-24 07:59:11",
    "PatientID": "R_006",
    "StudyInstanceUID": "1.3.6.1.4.1.14519.5.2.1.4320.5030.203059346048546067166621241946",
    "InstanceCount": "130"
  },
  {
    "StudyDateTime": "1998-09-19 15:02:00",
    "PatientID": "R_168",
    "StudyInstanceUID": "1.3.6.1.4.1.14519.5.2.1.4320.5030.339960057327890022720983572187",
    "InstanceCount": "73"
  },
  {
    "StudyDateTime": "1998-09-03 13:59:23",
    "PatientID": "R_232",
    "StudyInstanceUID": "1.3.6.1.4.1.14519.5.2.1.4320.5030.339835546587977846672632754158",
    "InstanceCount": "74"
  },
  {
    "StudyDateTime": "1998-08-20 09:54:23",
    "PatientID": "R_210",
    "StudyInstanceUID": "1.3.6.1.4.1.14519.5.2.1.4320.5030.296738593990263872210071427126",
    "InstanceCount": "108"
  },
  {
    "StudyDateTime": "1998-08-17 15:22:14",
    "PatientID": "R_053",
    "StudyInstanceUID": "1.3.6.1.4.1.14519.5.2.1.4320.5030.517417975270684537124932347957",
    "InstanceCount": "104"
  },
  {
    "StudyDateTime": "1998-08-03 08:53:02",
    "PatientID": "R_043",
    "StudyInstanceUID": "1.3.6.1.4.1.14519.5.2.1.4320.5030.227672022111453893046049224932",
    "InstanceCount": "111"
  },
  {
    "StudyDateTime": "1998-07-24 10:01:17",
    "PatientID": "R_141",
    "StudyInstanceUID": "1.3.6.1.4.1.14519.5.2.1.4320.5030.179196140853257709306370614304",
    "InstanceCount": "110"
  },
  {
    "StudyDateTime": "1998-06-29 09:18:16",
    "PatientID": "R_069",
    "StudyInstanceUID": "1.3.6.1.4.1.14519.5.2.1.4320.5030.272642986942028254801481747252",
    "InstanceCount": "118"
  },
  {
    "StudyDateTime": "1998-06-27 12:47:58",
    "PatientID": "R_233",
    "StudyInstanceUID": "1.3.6.1.4.1.14519.5.2.1.4320.5030.681962696010777092272412255441",
    "InstanceCount": "65"
  },
  {
    "StudyDateTime": "1998-06-13 11:25:35",
    "PatientID": "R_075",
    "StudyInstanceUID": "1.3.6.1.4.1.14519.5.2.1.4320.5030.905893527127370577828717624475",
    "InstanceCount": "112"
  },
  {
    "StudyDateTime": "1998-06-06 12:16:24",
    "PatientID": "R_029",
    "StudyInstanceUID": "1.3.6.1.4.1.14519.5.2.1.4320.5030.125721920632162119492941634336",
    "InstanceCount": "109"
  },
  {
    "StudyDateTime": "1998-04-30 10:52:34",
    "PatientID": "R_116",
    "StudyInstanceUID": "1.3.6.1.4.1.14519.5.2.1.4320.5030.140526923029511055644251155499",
    "InstanceCount": "115"
  },
  {
    "StudyDateTime": "1998-04-11 08:55:15",
    "PatientID": "R_014",
    "StudyInstanceUID": "1.3.6.1.4.1.14519.5.2.1.4320.5030.231039938881330096566986102847",
    "InstanceCount": "76"
  },
  {
    "StudyDateTime": "1998-04-06 13:48:50",
    "PatientID": "R_061",
    "StudyInstanceUID": "1.3.6.1.4.1.14519.5.2.1.4320.5030.148444392206166653380348096858",
    "InstanceCount": "70"
  },
  {
    "StudyDateTime": "1998-04-05 12:57:54",
    "PatientID": "R_126",
    "StudyInstanceUID": "1.3.6.1.4.1.14519.5.2.1.4320.5030.803397998355063686023109438391",
    "InstanceCount": "71"
  },
  {
    "StudyDateTime": "1998-03-21 13:23:15",
    "PatientID": "R_093",
    "StudyInstanceUID": "1.3.6.1.4.1.14519.5.2.1.4320.5030.201986527949877334068747060981",
    "InstanceCount": "65"
  },
  {
    "StudyDateTime": "1998-03-06 13:27:51",
    "PatientID": "R_065",
    "StudyInstanceUID": "1.3.6.1.4.1.14519.5.2.1.4320.5030.233872568071694592857630274388",
    "InstanceCount": "69"
  },
  {
    "StudyDateTime": "1998-03-06 09:09:43",
    "PatientID": "R_191",
    "StudyInstanceUID": "1.3.6.1.4.1.14519.5.2.1.4320.5030.243097352990517043299166705830",
    "InstanceCount": "76"
  },
  {
    "StudyDateTime": "1998-01-14 14:59:23",
    "PatientID": "R_237",
    "StudyInstanceUID": "1.3.6.1.4.1.14519.5.2.1.4320.5030.213658277730427015624893071198",
    "InstanceCount": "68"
  },
  {
    "StudyDateTime": "1998-01-02 14:00:00",
    "PatientID": "R_078",
    "StudyInstanceUID": "1.3.6.1.4.1.14519.5.2.1.4320.5030.200669196334798686049957852894",
    "InstanceCount": "87"
  }
]

Limitaciones y comportamientos adicionales

Las etiquetas de DICOM se enumerarán en una columna separada (llamada DroppedTags.TagName) en la tabla de BigQuery de destino si la etiqueta de DICOM no tiene un tipo compatible en BigQuery (enumerado en RV excluidas).).

Soluciona problemas de solicitudes de exportación de DICOM

Si se producen errores durante una solicitud de exportación de DICOM a BigQuery, se registran en Cloud Logging. Para obtener más información, consulta Visualiza los registros de errores en Cloud Logging.