Classes de armazenamento DICOM

Nesta página, descrevemos como gerenciar dados DICOM na API Cloud Healthcare usando diferentes classes de armazenamento. Escolher a classe de armazenamento certa pode ajudar você a reduzir custos e atender aos requisitos regulamentares de retenção de dados.

Esta página é destinada a usuários técnicos que já conhecem o DICOM e a API Cloud Healthcare.

Visão geral

As classes de armazenamento DICOM funcionam de maneira semelhante às classes de armazenamento do Cloud Storage, oferecendo diferentes características de custo e desempenho com base na frequência de acesso aos dados e no tempo de armazenamento. Para mais informações sobre cada classe de armazenamento, consulte Descrições de classe.

Talvez você queira mudar a classe de armazenamento de objetos DICOM dependendo da frequência com que acessa o objeto ou do tempo que ele precisa ser mantido. Exemplo:

  • É possível mover imagens DICOM raramente acessadas do armazenamento padrão para o Nearline ou Coldline Storage e economizar nos custos de faturamento.
  • É possível mover os dados de pacientes que precisam ser mantidos por motivos legais para o Archive Storage, que é a classe de armazenamento mais barata e durável.

Classes de armazenamento DICOM disponíveis

É possível usar as seguintes classes de armazenamento para seus objetos DICOM:

  • Padrão (padrão)
  • Nearline
  • Coldline
  • Arquivar

Preços das classes de armazenamento

Cada classe de armazenamento tem uma estrutura de preços própria. Mudar a classe de armazenamento dos seus objetos DICOM pode afetar os custos de faturamento. Para saber mais, consulte:

Mudar a classe de armazenamento de objetos DICOM individuais

É possível mudar a classe de armazenamento de objetos DICOM no nível de estudo, série ou instância.

Os exemplos a seguir mostram como mudar a classe de armazenamento de uma instância DICOM.

REST

  1. Mude a classe de armazenamento da instância DICOM usando o método projects.locations.datasets.dicomStores.studies.series.instances.setBlobStorageSettings.

    Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

    • PROJECT_ID: o ID do seu Google Cloud projeto
    • LOCATION: o local do conjunto de dados;
    • DATASET_ID: o conjunto de dados pai do armazenamento DICOM
    • DICOM_STORE_ID: o ID do armazenamento DICOM
    • STUDY_INSTANCE_UID: o identificador exclusivo da instância de estudo
    • SERIES_INSTANCE_UID: o identificador exclusivo da instância da série
    • INSTANCE_UID: o identificador exclusivo da instância
    • STORAGE_CLASS: a classe de armazenamento da instância DICOM. Um de STANDARD, NEARLINE, COLDLINE ou ARCHIVE.

    Corpo JSON da solicitação:

    {
      "blobStorageSettings": {
        "blobStorageClass": "STORAGE_CLASS"
      }
    }
    

    Para enviar a solicitação, escolha uma destas opções:

    curl

    Salve o corpo da solicitação em um arquivo chamado request.json. Execute o comando a seguir no terminal para criar ou substituir esse arquivo no diretório atual:

    cat > request.json << 'EOF'
    {
      "blobStorageSettings": {
        "blobStorageClass": "STORAGE_CLASS"
      }
    }
    EOF

    Depois execute o comando a seguir para enviar a solicitação REST:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies/STUDY_INSTANCE_UID/series/SERIES_INSTANCE_UID/instances/INSTANCE_UID:setBlobStorageSettings"

    PowerShell

    Salve o corpo da solicitação em um arquivo chamado request.json. Execute o comando a seguir no terminal para criar ou substituir esse arquivo no diretório atual:

    @'
    {
      "blobStorageSettings": {
        "blobStorageClass": "STORAGE_CLASS"
      }
    }
    '@  | Out-File -FilePath request.json -Encoding utf8

    Depois execute o comando a seguir para enviar a solicitação REST:

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

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies/STUDY_INSTANCE_UID/series/SERIES_INSTANCE_UID/instances/INSTANCE_UID:setBlobStorageSettings" | Select-Object -Expand Content

    APIs Explorer

    Copie o corpo da solicitação e abra a página de referência do método. O painel "APIs Explorer" é aberto no lado direito da página. Interaja com essa ferramenta para enviar solicitações. Cole o corpo da solicitação nessa ferramenta, preencha todos os outros campos obrigatórios e clique em Executar.

    A saída é esta: A resposta contém um identificador para uma operação de longa duração (LRO, na sigla em inglês). Operações de longa duração são retornadas quando as chamadas de método podem levar mais tempo para serem concluídas. Anote o valor de OPERATION_ID. Você vai precisar desse valor na próxima etapa.

  2. Confira o status da operação de longa duração usando o método projects.locations.datasets.operations.get.

    Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

    • PROJECT_ID: o ID do seu Google Cloud projeto
    • LOCATION: o local do conjunto de dados;
    • DATASET_ID: o conjunto de dados pai do armazenamento DICOM
    • OPERATION_ID: o ID retornado da operação de longa duração.

    Para enviar a solicitação, escolha uma destas opções:

    curl

    execute o seguinte comando:

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

    PowerShell

    Execute o seguinte comando:

    $cred = gcloud auth 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
    A saída é esta: Quando a resposta contém "done": true, a LRO é concluída.

Mudar a classe de armazenamento de vários objetos usando um arquivo de filtro

As seções a seguir mostram como criar e usar um arquivo de filtro para mudar a classe de armazenamento de objetos DICOM com base em um critério de filtro.

Requisitos de arquivo de filtro

  • Cada linha no arquivo de filtro define o estudo, a série ou a instância e usa o formato /studies/STUDY_INSTANCE_UID/series/SERIES_INSTANCE_UID/instances/INSTANCE_UID.
  • É possível truncar uma linha para especificar o nível em que o filtro funciona. Por exemplo, é possível selecionar um estudo inteiro especificando /studies/STUDY_INSTANCE_UID ou uma série inteira especificando /studies/STUDY_INSTANCE_UID/series/SERIES_INSTANCE_UID.

Considere o seguinte arquivo de filtro:

/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

Este arquivo de filtro de exemplo se aplica ao seguinte:

  • Todo o estudo com o UID da instância de estudo como 1.123.456.789
  • Duas séries separadas com UIDs de instância de série como 123.456 e 567.890 no estudo 1.666.333.111
  • Três instâncias individuais com IDs 111, 222 e 333 no estudo 1.888.999.222 e na série 123.456

Criar um arquivo de filtro usando o BigQuery

Para criar um arquivo de filtro usando o BigQuery, primeiro exporte os metadados do seu armazenamento DICOM para o BigQuery. Os metadados exportados mostram os UIDs de estudo, série e instância dos dados DICOM no seu armazenamento DICOM.

Depois de exportar os metadados, conclua as seguintes etapas:

  1. Execute uma consulta para retornar os UIDs do estudo, da série e das instâncias que você quer adicionar ao arquivo de filtro.

    Por exemplo, a consulta a seguir mostra como concatenar os UIDs de estudo, série e instância para corresponder aos requisitos de formato do arquivo de filtro:

    SELECT CONCAT
        ('/studies/', StudyInstanceUID, '/series/', SeriesInstanceUID, '/instances/', SOPInstanceUID)
    FROM
        [PROJECT_ID:BIGQUERY_DATASET.BIGQUERY_TABLE]
  2. Opcional: se a consulta retornar um grande conjunto de resultados que exceda o tamanho máximo da resposta, salve os resultados da consulta em uma nova tabela de destino no BigQuery.

  3. Salve os resultados da consulta em um arquivo e exporte para o Cloud Storage. Se você salvou os resultados da consulta em uma nova tabela de destino na Etapa 2, consulte Exportar dados da tabela para exportar o conteúdo da tabela para o Cloud Storage.

  4. Edite o arquivo exportado conforme necessário e inclua-o na solicitação para mudar a classe de armazenamento de vários objetos DICOM.

Criar um arquivo de filtro manualmente

Para criar um arquivo de filtro manualmente, faça o seguinte:

  1. Crie um arquivo de filtro com os objetos DICOM que você está filtrando.
  2. Faça upload do arquivo de filtro para o Cloud Storage. Para instruções, consulte Fazer upload de objetos de um sistema de arquivos.

Usar um arquivo de filtro

Os exemplos a seguir mostram como aplicar um arquivo de filtro ao mudar a classe de armazenamento de objetos DICOM.

REST

  1. Mude a classe de armazenamento das instâncias DICOM no arquivo de filtro usando o método projects.locations.datasets.dicomStores.studies.series.instances.setBlobStorageSettings.

    Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

    • PROJECT_ID: o ID do seu Google Cloud projeto
    • LOCATION: o local do conjunto de dados;
    • DATASET_ID: o conjunto de dados pai do armazenamento DICOM
    • DICOM_STORE_ID: o ID do armazenamento DICOM
    • STORAGE_CLASS: a classe de armazenamento para os objetos DICOM. Um de STANDARD, NEARLINE, COLDLINE ou ARCHIVE.
    • CLOUD_STORAGE_BUCKET: o nome do bucket do Cloud Storage que contém o arquivo de filtro
    • FILTER_FILE_PATH: o URI totalmente qualificado do arquivo de filtro no bucket do Cloud Storage

    Corpo JSON da solicitação:

    {
      "blobStorageSettings": {
        "blobStorageClass": "STORAGE_CLASS"
      },
      "filterConfig": {
        "resourcePathsGcsUri": "gs://CLOUD_STORAGE_BUCKET/FILTER_FILE_PATH"
      }
    }
    

    Para enviar a solicitação, escolha uma destas opções:

    curl

    Salve o corpo da solicitação em um arquivo chamado request.json. Execute o comando a seguir no terminal para criar ou substituir esse arquivo no diretório atual:

    cat > request.json << 'EOF'
    {
      "blobStorageSettings": {
        "blobStorageClass": "STORAGE_CLASS"
      },
      "filterConfig": {
        "resourcePathsGcsUri": "gs://CLOUD_STORAGE_BUCKET/FILTER_FILE_PATH"
      }
    }
    EOF

    Depois execute o comando a seguir para enviar a solicitação REST:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    -d @request.json \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID:setBlobStorageSettings"

    PowerShell

    Salve o corpo da solicitação em um arquivo chamado request.json. Execute o comando a seguir no terminal para criar ou substituir esse arquivo no diretório atual:

    @'
    {
      "blobStorageSettings": {
        "blobStorageClass": "STORAGE_CLASS"
      },
      "filterConfig": {
        "resourcePathsGcsUri": "gs://CLOUD_STORAGE_BUCKET/FILTER_FILE_PATH"
      }
    }
    '@  | Out-File -FilePath request.json -Encoding utf8

    Depois execute o comando a seguir para enviar a solicitação REST:

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

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json" `
    -InFile request.json `
    -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID:setBlobStorageSettings" | Select-Object -Expand Content
    A saída é esta: A resposta contém um identificador para uma operação de longa duração (LRO, na sigla em inglês). Operações de longa duração são retornadas quando as chamadas de método podem levar mais tempo para serem concluídas. Anote o valor de OPERATION_ID. Você vai precisar desse valor na próxima etapa.

  2. Confira o status da operação de longa duração usando o método projects.locations.datasets.operations.get.

    Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

    • PROJECT_ID: o ID do seu Google Cloud projeto
    • LOCATION: o local do conjunto de dados;
    • DATASET_ID: o conjunto de dados pai do armazenamento DICOM
    • OPERATION_ID: o ID retornado da operação de longa duração.

    Para enviar a solicitação, escolha uma destas opções:

    curl

    execute o seguinte comando:

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

    PowerShell

    Execute o seguinte comando:

    $cred = gcloud auth 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
    A saída é esta: Quando a resposta contém "done": true, a LRO é concluída.

Ver a classe de armazenamento de um objeto DICOM

É possível conferir a classe de armazenamento de objetos DICOM no nível de estudo, série ou instância.

As seções a seguir descrevem como visualizar a classe de armazenamento de uma instância DICOM.

Receber informações da classe de armazenamento de um objeto DICOM

Os exemplos a seguir mostram como usar o método instances.getStorageInfo para conferir a classe de armazenamento de objetos DICOM.

REST

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • PROJECT_ID: o ID do seu Google Cloud projeto
  • LOCATION: o local do conjunto de dados;
  • DATASET_ID: o conjunto de dados pai do armazenamento DICOM
  • DICOM_STORE_ID: o ID do armazenamento DICOM
  • STUDY_INSTANCE_UID: o identificador exclusivo da instância de estudo
  • SERIES_INSTANCE_UID: o identificador exclusivo da instância da série
  • INSTANCE_UID: o identificador exclusivo da instância

Para enviar a solicitação, escolha uma destas opções:

curl

execute o seguinte comando:

curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies/STUDY_INSTANCE_UID/series/SERIES_INSTANCE_UID/instances/INSTANCE_UID:getStorageInfo"

PowerShell

Execute o seguinte comando:

$cred = gcloud auth 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/dicomStores/DICOM_STORE_ID/dicomWeb/studies/STUDY_INSTANCE_UID/series/SERIES_INSTANCE_UID/instances/INSTANCE_UID:getStorageInfo" | Select-Object -Expand Content

APIs Explorer

Abra a página de referência do método. O painel "APIs Explorer" é aberto no lado direito da página. Interaja com essa ferramenta para enviar solicitações. Preencha todos os campos obrigatórios e clique em Executar.

Você receberá uma resposta JSON semelhante a esta:

Consultar metadados DICOM exportados no BigQuery

É possível exportar metadados DICOM para o BigQuery e executar consultas para conferir as classes de armazenamento dos objetos DICOM exportados.

A consulta a seguir mostra como recuperar o UID da instância de estudo, o UID da instância de série, o UID da instância, o tamanho do armazenamento e a classe de armazenamento de até 1.000 instâncias DICOM de um conjunto de dados do BigQuery:

SELECT StudyInstanceUID, SeriesInstanceUID, SOPInstanceUID, BlobStorageSize, StorageClass
FROM PROJECT_ID:BIGQUERY_DATASET.BIGQUERY_TABLE
LIMIT 1000

Substitua:

  • PROJECT_ID: o ID do seu Google Cloud projeto
  • BIGQUERY_DATASET: o conjunto de dados principal do BigQuery da tabela que contém os metadados DICOM exportados
  • BIGQUERY_TABLE: a tabela do BigQuery que contém os metadados DICOM exportados.