Como exportar metadados de DICOM para o BigQuery

Nesta página, explicamos como exportar metadados do DICOM para o BigQuery para exploração e análise. Para informações sobre o esquema do BigQuery criado ao exportar metadados do DICOM, consulte Noções básicas sobre o esquema DICOM do BigQuery.

Como configurar permissões do BigQuery

Antes de exportar metadados DICOM para o BigQuery, você precisa conceder permissões extras à conta de serviço do Agente de serviço do Cloud Healthcare. Para mais informações, consulte Permissões do BigQuery para armazenar DICOM.

Como configurar o destino do BigQuery

Ao definir o destino do BigQuery, use o URI totalmente qualificado, da seguinte forma:
bq://PROJECT_ID.BIGQUERY_DATASET_ID.BIGQUERY_TABLE_ID
O comportamento da operação de exportação pode variar dependendo destes fatores:
  • Se a tabela de destino já existe
  • Se você definiu o campo force (usando a API) ou a sinalização --overwrite-table (usando a ferramenta de linha de comando gcloud)
  • Se você definiu um valor para o enum writeDisposition. Se você usar a enumeração writeDisposition, não defina o campo force.
O comportamento em cada um desses casos é o seguinte:
  • Se a tabela de destino já existir e force estiver definida como true ou a sinalização --overwrite-table for especificada, a operação de exportação substituirá a tabela atual.
  • Se a tabela de destino já existir e force estiver definida como false ou a sinalização --overwrite-table não for especificada, ocorrerá um erro.
  • Se a tabela de destino ainda não existir, uma nova tabela será criada, independentemente de você especificar o campo force ou a sinalização --overwrite-table.
  • O comportamento de writeDisposition está descrito na documentação. O enum writeDisposition executa um comportamento semelhante ao das opções ao usar force, com a seguinte exceção: se a tabela de destino já existir e estiver vazia, a operação de exportação será concluída em vez de retornar um erro.

Como exportar metadados DICOM

Nas amostras a seguir, veja como exportar metadados DICOM para uma tabela do BigQuery. Nestas amostras, o armazenamento DICOM e a tabela do BigQuery estão no mesmo projeto. Para exportar metadados DICOM para outro projeto, consulte Como exportar metadados DICOM para um projeto diferente.

Console

Para exportar metadados DICOM para o BigQuery, conclua as etapas a seguir:

  1. No Console do Cloud, acesse a página Conjuntos de dados.
    Acessar a página Conjuntos de dados
  2. Clique no conjunto de dados que contém o armazenamento DICOM do qual você está exportando metadados DICOM.
  3. Na lista de armazenamentos de dados, escolha Export na lista de Actions para o armazenamento de DICOM.
  4. Na página Export DICOM Store, selecione BigQuery Table.
  5. Na lista Projeto, selecione o projeto do BigQuery.
  6. Na lista ID do conjunto de dados, selecione o conjunto de dados.
  7. No campo Nome da tabela, insira um novo nome.
    O BigQuery verifica cada seleção para garantir que a tabela de destino seja válida.
  8. Clique em Exportar para exportar metadados DICOM para o destino definido no BigQuery.
  9. Para acompanhar o status da operação, clique na guia Operações. Após a conclusão da operação, as seguintes indicações serão exibidas:
    • A seção Status da operação de longa duração tem uma marca de seleção verde no cabeçalho OK.
    • A seção Visão geral tem uma marca de seleção verde e um indicador OK na mesma linha do ID da operação.
    Se você encontrar erros, clique em Ações e, em seguida, clique em Visualizar detalhes no Cloud Logging.

gcloud

Para exportar metadados DICOM para o BigQuery, use o comando gcloud healthcare dicom-stores export bq. Especifique as seguintes informações:

  • O nome do conjunto de dados pai
  • O nome do armazenamento DICOM
  • O nome de um conjunto de dados existente do BigQuery
  • Um nome para a tabela do BigQuery Export. O nome pode conter apenas letras (maiúsculas ou minúsculas), números e sublinhados. Consulte Como configurar o destino do BigQuery para ver uma explicação sobre como personalizar o comportamento da operação de exportação.

A amostra a seguir exibe o 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]

Quando você executa o comando, ele retorna o nome da operação:

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

Para ver mais detalhes sobre a operação, execute o comando gcloud healthcare operations describe e forneça OPERATION_ID da resposta:

gcloud healthcare operations describe OPERATION_ID \
  --dataset=DATASET_ID

Quando a operação termina, a resposta inclui 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 metadados DICOM para o BigQuery, use o método projects.locations.datasets.dicomStores.export.

curl

Para exportar metadados DICOM, faça uma solicitação POST e especifique as seguintes informações:

  • O nome e o local do conjunto de dados pai.
  • O nome do armazenamento DICOM
  • O nome de um conjunto de dados existente do BigQuery
  • Um nome para a tabela do BigQuery Export. O nome pode conter apenas letras (maiúsculas ou minúsculas), números e sublinhados. Consulte Como configurar o destino do BigQuery para ver uma explicação sobre como personalizar o comportamento da operação de exportação.
  • Um dos seguintes valores para a enumeração writeDisposition:
    • WRITE_EMPTY: só exportará dados se as tabelas de destino estiverem vazias. Esse é o padrão.
    • WRITE_TRUNCATE: apague todos os dados atuais nas tabelas antes de gravar as instâncias.
    • WRITE_APPEND: anexa dados às tabelas atuais.

O exemplo a seguir mostra uma solicitação POST usando 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"

Se a solicitação for bem-sucedida, o servidor retornará a resposta no formato JSON:

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

A resposta contém um nome de operação. Para rastrear o status da operação, use o método get de operação:

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"

Se a solicitação for bem-sucedida, o servidor retornará uma resposta com o status da operação no 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 metadados DICOM, faça uma solicitação POST e especifique as seguintes informações:

  • O nome e o local do conjunto de dados pai.
  • O nome do armazenamento DICOM
  • O nome de um conjunto de dados existente do BigQuery
  • Um nome para a tabela do BigQuery Export. O nome pode conter apenas letras (maiúsculas ou minúsculas), números e sublinhados. Consulte Como configurar o destino do BigQuery para ver uma explicação sobre como personalizar o comportamento da operação de exportação.
  • Um dos seguintes valores para a enumeração writeDisposition:
    • WRITE_EMPTY: só exportará dados se as tabelas de destino estiverem vazias. Esse é o padrão.
    • WRITE_TRUNCATE: apague todos os dados atuais nas tabelas antes de gravar as instâncias.
    • WRITE_APPEND: anexa dados às tabelas atuais.

O exemplo a seguir mostra uma solicitação POST usando o 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

Se a solicitação for bem-sucedida, o servidor retornará a resposta no formato JSON:

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

A resposta contém um nome de operação. Para rastrear o status da operação, use o método get de operação:

$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

Se a solicitação for bem-sucedida, o servidor retornará uma resposta com o status da operação no 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": "..."
  }
}

Como exportar metadados DICOM para um projeto diferente

Para exportar metadados DICOM de um projeto para outro, primeiro consulte Como exportar metadados DICOM para um projeto diferente para informações sobre como definir permissões do IAM no projeto de destino.

gcloud

Para exportar metadados DICOM de um armazenamento DICOM em um projeto para uma tabela do BigQuery em outro projeto, use o comando gcloud healthcare dicom-stores export bq. Especifique as seguintes informações:

  • O nome do conjunto de dados pai
  • O nome do armazenamento DICOM
  • O projeto de destino
  • O nome de um conjunto de dados do BigQuery existente no projeto de destino
  • Um nome para a tabela do BigQuery Export. O nome pode conter apenas letras (maiúsculas ou minúsculas), números e sublinhados. Consulte Como configurar o destino do BigQuery para uma explicação de como a API Cloud Healthcare grava dados na tabela do BigQuery.

A amostra a seguir exibe o 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]

A linha de comando exibe o ID da operação e, após a conclusão da operação, 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 mais detalhes sobre a operação, execute o comando gcloud healthcare operations describe e forneça OPERATION_ID da resposta:

gcloud healthcare operations describe OPERATION_ID \
  --dataset=DATASET_ID

Quando a operação termina, a resposta inclui 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 metadados DICOM para o BigQuery, use o método projects.locations.datasets.dicomStores.export.

curl

Para exportar metadados DICOM de um armazenamento DICOM em um projeto para uma tabela do BigQuery em outro projeto, faça uma solicitação POST e especifique as seguintes informações:

  • O projeto de origem
  • O nome e o local do conjunto de dados pai.
  • O nome do armazenamento DICOM
  • O projeto de destino
  • O nome de um conjunto de dados do BigQuery existente no projeto de destino
  • Um nome para a tabela do BigQuery Export. O nome pode conter apenas letras (maiúsculas ou minúsculas), números e sublinhados. Consulte Como configurar o destino do BigQuery para uma explicação de como a API Cloud Healthcare grava dados na tabela do BigQuery.
  • Um dos seguintes valores para a enumeração writeDisposition:
    • WRITE_EMPTY: só exportará dados se as tabelas de destino estiverem vazias. Esse é o padrão.
    • WRITE_TRUNCATE: apague todos os dados atuais nas tabelas antes de gravar as instâncias.
    • WRITE_APPEND: anexa dados às tabelas atuais.

O exemplo a seguir mostra uma solicitação POST usando 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"

Se a solicitação for bem-sucedida, o servidor retornará a resposta no formato JSON:

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

A resposta contém um nome de operação. Para rastrear o status da operação, use o método get de operação:

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"

Se a solicitação for bem-sucedida, o servidor retornará uma resposta com o status da operação no 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 metadados DICOM de um armazenamento DICOM em um projeto para uma tabela do BigQuery em outro projeto, faça uma solicitação POST e especifique as seguintes informações:

  • O projeto de origem
  • O nome e o local do conjunto de dados pai.
  • O nome do armazenamento DICOM
  • O projeto de destino
  • O nome de um conjunto de dados do BigQuery existente no projeto de destino
  • Um nome para a tabela do BigQuery Export. O nome pode conter apenas letras (maiúsculas ou minúsculas), números e sublinhados. Consulte Como configurar o destino do BigQuery para uma explicação de como a API Cloud Healthcare grava dados na tabela do BigQuery.
  • Um dos seguintes valores para a enumeração writeDisposition:
    • WRITE_EMPTY: só exportará dados se as tabelas de destino estiverem vazias. Esse é o padrão.
    • WRITE_TRUNCATE: apague todos os dados atuais nas tabelas antes de gravar as instâncias.
    • WRITE_APPEND: anexa dados às tabelas atuais.

O exemplo a seguir mostra uma solicitação POST usando o 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

Se a solicitação for bem-sucedida, o servidor retornará a resposta no formato JSON:

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

A resposta contém um nome de operação. Para rastrear o status da operação, use o método get de operação:

$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

Se a solicitação for bem-sucedida, o servidor retornará uma resposta com o status da operação no 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": "..."
  }
}

Como exportar metadados do DICOM usando filtros

Por padrão, quando você exporta arquivos DICOM para o Cloud Storage, todos os arquivos DICOM no armazenamento DICOM especificado são exportados. Da mesma forma, quando você exporta metadados DICOM para o BigQuery, os metadados de todos os dados DICOM no armazenamento DICOM especificado são exportados.

É possível exportar um subconjunto de dados ou metadados DICOM usando um filtro. O filtro é definido em um arquivo de filtro.

Como configurar arquivos de filtro

Um arquivo de filtro define quais arquivos DICOM serão exportados para o Cloud Storage ou o BigQuery. É possível configurar arquivos de filtro nos seguintes níveis:

  • No nível do estudo
  • No nível da série
  • No nível da instância

O arquivo de filtro é composto por várias linhas, cada uma definindo o estudo, a série ou a instância que você quer exportar. Cada linha usa o formato /studies/STUDY_UID[/series/SERIES_UID[/instances/INSTANCE_UID]].

Se um estudo, uma série ou uma instância não for especificado no arquivo de filtro quando você o passar no arquivo de filtro, esse estudo, série ou instância não será exportado.

Apenas a parte /studies/STUDY_UID do caminho é obrigatória. É possível exportar um estudo inteiro especificando /studies/STUDY_UID, ou você pode exportar uma série inteira especificando /studies/STUDY_UID/series/SERIES_UID.

Considere o arquivo de filtro a seguir. O arquivo de filtro resultará na exportação de um estudo, duas séries e três instâncias individuais:

/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

Como criar um arquivo de filtro usando o BigQuery

Normalmente, você cria um arquivo de filtro exportando os metadados de um armazenamento DICOM para o BigQuery. Isso permite que você use o BigQuery para ver os UIDs de estudo, série e instância dos dados DICOM no seu armazenamento DICOM. Depois, siga estas etapas:

  1. Consultar os UIDs de estudo, série e instância que você tem interesse. Por exemplo, depois de exportar os metadados do DICOM para o BigQuery, execute a consulta a seguir para concatenar os UIDs de estudo, série e instância para um formato compatível com os requisitos do arquivo de filtro:
    SELECT CONCAT
        ('/studies/', StudyInstanceUID, '/series/', SeriesInstanceUID, '/instances/', SOPInstanceUID)
    FROM
        [PROJECT_ID:BIGQUERY_DATASET.BIGQUERY_TABLE]
    
  2. Se a consulta retornar um grande conjunto de resultados, é possível materializar uma nova tabela salvando os resultados da consulta em uma tabela de destino no BigQuery.
  3. Se você salvou os resultados da consulta em uma tabela de destino, é possível salvar o conteúdo dela em um arquivo e exportá-lo para o Cloud Storage. Para ver as etapas de como fazer isso, consulte Como exportar dados da tabela. O arquivo exportado é seu arquivo de filtro. Você usa o local do arquivo de filtro no Cloud Storage ao especificar o filtro na operação de exportação.

Como criar um arquivo de filtro manualmente

É possível criar um arquivo de filtro com conteúdo personalizado e fazer o upload dele para um bucket do Cloud Storage. Você usa o local do arquivo de filtro no Cloud Storage ao especificar o filtro na operação de exportação. Na amostra a seguir, você verá como fazer upload de um arquivo de filtro para um bucket do Cloud Storage usando o comando gsutil cp:
gsutil cp PATH/TO/FILTER_FILE gs://BUCKET/DIRECTORY

Passar no arquivo de filtros

Depois de criar um arquivo de filtro, você pode chamar a operação de exportação DICOM e transmiti-lo usando a API REST. Veja nas amostras a seguir como exportar metadados DICOM usando um filtro.

gcloud

Para exportar metadados DICOM para o BigQuery usando um filtro, use o 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

Substitua:

  • DICOM_STORE_ID: o identificador do armazenamento DICOM
  • DATASET_ID: o nome do conjunto de dados pai do armazenamento DICOM
  • LOCATION: o local do conjunto de dados pai do armazenamento DICOM
  • PROJECT_ID: o identificador do projeto que contém o conjunto de dados do BigQuery.
  • BIGQUERY_DATASET_ID: o nome do conjunto de dados do BigQuery.
  • BIGQUERY_TABLE_ID: um nome para a tabela do BigQuery Export. O nome pode conter apenas letras (maiúsculas ou minúsculas), números e sublinhados. Consulte Como configurar o destino do BigQuery para uma explicação de como a API Cloud Healthcare grava dados na tabela do BigQuery.
  • BUCKET/DIRECTORY/FILTER_FILE: o local do arquivo de filtro em um bucket do Cloud Storage

A saída é esta:

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 o status da operação, execute o comando gcloud healthcare operations describe e forneça OPERATION_ID da resposta:

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

Substitua:

  • OPERATION_ID: o número do código retornado da resposta anterior.
  • DATASET_ID: o nome do conjunto de dados pai do armazenamento DICOM
  • LOCATION: o local do conjunto de dados pai do armazenamento DICOM

A saída é esta:

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 metadados DICOM para o BigQuery usando um filtro, use o método projects.locations.datasets.dicomStores.export.

curl

Para exportar metadados DICOM usando um filtro, faça uma solicitação POST e especifique as seguintes informações:

  • O nome e o local do conjunto de dados pai.
  • O nome do armazenamento DICOM
  • O local do arquivo de filtro em um bucket do Cloud Storage
  • Um nome para a tabela do BigQuery Export. O nome pode conter apenas letras (maiúsculas ou minúsculas), números e sublinhados. Consulte Como configurar o destino do BigQuery para uma explicação de como a API Cloud Healthcare grava dados na tabela do BigQuery.
  • Um dos seguintes valores para a enumeração writeDisposition:
    • WRITE_EMPTY: só exportará dados se as tabelas de destino estiverem vazias. Esse é o padrão.
    • WRITE_TRUNCATE: apague todos os dados atuais nas tabelas antes de gravar as instâncias.
    • WRITE_APPEND: anexa dados às tabelas atuais.

O exemplo a seguir mostra uma solicitação POST usando 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"

Se a solicitação for bem-sucedida, o servidor retornará a resposta no formato JSON:

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

A resposta contém um nome de operação. Para rastrear o status da operação, use o método get de operação:

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"

Se a solicitação for bem-sucedida, o servidor retornará uma resposta com o status da operação no 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 metadados DICOM usando um filtro, faça uma solicitação POST e especifique as seguintes informações:

  • O nome e o local do conjunto de dados pai.
  • O nome do armazenamento DICOM
  • O local do arquivo de filtro em um bucket do Cloud Storage.
  • Um nome para a tabela do BigQuery Export. O nome pode conter apenas letras (maiúsculas ou minúsculas), números e sublinhados. Consulte Como configurar o destino do BigQuery para uma explicação de como a API Cloud Healthcare grava dados na tabela do BigQuery.
  • Um dos seguintes valores para a enumeração writeDisposition:
    • WRITE_EMPTY: só exportará dados se as tabelas de destino estiverem vazias. Esse é o padrão.
    • WRITE_TRUNCATE: apague todos os dados atuais nas tabelas antes de gravar as instâncias.
    • WRITE_APPEND: anexa dados às tabelas atuais.

O exemplo a seguir mostra uma solicitação POST usando o 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

Se a solicitação for bem-sucedida, o servidor retornará a resposta no formato JSON:

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

A resposta contém um nome de operação. Para rastrear o status da operação, use o método get de operação:

$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

Se a solicitação for bem-sucedida, o servidor retornará uma resposta com o status da operação no 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": "..."
  }
}

Como consultar e analisar dados DICOM no BigQuery

Depois de exportar os metadados do DICOM para o BigQuery, é possível executar consultas de amostra para ver mais detalhes sobre os metadados. Os exemplos a seguir mostram como executar consultas em alguns casos de uso comuns.

Como pesquisar em metadados

Suponha que você queira pesquisar uma grande quantidade de metadados difíceis de pesquisar em outros sistemas, como um sistema de comunicação e arquivamento de imagem (PACS, na sigla em inglês) ou um arquivo neutro de fornecedor (VNA, na sigla em inglês). A consulta a seguir mostra como consultar o valor PatientID de um paciente e usar o caminho DICOMweb para recuperar instâncias de imagem específicas. A amostra usa a tabela chc-nih-chest-xray.nih_chest_xray.nih_chest_xray do conjunto de dados NIH Chest X-ray.

#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';

A consulta retorna os estudos associados ao paciente. A resposta a seguir usa a formatação 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"
  }
]

Como consultar os estudos mais recentes

Suponha que você queira preencher uma lista de trabalho de leitura PACS com os estudos mais recentes do seu conjunto de dados.

A consulta a seguir mostra como recuperar e exibir os estudos mais recentes com as contagens de instâncias e os metadados relacionados. A amostra usa a tabela chc-tcia:lungct_diagnosis.lungct_diagnosis (em inglês) do conjunto de dados TCIA LungCT-Diagnosis.

#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;

A consulta retorna as seguintes informações:

  • Os 20 estudos mais recentes que entraram no sistema e quando eles entraram no sistema
  • O paciente associado a cada estudo
  • O UID do estudo
  • O número de instâncias associadas ao estudo

A resposta a seguir usa a formatação 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"
  }
]

Limitações e comportamento adicional

As tags DICOM serão listadas em uma coluna separada (chamada DroppedTags.TagName ) na tabela de destino do BigQuery se a tag DICOM não tiver um tipo compatível com o BigQuery (listado em RVs excluídas .

Solução de problemas de solicitações de exportação do DICOM

Se ocorrerem erros durante uma solicitação de exportação do DICOM para o BigQuery, eles serão registrados no Cloud Logging. Para mais informações, consulte Como visualizar registros de erros no Cloud Logging.