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
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 projetoLOCATION: o local do conjunto de dados;DATASET_ID: o conjunto de dados pai do armazenamento DICOMDICOM_STORE_ID: o ID do armazenamento DICOMSTUDY_INSTANCE_UID: o identificador exclusivo da instância de estudoSERIES_INSTANCE_UID: o identificador exclusivo da instância da sérieINSTANCE_UID: o identificador exclusivo da instânciaSTORAGE_CLASS: a classe de armazenamento da instância DICOM. Um deSTANDARD,NEARLINE,COLDLINEouARCHIVE.
Corpo JSON da solicitação:
{ "blobStorageSettings": { "blobStorageClass": "STORAGE_CLASS" } }Para enviar a solicitação, escolha uma destas opções:
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 decurl
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" } } EOFDepois 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 utf8Depois 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 ContentAPIs 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.
OPERATION_ID. Você vai precisar desse valor na próxima etapa.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 projetoLOCATION: o local do conjunto de dados;DATASET_ID: o conjunto de dados pai do armazenamento DICOMOPERATION_ID: o ID retornado da operação de longa duração.
Para enviar a solicitação, escolha uma destas opções:
A saída é esta: Quando a resposta contémcurl
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"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_UIDou 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.456e567.890no estudo1.666.333.111 - Três instâncias individuais com IDs
111,222e333no estudo1.888.999.222e na série123.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:
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]
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.
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.
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:
- Crie um arquivo de filtro com os objetos DICOM que você está filtrando.
- 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
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 projetoLOCATION: o local do conjunto de dados;DATASET_ID: o conjunto de dados pai do armazenamento DICOMDICOM_STORE_ID: o ID do armazenamento DICOMSTORAGE_CLASS: a classe de armazenamento para os objetos DICOM. Um deSTANDARD,NEARLINE,COLDLINEouARCHIVE.CLOUD_STORAGE_BUCKET: o nome do bucket do Cloud Storage que contém o arquivo de filtroFILTER_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:
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 decurl
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" } } EOFDepois 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 utf8Depois 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 ContentOPERATION_ID. Você vai precisar desse valor na próxima etapa.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 projetoLOCATION: o local do conjunto de dados;DATASET_ID: o conjunto de dados pai do armazenamento DICOMOPERATION_ID: o ID retornado da operação de longa duração.
Para enviar a solicitação, escolha uma destas opções:
A saída é esta: Quando a resposta contémcurl
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"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 projetoLOCATION: o local do conjunto de dados;DATASET_ID: o conjunto de dados pai do armazenamento DICOMDICOM_STORE_ID: o ID do armazenamento DICOMSTUDY_INSTANCE_UID: o identificador exclusivo da instância de estudoSERIES_INSTANCE_UID: o identificador exclusivo da instância da sérieINSTANCE_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 projetoBIGQUERY_DATASET: o conjunto de dados principal do BigQuery da tabela que contém os metadados DICOM exportadosBIGQUERY_TABLE: a tabela do BigQuery que contém os metadados DICOM exportados.