DICOM 存储类别

本页介绍了如何使用不同的存储类别在 Cloud Healthcare API 中管理 DICOM 数据。选择合适的存储类别有助于您降低费用并满足数据保留方面的监管要求。

本页面适用于已熟悉 DICOM 和 Cloud Healthcare API 的技术用户。

概览

DICOM 存储类别的运作方式与 Cloud Storage 存储类别类似,可根据您访问数据的频率和需要存储数据的时长提供不同的费用和性能特性。如需详细了解每种存储类别,请参阅类别说明

根据您访问对象的频率或对象需要保留多长时间,您可能需要更改 DICOM 对象的存储类别。例如:

  • 您可以将不常访问的 DICOM 图片从标准存储空间移至 Nearline 存储空间或 Coldline 存储空间,以节省结算费用。
  • 您可以将出于法律原因需要保留的患者数据移至 Archive 存储空间,这是费用最低且最持久的存储类别。

可用的 DICOM 存储类别

您可以为 DICOM 对象使用以下存储类别:

  • 标准(默认)
  • Nearline
  • Coldline
  • 归档

存储类别价格

每种存储类别都有各自的定价结构。更改 DICOM 对象的存储类别可能会影响您的结算费用。如需了解详情,请参阅以下内容:

更改单个 DICOM 对象的存储类别

您可以在研究、系列或实例级别更改 DICOM 对象的存储类别。

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

REST

  1. 使用 projects.locations.datasets.dicomStores.studies.series.instances.setBlobStorageSettings 方法更改 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:DICOM 实例的存储类别。STANDARDNEARLINECOLDLINEARCHIVE 之一。

    请求 JSON 正文:

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

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

    curl

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

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

    然后,执行以下命令以发送 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

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

    @'
    {
      "blobStorageSettings": {
        "blobStorageClass": "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; 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

    API Explorer

    复制请求正文并打开方法参考页面。APIs Explorer 面板会在页面右侧打开。您可以与此工具进行交互以发送请求。 将请求正文粘贴到此工具中,填写任何其他必填字段,然后点击执行

    输出如下所示。响应包含长时间运行的操作 (LRO) 的标识符。当方法调用可能需要额外时间才能完成时,会返回长时间运行的操作。记下 OPERATION_ID 的值。下一步中您需要用到该值。

  2. 使用 projects.locations.datasets.operations.get 方法获取长时间运行的操作的状态。

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

    • 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/v1/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/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand Content
    输出如下所示。当响应包含 "done": true 时,LRO 即已完成。

使用过滤器文件更改多个对象的存储类别

以下部分介绍了如何创建和使用过滤条件文件,以根据过滤条件更改 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。

    例如,以下查询展示了如何串联研究、系列和实例 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. 根据需要修改导出的文件,并将其添加到请求中,以更改多个 DICOM 对象的存储类。

手动创建过滤条件文件

如需手动创建过滤条件文件,请执行以下操作:

  1. 创建一个过滤条件文件,其中包含要过滤的 DICOM 对象。
  2. 将过滤条件文件上传到 Cloud Storage。如需查看相关说明,请参阅从文件系统上传对象

使用过滤器文件

以下示例展示了如何在更改 DICOM 对象的存储类别时应用过滤条件文件。

REST

  1. 使用 projects.locations.datasets.dicomStores.studies.series.instances.setBlobStorageSettings 方法更改过滤条件文件中 DICOM 实例的存储类。

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

    • PROJECT_ID:您的 Google Cloud 项目的 ID
    • LOCATION:数据集位置
    • DATASET_ID:DICOM 存储区的父级数据集
    • DICOM_STORE_ID:DICOM 存储区 ID
    • STORAGE_CLASS:DICOM 对象的存储类。STANDARDNEARLINECOLDLINEARCHIVE 之一。
    • CLOUD_STORAGE_BUCKET:包含过滤条件文件的 Cloud Storage 存储分区的名称
    • FILTER_FILE_PATH:Cloud Storage 存储分区中过滤条件文件的完全限定 URI

    请求 JSON 正文:

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

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

    curl

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

    cat > request.json << 'EOF'
    {
      "blobStorageSettings": {
        "blobStorageClass": "STORAGE_CLASS"
      },
      "filterConfig": {
        "resourcePathsGcsUri": "gs://CLOUD_STORAGE_BUCKET/FILTER_FILE_PATH"
      }
    }
    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/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID:setBlobStorageSettings"

    PowerShell

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

    @'
    {
      "blobStorageSettings": {
        "blobStorageClass": "STORAGE_CLASS"
      },
      "filterConfig": {
        "resourcePathsGcsUri": "gs://CLOUD_STORAGE_BUCKET/FILTER_FILE_PATH"
      }
    }
    '@  | 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/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID:setBlobStorageSettings" | Select-Object -Expand Content
    输出如下所示。响应包含长时间运行的操作 (LRO) 的标识符。当方法调用可能需要额外时间才能完成时,会返回长时间运行的操作。记下 OPERATION_ID 的值。下一步中您需要用到该值。

  2. 使用 projects.locations.datasets.operations.get 方法获取长时间运行的操作的状态。

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

    • 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/v1/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/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand Content
    输出如下所示。当响应包含 "done": true 时,LRO 即已完成。

查看 DICOM 对象的存储类别

您可以在研究、系列或实例级别查看 DICOM 对象的存储类别。

以下部分介绍了如何查看 DICOM 实例的存储类别。

获取 DICOM 对象的存储类别信息

以下示例展示了如何使用 instances.getStorageInfo 方法查看 DICOM 对象的存储类别。

REST

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

  • 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/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

执行以下命令:

$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

API Explorer

打开方法参考页面。APIs Explorer 面板会在页面右侧打开。您可以与此工具进行交互以发送请求。 填写所有必填字段,然后点击执行

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

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

您可以将 DICOM 元数据导出到 BigQuery,然后运行查询以查看导出的 DICOM 对象的存储类。

以下查询展示了如何从 BigQuery 数据集中检索最多 1,000 个 DICOM 实例的研究实例 UID、系列实例 UID、实例 UID、存储空间大小和存储类别:

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

替换以下内容:

  • PROJECT_ID:您的 Google Cloud 项目的 ID
  • BIGQUERY_DATASET:包含导出的 DICOM 元数据的表的父级 BigQuery 数据集
  • BIGQUERY_TABLE:包含导出的 DICOM 元数据的 BigQuery 表