更改 DICOM 存储类别

本页面介绍如何在 Cloud Healthcare API 中更改 DICOM 数据的存储类别。

概览

Cloud Healthcare API 提供以下存储类别:

  • 标准
  • Nearline
  • Coldline
  • 归档

这些存储类别与 Cloud Storage 中的存储类别类似。

在如下场景中,您可以更改 DICOM 对象的存储类别,以节省费用:

  • 将不经常访问的一系列 DICOM 图片从标准存储空间移至 Nearline 或 Coldline 存储空间。这会释放标准存储分区以存储访问频率更高的映像。
  • 将患者数据从标准存储空间移动到归档存储空间,以归档因法律原因需要保留的数据。Archive 存储是费用最低、耐用性高的存储类别。

更改 DICOM 存储类别的方法

默认情况下, DICOM 实例具有标准存储类别。您可以使用以下方法更改存储类别:

  • import 方法:使用 blobStorageSettings 字段从 Cloud Storage 存储桶导入 DICOM 实例时,设置存储类别
  • storeInstances 方法:在从本地路径存储 DICOM 实例时设置存储类别
  • setBlobStorageSettings 方法:在实例、系列或研究级别的 DICOM 存储区中更改 DICOM 实例的存储类别

准备工作

在 Cloud Healthcare API 中更改 DICOM 实例的存储类别之前,请查看以下价格详情:

更改 DICOM 实例的存储类别

以下示例展示了如何在实例系列研究级别更改 DICOM 实例的存储类别。

在实例级别

如需在实例级别更改 DICOM 实例的存储类别,请完成以下步骤:

REST

使用 projects.locations.datasets.dicomStores.studies.series.instances.setBlobStorageSettings 方法。

  1. 在实例级层更改 DICOM 实例的存储类别。

    在使用任何请求数据之前,请先进行以下替换:

    • PROJECT_ID:您的 Google Cloud 项目的 ID
    • LOCATION:数据集位置
    • DATASET_ID: DICOM 存储区的父数据集
    • DICOM_STORE_ID:DICOM 存储区 ID
    • STUDY_INSTANCE_UID:研究实例唯一标识符
    • SERIES_INSTANCE_UID:系列实例唯一标识符
    • INSTANCE_UID:实例唯一标识符
    • STORAGE_CLASS:来自 STANDARDNEARLINECOLDLINEARCHIVE 的 DICOM 存储区中的 DICOM 对象的存储类别

    请求 JSON 正文:

    {
      "blobStorageSettings": {
        "blob_storage_class": "STORAGE_CLASS"
      }
    }
    

    如需发送请求,请选择以下方式之一:

    curl

    将请求正文保存在名为 request.json 的文件中。在终端中运行以下命令,在当前目录中创建或覆盖此文件:

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

    然后,执行以下命令以发送 REST 请求:

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

    PowerShell

    将请求正文保存在名为 request.json 的文件中。在终端中运行以下命令,在当前目录中创建或覆盖此文件:

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

    然后,执行以下命令以发送 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/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies/STUDY_INSTANCE_UID/series/SERIES_INSTANCE_UID/instance/INSTANCE_UID:setBlobStorageSettings" | Select-Object -Expand Content
    输出如下所示。响应中包含长时间运行的操作的标识符。如果方法调用可能需要大量时间才能完成,系统就会返回长时间运行的操作。请注意 OPERATION_ID 的值。下一步中需要用到此值。
  2. 获取长时间运行的操作的状态。

    在使用任何请求数据之前,请先进行以下替换:

    • PROJECT_ID:您的 Google Cloud 项目的 ID
    • LOCATION:数据集位置
    • DATASET_ID: DICOM 存储区的父数据集
    • OPERATION_ID:从长时间运行的操作返回的 ID

    如需发送请求,请选择以下方式之一:

    curl

    执行以下命令:

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

    PowerShell

    执行以下命令:

    $cred = gcloud auth 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
    如果长时间运行的操作仍在运行,则服务器会返回响应,其中包含存储类别待更改的 DICOM 实例数。当 LRO 成功完成后,服务器会以 JSON 格式返回包含操作状态的响应:

在系列图书级别

如需在系列级层更改 DICOM 实例的存储类别,请完成以下步骤:

REST

使用 projects.locations.datasets.dicomStores.studies.series.setBlobStorageSettings 方法。

  1. 在系列级层更改 DICOM 实例的存储类别。

    在使用任何请求数据之前,请先进行以下替换:

    • PROJECT_ID:您的 Google Cloud 项目的 ID
    • LOCATION:数据集位置
    • DATASET_ID: DICOM 存储区的父数据集
    • DICOM_STORE_ID:DICOM 存储区 ID
    • STUDY_INSTANCE_UID:研究实例唯一标识符
    • SERIES_INSTANCE_UID:系列实例唯一标识符
    • STORAGE_CLASS:来自 STANDARDNEARLINECOLDLINEARCHIVE 的 DICOM 存储区中的 DICOM 对象的存储类别

    请求 JSON 正文:

    {
      "blobStorageSettings": {
        "blob_storage_class": "STORAGE_CLASS"
      }
    }
    

    如需发送请求,请选择以下方式之一:

    curl

    将请求正文保存在名为 request.json 的文件中。在终端中运行以下命令,在当前目录中创建或覆盖此文件:

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

    然后,执行以下命令以发送 REST 请求:

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

    PowerShell

    将请求正文保存在名为 request.json 的文件中。在终端中运行以下命令,在当前目录中创建或覆盖此文件:

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

    然后,执行以下命令以发送 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/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies/STUDY_INSTANCE_UID/series/SERIES_INSTANCE_UID:setBlobStorageSettings" | Select-Object -Expand Content
    输出如下所示。响应中包含长时间运行的操作的标识符。如果方法调用可能需要大量时间才能完成,系统就会返回长时间运行的操作。请注意 OPERATION_ID 的值。下一步中需要用到此值。
  2. 获取长时间运行的操作的状态。

    在使用任何请求数据之前,请先进行以下替换:

    • PROJECT_ID:您的 Google Cloud 项目的 ID
    • LOCATION:数据集位置
    • DATASET_ID: DICOM 存储区的父数据集
    • OPERATION_ID:从长时间运行的操作返回的 ID

    如需发送请求,请选择以下方式之一:

    curl

    执行以下命令:

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

    PowerShell

    执行以下命令:

    $cred = gcloud auth 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
    如果长时间运行的操作仍在运行,则服务器会返回响应,其中包含存储类别待更改的 DICOM 实例数。当 LRO 成功完成后,服务器会以 JSON 格式返回包含操作状态的响应:

在研究级别

如需在研究级别更改 DICOM 实例的存储类别,请完成以下步骤:

REST

使用 projects.locations.datasets.dicomStores.studies.setBlobStorageSettings 方法。

  1. 在研究级别更改 DICOM 实例的存储类别。

    在使用任何请求数据之前,请先进行以下替换:

    • PROJECT_ID:您的 Google Cloud 项目的 ID
    • LOCATION:数据集位置
    • DATASET_ID: DICOM 存储区的父数据集
    • DICOM_STORE_ID:DICOM 存储区 ID
    • STUDY_INSTANCE_UID:研究实例唯一标识符
    • STORAGE_CLASS:来自 STANDARDNEARLINECOLDLINEARCHIVE 的 DICOM 存储区中的 DICOM 对象的存储类别

    请求 JSON 正文:

    {
      "blobStorageSettings": {
        "blob_storage_class": "STORAGE_CLASS"
      }
    }
    

    如需发送请求,请选择以下方式之一:

    curl

    将请求正文保存在名为 request.json 的文件中。在终端中运行以下命令,在当前目录中创建或覆盖此文件:

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

    然后,执行以下命令以发送 REST 请求:

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

    PowerShell

    将请求正文保存在名为 request.json 的文件中。在终端中运行以下命令,在当前目录中创建或覆盖此文件:

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

    然后,执行以下命令以发送 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/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies/STUDY_INSTANCE_UID:setBlobStorageSettings" | Select-Object -Expand Content
    输出如下所示。响应中包含长时间运行的操作的标识符。如果方法调用可能需要大量时间才能完成,系统就会返回长时间运行的操作。请注意 OPERATION_ID 的值。下一步中需要用到此值。
  2. 获取长时间运行的操作的状态。

    在使用任何请求数据之前,请先进行以下替换:

    • PROJECT_ID:您的 Google Cloud 项目的 ID
    • LOCATION:数据集位置
    • DATASET_ID: DICOM 存储区的父数据集
    • OPERATION_ID:从长时间运行的操作返回的 ID

    如需发送请求,请选择以下方式之一:

    curl

    执行以下命令:

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

    PowerShell

    执行以下命令:

    $cred = gcloud auth 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
    如果长时间运行的操作仍在运行,则服务器会返回响应,其中包含存储类别待更改的 DICOM 实例数。当 LRO 成功完成后,服务器会以 JSON 格式返回包含操作状态的响应:

使用过滤器

以下部分介绍了如何使用过滤文件过滤特定实例,并在研究、系列或实例级别更改其存储类别。

配置过滤器文件

您可以使用过滤器文件定义需要更改存储类别的 DICOM 文件的列表。

过滤器文件中的每一行定义研究、系列或实例,并采用 /studies/STUDY_INSTANCE_UID/series/SERIES_INSTANCE_UID/instances/INSTANCE_UID 格式。

您可以截断一行,以指定过滤器在哪个级别发挥作用。 例如,您可以通过指定 /studies/STUDY_INSTANCE_UID 来更改整个研究的存储类别,也可以通过指定 /studies/STUDY_INSTANCE_UID/series/SERIES_INSTANCE_UID 来更改整个系列的存储类别。

请参考以下过滤器文件:

/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

此过滤器文件会过滤以下内容:

  • 研究实例 UID 为 1.123.456.789 的整个研究
  • 在研究 1.666.333.111 中,两个单独的系列,其系列实例 UID 为 123.456567.890
  • 研究 1.888.999.222 和系列 123.456 中实例 ID 分别为 111222333 的三个单独实例

使用 BigQuery 创建过滤条件文件

如需使用 BigQuery 创建过滤条件文件,您必须将 DICOM 存储区的元数据导出到 BigQuery。 导出的元数据会显示 DICOM 存储区中 DICOM 数据的研究、系列和实例 UID。

导出后,请完成以下步骤:

  1. 查询所需的研究、系列和实例 UID。

    例如,将 DICOM 元数据导出到 BigQuery 后,请运行以下查询来串联研究、系列和实例 UID,以符合过滤器文件格式要求:

    SELECT CONCAT
        ('/studies/', StudyInstanceUID, '/series/', SeriesInstanceUID, '/instances/', SOPInstanceUID)
    FROM
        [PROJECT_ID:BIGQUERY_DATASET.BIGQUERY_TABLE]
  2. 可选:如果查询返回的大型结果集超过响应大小上限,请在 BigQuery 中将查询结果保存到新的目标表

  3. 将查询结果保存到文件中,并将其导出到 Cloud Storage。如果您在第 2 步中将查询结果保存到了新的目标表,请参阅导出表数据以将表的内容导出到 Cloud Storage。

  4. 根据需要修改导出的文件,并将其用作过滤器文件。 setBlobStorageSettings 方法需要过滤器文件在 Cloud Storage 中的位置。

手动创建过滤器文件

如需创建包含自定义内容的过滤器文件并将其上传到 Cloud Storage 存储桶,请完成以下步骤:

  1. 创建一个过滤文件,其中包含需要在本地机器上更改存储类别的实例的列表。使用配置过滤器文件部分中所述的格式。

  2. 将过滤文本文件上传到 Cloud Storage 位置。

    gsutil cp PATH_TO_FILTER_FILE/FILTER_FILE_NAME.txt gs://BUCKET/DIRECTORY
    

    替换以下内容:

    • PATH_TO_FILTER_FILE:本地机器上过滤器文件的路径
    • FILTER_FILE_NAME:过滤器文件的名称
    • BUCKET/DIRECTORY:Cloud Storage 位置的路径

    例如:

    gsutil cp my-local-folder/archive-filters.txt gs://my-bucket/my-directory
    

传递过滤器文件

REST

  1. 使用 projects.locations.datasets.dicomStores.studies.setBlobStorageSettings 方法在 DICOM 存储区级层更改过滤器文件中所有实例的存储类别。

    在使用任何请求数据之前,请先进行以下替换:

    • PROJECT_ID:您的 Google Cloud 项目的 ID
    • LOCATION:数据集位置
    • DATASET_ID: DICOM 存储区的父数据集
    • DICOM_STORE_ID:DICOM 存储区 ID
    • STORAGE_CLASS:来自 STANDARDNEARLINECOLDLINEARCHIVE 的 DICOM 存储区中的 DICOM 对象的存储类别
    • BUCKET/DIRECTORY

    请求 JSON 正文:

    {
      "filter_config": {
        "resource_paths_gcs_uri: "gs://BUCKET/DIRECTORY"
    }
      "blobStorageSettings": {
        "blob_storage_class": "STORAGE_CLASS"
      }
    }
    

    如需发送请求,请选择以下方式之一:

    curl

    将请求正文保存在名为 request.json 的文件中。在终端中运行以下命令,在当前目录中创建或覆盖此文件:

    cat > request.json << 'EOF'
    {
      "filter_config": {
        "resource_paths_gcs_uri: "gs://BUCKET/DIRECTORY"
    }
      "blobStorageSettings": {
        "blob_storage_class": "STORAGE_CLASS"
      }
    }
    EOF

    然后,执行以下命令以发送 REST 请求:

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

    PowerShell

    将请求正文保存在名为 request.json 的文件中。在终端中运行以下命令,在当前目录中创建或覆盖此文件:

    @'
    {
      "filter_config": {
        "resource_paths_gcs_uri: "gs://BUCKET/DIRECTORY"
    }
      "blobStorageSettings": {
        "blob_storage_class": "STORAGE_CLASS"
      }
    }
    '@  | Out-File -FilePath request.json -Encoding utf8

    然后,执行以下命令以发送 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/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID:setBlobStorageSettings" | Select-Object -Expand Content
    输出如下所示。响应中包含长时间运行的操作的标识符。如果方法调用可能需要大量时间才能完成,系统就会返回长时间运行的操作。请注意 OPERATION_ID 的值。下一步中需要用到此值。

  2. 获取长时间运行的操作的状态。

    在使用任何请求数据之前,请先进行以下替换:

    • PROJECT_ID:您的 Google Cloud 项目的 ID
    • LOCATION:数据集位置
    • DATASET_ID: DICOM 存储区的父数据集
    • OPERATION_ID:从长时间运行的操作返回的 ID

    如需发送请求,请选择以下方式之一:

    curl

    执行以下命令:

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

    PowerShell

    执行以下命令:

    $cred = gcloud auth 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
    如果长时间运行的操作仍在运行,则服务器会返回响应,其中包含存储类别待更改的 DICOM 实例数。当 LRO 成功完成后,服务器会以 JSON 格式返回包含操作状态的响应:

检查 DICOM 实例的存储类别

使用 getStorageInfo 方法

以下示例展示了如何查看 DICOM 实例的存储类别。

REST

使用 projects.locations.datasets.dicomStores.dicomWeb.studies.series.instances.getStorageInfo 方法。

在使用任何请求数据之前,请先进行以下替换:

  • PROJECT_ID:您的 Google Cloud 项目的 ID
  • LOCATION:数据集位置
  • DATASET_ID: DICOM 存储区的父数据集
  • DICOM_STORE_ID:DICOM 存储区 ID
  • STUDY_INSTANCE_UID:研究实例唯一标识符
  • SERIES_INSTANCE_UID:系列实例唯一标识符
  • INSTANCE_UID:实例唯一标识符

如需发送请求,请选择以下方式之一:

curl

执行以下命令:

curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1beta1/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

执行以下命令:

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

您应该收到类似以下内容的 JSON 响应:

在 BigQuery 中查询导出的 DICOM 元数据

您还可以将 DICOM 元数据导出到 BigQuery,并查询 BigQuery 数据集以查看 DICOM 实例的存储类别。

例如,您可以运行以下查询来查看 BigQuery 数据集中所有实例的研究实例 UID、系列实例 UID、实例 UID、blob 存储空间大小和 blob 存储类别:

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