本页介绍了如何使用不同的存储类别在 Cloud Healthcare API 中管理 DICOM 数据。选择合适的存储类别有助于您降低费用并满足数据保留方面的监管要求。
本页面适用于已熟悉 DICOM 和 Cloud Healthcare API 的技术用户。
概览
DICOM 存储类别的运作方式与 Cloud Storage 存储类别类似,可根据您访问数据的频率和需要存储数据的时长提供不同的费用和性能特性。如需详细了解每种存储类别,请参阅类别说明。
根据您访问对象的频率或对象需要保留多长时间,您可能需要更改 DICOM 对象的存储类别。例如:
- 您可以将不常访问的 DICOM 图片从标准存储空间移至 Nearline 存储空间或 Coldline 存储空间,以节省结算费用。
- 您可以将出于法律原因需要保留的患者数据移至 Archive 存储空间,这是费用最低且最持久的存储类别。
可用的 DICOM 存储类别
您可以为 DICOM 对象使用以下存储类别:
- 标准(默认)
- Nearline
- Coldline
- 归档
存储类别价格
每种存储类别都有各自的定价结构。更改 DICOM 对象的存储类别可能会影响您的结算费用。如需了解详情,请参阅以下内容:
更改单个 DICOM 对象的存储类别
您可以在研究、系列或实例级别更改 DICOM 对象的存储类别。
以下示例展示了如何更改 DICOM 实例的存储类别。
执行此任务所需的权限
如需执行此任务,您必须已获得以下权限或以下 Identity and Access Management (IAM) 角色:
权限
healthcare.dicomStores.dicomWebWrite
角色
您可以要求管理员为您授予这些 Identity and Access Management 角色。如需了解如何授予角色,请参阅管理访问权限或控制对 Cloud Healthcare API 资源的访问。您也可以通过自定义角色或其他预定义角色来获取所需的权限。
使用
projects.locations.datasets.dicomStores.studies.series.instances.setBlobStorageSettings
方法更改 DICOM 实例的存储类别。在使用任何请求数据之前,请先进行以下替换:
:您的 Google Cloud 项目的 IDPROJECT_ID
:数据集位置LOCATION
:DICOM 存储区的父级数据集DATASET_ID
:DICOM 存储区 IDDICOM_STORE_ID
:研究实例唯一标识符STUDY_INSTANCE_UID
:系列实例唯一标识符SERIES_INSTANCE_UID
:实例唯一标识符INSTANCE_UID
:DICOM 实例的存储类别。STORAGE_CLASS STANDARD
、NEARLINE
、COLDLINE
或ARCHIVE
之一。
请求 JSON 正文:
{ "blobStorageSettings": { "blobStorageClass": "
STORAGE_CLASS " } }如需发送请求,请选择以下方式之一:
将请求正文保存在名为
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"将请求正文保存在名为
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复制请求正文并打开方法参考页面。APIs Explorer 面板会在页面右侧打开。您可以与此工具进行交互以发送请求。 将请求正文粘贴到此工具中,填写任何其他必填字段,然后点击执行。
OPERATION_ID
的值。下一步中您需要用到该值。响应
{ "name": "projects/
PROJECT_ID /locations/LOCATION /datasets/DATASET_ID /operations/OPERATION_ID " }使用
projects.locations.datasets.operations.get
方法获取长时间运行的操作的状态。在使用任何请求数据之前,请先进行以下替换:
:您的 Google Cloud 项目的 IDPROJECT_ID
:数据集位置LOCATION
:DICOM 存储区的父级数据集DATASET_ID
:从长时间运行的操作返回的 IDOPERATION_ID
如需发送请求,请选择以下方式之一:
执行以下命令:
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 "执行以下命令:
$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 即已完成。响应
{ "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.storageinfo.StorageInfoService.SetBlobStorageSettings", "createTime": "CREATE_TIME ", "endTime": "END_TIME ", "logsUrl": https://console.cloud.google.com/logs/query/CLOUD_LOGGING_URL , "counter": { "success": "SUCCESS_COUNT " } }, "done": true, "response": { "@type": "type.googleapis.com/google.protobuf.Empty" } }
使用过滤器文件更改多个对象的存储类别
以下部分介绍了如何创建和使用过滤条件文件,以根据过滤条件更改 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.456
和567.890
- 在研究
1.888.999.222
和系列123.456
中,三个实例的 ID 分别为111
、222
和333
使用 BigQuery 创建过滤条件文件
如需使用 BigQuery 创建过滤条件文件,您必须先将 DICOM 存储区的元数据导出到 BigQuery。导出的元数据会显示 DICOM 存储区中 DICOM 数据的研究、系列和实例 UID。
导出元数据后,请完成以下步骤:
运行查询以返回您要添加到过滤条件文件中的研究、系列和实例的 UID。
例如,以下查询展示了如何串联研究、系列和实例 UID 以符合过滤条件文件格式要求:
SELECT CONCAT ('/studies/', StudyInstanceUID, '/series/', SeriesInstanceUID, '/instances/', SOPInstanceUID) FROM [
PROJECT_ID :BIGQUERY_DATASET .BIGQUERY_TABLE ]可选:如果查询返回的大型结果集超出了最大响应大小,请在 BigQuery 中将查询结果保存到新的目标表。
将查询结果保存到文件,然后将其导出到 Cloud Storage。如果您在第 2 步中将查询结果保存到了新的目标表,请参阅导出表数据,将表的内容导出到 Cloud Storage。
根据需要修改导出的文件,并将其添加到请求中,以更改多个 DICOM 对象的存储类。
手动创建过滤条件文件
如需手动创建过滤条件文件,请执行以下操作:
- 创建一个过滤条件文件,其中包含要过滤的 DICOM 对象。
- 将过滤条件文件上传到 Cloud Storage。如需查看相关说明,请参阅从文件系统上传对象。
使用过滤器文件
以下示例展示了如何在更改 DICOM 对象的存储类别时应用过滤条件文件。
执行此任务所需的权限
如需执行此任务,您必须已获得以下权限或以下 Identity and Access Management (IAM) 角色:
权限
healthcare.dicomStores.dicomWebWrite
角色
向 Cloud Healthcare Service Agent 服务账号授予 Storage Object Viewer (storage.objectViewer
) 角色。
您可以要求管理员为您授予这些 Identity and Access Management 角色。如需了解如何授予角色,请参阅管理访问权限或控制对 Cloud Healthcare API 资源的访问。您也可以通过自定义角色或其他预定义角色来获取所需的权限。
使用
projects.locations.datasets.dicomStores.studies.series.instances.setBlobStorageSettings
方法更改过滤条件文件中 DICOM 实例的存储类。在使用任何请求数据之前,请先进行以下替换:
:您的 Google Cloud 项目的 IDPROJECT_ID
:数据集位置LOCATION
:DICOM 存储区的父级数据集DATASET_ID
:DICOM 存储区 IDDICOM_STORE_ID
:DICOM 对象的存储类。STORAGE_CLASS STANDARD
、NEARLINE
、COLDLINE
或ARCHIVE
之一。
:包含过滤条件文件的 Cloud Storage 存储分区的名称CLOUD_STORAGE_BUCKET
:Cloud Storage 存储分区中过滤条件文件的完全限定 URIFILTER_FILE_PATH
请求 JSON 正文:
{ "blobStorageSettings": { "blobStorageClass": "
STORAGE_CLASS " }, "filterConfig": { "resourcePathsGcsUri": "gs://CLOUD_STORAGE_BUCKET /FILTER_FILE_PATH " } }如需发送请求,请选择以下方式之一:
将请求正文保存在名为
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"将请求正文保存在名为
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 ContentOPERATION_ID
的值。下一步中您需要用到该值。响应
{ "name": "projects/
PROJECT_ID /locations/LOCATION /datasets/DATASET_ID /operations/OPERATION_ID " }使用
projects.locations.datasets.operations.get
方法获取长时间运行的操作的状态。在使用任何请求数据之前,请先进行以下替换:
:您的 Google Cloud 项目的 IDPROJECT_ID
:数据集位置LOCATION
:DICOM 存储区的父级数据集DATASET_ID
:从长时间运行的操作返回的 IDOPERATION_ID
如需发送请求,请选择以下方式之一:
执行以下命令:
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 "执行以下命令:
$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 即已完成。响应
{ "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.storageinfo.StorageInfoService.SetBlobStorageSettings", "createTime": "CREATE_TIME ", "endTime": "END_TIME ", "logsUrl": https://console.cloud.google.com/logs/query/CLOUD_LOGGING_URL , "counter": { "success": "SUCCESS_COUNT " } }, "done": true, "response": { "@type": "type.googleapis.com/google.protobuf.Empty" } }
查看 DICOM 对象的存储类别
您可以在研究、系列或实例级别查看 DICOM 对象的存储类别。
以下部分介绍了如何查看 DICOM 实例的存储类别。
获取 DICOM 对象的存储类别信息
以下示例展示了如何使用 instances.getStorageInfo
方法查看 DICOM 对象的存储类别。
执行此任务所需的权限
如需执行此任务,您必须已获得以下权限或以下 Identity and Access Management (IAM) 角色:
权限
healthcare.dicomStores.dicomWebRead
角色
您可以要求管理员为您授予这些 Identity and Access Management 角色。如需了解如何授予角色,请参阅管理访问权限或控制对 Cloud Healthcare API 资源的访问。您也可以通过自定义角色或其他预定义角色来获取所需的权限。
在使用任何请求数据之前,请先进行以下替换:
:您的 Google Cloud 项目的 IDPROJECT_ID
:数据集位置LOCATION
:DICOM 存储区的父级数据集DATASET_ID
:DICOM 存储区 IDDICOM_STORE_ID
:研究实例唯一标识符STUDY_INSTANCE_UID
:系列实例唯一标识符SERIES_INSTANCE_UID
:实例唯一标识符INSTANCE_UID
如需发送请求,请选择以下方式之一:
执行以下命令:
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"
执行以下命令:
$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 面板会在页面右侧打开。您可以与此工具进行交互以发送请求。 填写所有必填字段,然后点击执行。
您应该收到类似以下内容的 JSON 响应:
响应
{ "name": "projects/PROJECT_ID /locations/LOCATION /datasets/DATASET_ID /dicomStores/DICOM_STORE_ID " }
在 BigQuery 中查询导出的 DICOM 元数据
您可以将 DICOM 元数据导出到 BigQuery,然后运行查询以查看导出的 DICOM 对象的存储类。
以下查询展示了如何从 BigQuery 数据集中检索最多 1,000 个 DICOM 实例的研究实例 UID、系列实例 UID、实例 UID、存储空间大小和存储类别:
SELECT StudyInstanceUID, SeriesInstanceUID, SOPInstanceUID, BlobStorageSize, StorageClass FROMPROJECT_ID :BIGQUERY_DATASET .BIGQUERY_TABLE LIMIT 1000
替换以下内容:
PROJECT_ID
:您的 Google Cloud 项目的 IDBIGQUERY_DATASET
:包含导出的 DICOM 元数据的表的父级 BigQuery 数据集BIGQUERY_TABLE
:包含导出的 DICOM 元数据的 BigQuery 表