本页面介绍如何将 DICOM 元数据导出到 BigQuery 进行探索和分析。如需了解在导出 DICOM 元数据时创建的 BigQuery 架构,请参阅了解 BigQuery DICOM 架构。
设置 BigQuery 权限
在将 DICOM 元数据导出到 BigQuery 表之前,您必须向 Cloud Healthcare Service Agent 服务帐号授予额外的权限。如需了解详情,请参阅 DICOM 存储区 BigQuery 权限。
设置 BigQuery 目标位置
设置 BigQuery 目标时,请使用完全限定的 URI,如下所示:bq://PROJECT_ID.BIGQUERY_DATASET_ID.BIGQUERY_TABLE_ID
- 目标表是否已存在
- 设置了
force
字段(使用 API)还是--overwrite-table
标志(使用 Google Cloud CLI) - 您是否已设置
writeDisposition
枚举的值。如果使用writeDisposition
枚举,请勿设置force
字段。
- 如果目标表已存在且
force
设置为true
或指定了--overwrite-table
标志,则导出操作将覆盖现有表。 - 如果目标表已存在且
force
设置为false
或未指定--overwrite-table
标志,则会发生错误。 - 如果目标表尚不存在,则无论您指定
force
字段还是--overwrite-table
标志,都会创建新表。 - 如需了解
writeDisposition
描述的行为,请参阅其文档。使用force
时,writeDisposition
枚举执行类似于选项的行为,但存在以下例外情况:如果目标表已存在且为空,则导出操作会完成,而不是返回错误。
导出 DICOM 元数据
以下示例展示了如何将 DICOM 元数据导出到 BigQuery 表。在这些示例中,DICOM 存储区和 BigQuery 表位于同一项目中。如需将 DICOM 元数据导出到其他项目中的 BigQuery 表,请参阅将 DICOM 元数据导出到其他项目。
控制台
如需将 DICOM 元数据导出到 BigQuery 表,请完成以下步骤:
在 Google Cloud 控制台中,进入数据集页面。
点击包含要导出的元数据的 DICOM 存储区的数据集。
在 DICOM 存储区所在的行中,打开操作列表,然后选择导出。
在显示的导出 DICOM 存储区页面上,选择 BigQuery 表。
在项目字段中,点击浏览,然后选择您的项目。
在数据集列表中,选择要导出 DICOM 元数据的 BigQuery 数据集。
在表字段中,输入新的表名称。BigQuery 会检查每个选择,以确保目标表有效。
在目标表的写入处置方式部分,选择以下选项之一。这些选项对应于
WriteDisposition
枚举。- 仅在目标表为空时才导出数据:相当于
WRITE_EMPTY
- 将数据附加到目标表:相当于
WRITE_APPEND
- 在写入实例之前清空目标表中的所有现有数据:相当于
WRITE_TRUNCATE
。
- 仅在目标表为空时才导出数据:相当于
点击导出以将 DICOM 元数据导出到 BigQuery 表。
- 要跟踪操作的状态,请点击操作标签页。操作完成后,系统会显示以下指示:
- 长时间运行的操作状态部分下方的确定标题下会显示一个绿色的对勾标记。
- 概览部分在操作 ID 的同一行中显示一个绿色对勾标记和一个确定指示符。
gcloud
如需将 DICOM 元数据导出到 BigQuery 表,请运行 gcloud healthcare dicom-stores export bq
命令。
导出 DICOM 元数据。
在使用下面的命令数据之前,请先进行以下替换:
- PROJECT_ID:您的 Google Cloud 项目的 ID
- LOCATION:数据集位置
- DATASET_ID: DICOM 存储区的父数据集
- DICOM_STORE_ID:DICOM 存储区 ID
- BIGQUERY_DATASET_ID:您要从中导出 DICOM 元数据的现有 BigQuery 数据集的名称
- BIGQUERY_TABLE_ID:BigQuery 数据集中新表或现有表的名称。如果导出操作是创建新表,请参阅表命名,了解表名称要求。
- WRITE_DISPOSITION:
WriteDisposition
枚举的值。请使用以下某个值:write-empty
:仅在 BigQuery 表为空时导出数据。write-truncate
:先清空 BigQuery 表中的所有现有数据,然后再写入 DICOM 实例。write-append
:将数据附加到 BigQuery 表。
执行以下命令:
Linux、macOS 或 Cloud Shell
gcloud healthcare dicom-stores export bq DICOM_STORE_ID \ --location=LOCATION \ --dataset=DATASET_ID \ --bq-table=bq://PROJECT_ID.BIGQUERY_DATASET_ID.BIGQUERY_TABLE_ID \ --write-disposition=WRITE_DISPOSITION
Windows (PowerShell)
gcloud healthcare dicom-stores export bq DICOM_STORE_ID ` --location=LOCATION ` --dataset=DATASET_ID ` --bq-table=bq://PROJECT_ID.BIGQUERY_DATASET_ID.BIGQUERY_TABLE_ID ` --write-disposition=WRITE_DISPOSITION
Windows (cmd.exe)
gcloud healthcare dicom-stores export bq DICOM_STORE_ID ^ --location=LOCATION ^ --dataset=DATASET_ID ^ --bq-table=bq://PROJECT_ID.BIGQUERY_DATASET_ID.BIGQUERY_TABLE_ID ^ --write-disposition=WRITE_DISPOSITION
name
字段中输出操作的名称。请注意OPERATION_ID
的值。下一步中需要用到此值。响应
Request issued for: [DICOM_STORE_ID] Waiting for operation [projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID] to complete...⠏ name: projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID
如需查看操作的更多详细信息,请运行
gcloud healthcare operations describe
命令并提供响应中的 OPERATION_ID:在使用下面的命令数据之前,请先进行以下替换:
- PROJECT_ID:您的 Google Cloud 项目的 ID
- DATASET_ID:数据集 ID
- LOCATION:数据集位置
- OPERATION_ID:从长时间运行的操作返回的 ID
执行以下命令:
Linux、macOS 或 Cloud Shell
gcloud healthcare operations describe OPERATION_ID \ --project=PROJECT_ID \ --dataset=DATASET_ID \ --location=LOCATION
Windows (PowerShell)
gcloud healthcare operations describe OPERATION_ID ` --project=PROJECT_ID ` --dataset=DATASET_ID ` --location=LOCATION
Windows (cmd.exe)
gcloud healthcare operations describe OPERATION_ID ^ --project=PROJECT_ID ^ --dataset=DATASET_ID ^ --location=LOCATION
您应该会收到类似如下所示的响应:
响应
done: true // If there were any errors, an `error` field displays instead of a `response` field. // See Troubleshooting long-running operations for a list of response codes. error: ERROR code: ERROR_CODE message: DESCRIPTION metadata: '@type': 'type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata' apiMethodName: 'google.cloud.healthcare.v1.dicom.DicomService.ExportDicomData_bq' counter: success: 'SUCCESS_COUNT' // If there were any failures, they display in the `failure` field. failure: 'FAILURE_COUNT' createTime: 'YYYY-MM-DDTHH:MM:SS+ZZ:ZZ' endTime: 'YYYY-MM-DDTHH:MM:SS+ZZ:ZZ' logsUrl: https://console.cloud.google.com/CLOUD_LOGGING_URL name: projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID // The `response` field only displays if there were no errors. response: '@type': 'type.googleapis.com/google.protobuf.Empty'
REST
如需将 DICOM 元数据导出到 BigQuery 表,请使用 projects.locations.datasets.dicomStores.export
方法。
导出 DICOM 元数据。
在使用任何请求数据之前,请先进行以下替换:
- PROJECT_ID:您的 Google Cloud 项目的 ID
- LOCATION:数据集位置
- DATASET_ID: DICOM 存储区的父数据集
- DICOM_STORE_ID:DICOM 存储区 ID
- BIGQUERY_DATASET_ID:您要从中导出 DICOM 元数据的现有 BigQuery 数据集的名称
- BIGQUERY_TABLE_ID:BigQuery 数据集中新表或现有表的名称。如果导出操作是创建新表,请参阅表命名,了解表名称要求。
- WRITE_DISPOSITION:
WriteDisposition
枚举的值。请使用以下某个值:WRITE_EMPTY
:仅在 BigQuery 表为空时导出数据。WRITE_TRUNCATE
:先清空 BigQuery 表中的所有现有数据,然后再写入 DICOM 实例。WRITE_APPEND
:将数据附加到 BigQuery 表。
请求 JSON 正文:
{ "bigqueryDestination": { "tableUri": "bq://PROJECT_ID.BIGQUERY_DATASET_ID.BIGQUERY_TABLE_ID", "writeDisposition": "WRITE_DISPOSITION" } }
如需发送请求,请选择以下方式之一:
curl
将请求正文保存在名为
request.json
的文件中。在终端中运行以下命令,在当前目录中创建或覆盖此文件:cat > request.json << 'EOF' { "bigqueryDestination": { "tableUri": "bq://PROJECT_ID.BIGQUERY_DATASET_ID.BIGQUERY_TABLE_ID", "writeDisposition": "WRITE_DISPOSITION" } } 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:export"PowerShell
将请求正文保存在名为
request.json
的文件中。在终端中运行以下命令,在当前目录中创建或覆盖此文件:@' { "bigqueryDestination": { "tableUri": "bq://PROJECT_ID.BIGQUERY_DATASET_ID.BIGQUERY_TABLE_ID", "writeDisposition": "WRITE_DISPOSITION" } } '@ | 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:export" | Select-Object -Expand ContentAPI Explorer
复制请求正文并打开方法参考页面。API Explorer 面板会在页面右侧打开。您可以与此工具进行交互以发送请求。将请求正文粘贴到此工具中,填写任何其他必填字段,然后点击执行。
OPERATION_ID
的值。在下一步中,您需要使用此值。使用
projects.locations.datasets.operations.get
方法可获取长时间运行的操作的状态。在使用任何请求数据之前,请先进行以下替换:
- PROJECT_ID:您的 Google Cloud 项目的 ID
- DATASET_ID:数据集 ID
- LOCATION:数据集位置
- 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 ContentAPI Explorer
打开方法参考页面。API Explorer 面板会在页面右侧打开。您可以与此工具进行交互以发送请求。填写所有必填字段,然后点击执行。
"done": true
,则表示长时间运行的操作已完成。
将 DICOM 元数据导出到其他项目
如需将 DICOM 元数据从一个项目中的 DICOM 存储区导出到另一个项目中的 BigQuery 数据集,请先参阅将 DICOM 元数据导出到其他项目权限,了解如何在目标项目中设置 IAM 权限。
gcloud
如需将 DICOM 元数据从一个项目中的 DICOM 存储区导出到另一个项目中的 BigQuery 表,请使用 gcloud healthcare dicom-stores export bq
命令。
导出 DICOM 元数据。
在使用下面的命令数据之前,请先进行以下替换:
- SOURCE_PROJECT_ID:来源 Google Cloud 项目的 ID
- SOURCE_LOCATION:源数据集位置
- SOURCE_DATASET_ID:源 DICOM 存储区的父数据集
- SOURCE_DICOM_STORE_ID:源 DICOM 存储区 ID
- DESTINATION_PROJECT_ID:不同项目的 ID
- DESTINATION_BIGQUERY_DATASET_ID:您要导出 DICOM 元数据的目标项目中的现有 BigQuery 数据集的名称
- DESTINATION_BIGQUERY_TABLE_ID:BigQuery 数据集中新表或现有表的名称。如果导出操作是创建新表,请参阅表命名,了解表名称要求。
- WRITE_DISPOSITION:
WriteDisposition
枚举的值。请使用以下某个值:write-empty
:仅在 BigQuery 表为空时导出数据。write-truncate
:先清空 BigQuery 表中的所有现有数据,然后再写入 DICOM 实例。write-append
:将数据附加到 BigQuery 表。
执行以下命令:
Linux、macOS 或 Cloud Shell
gcloud healthcare dicom-stores export bq SOURCE_DICOM_STORE_ID \ --project=SOURCE_PROJECT_ID \ --location=SOURCE_LOCATION \ --dataset=SOURCE_DATASET_ID \ --bq-table=bq://DESTINATION_PROJECT_ID.DESTINATION_BIGQUERY_DATASET_ID.DESTINATION_BIGQUERY_TABLE_ID \ --write-disposition=WRITE_DISPOSITION
Windows (PowerShell)
gcloud healthcare dicom-stores export bq SOURCE_DICOM_STORE_ID ` --project=SOURCE_PROJECT_ID ` --location=SOURCE_LOCATION ` --dataset=SOURCE_DATASET_ID ` --bq-table=bq://DESTINATION_PROJECT_ID.DESTINATION_BIGQUERY_DATASET_ID.DESTINATION_BIGQUERY_TABLE_ID ` --write-disposition=WRITE_DISPOSITION
Windows (cmd.exe)
gcloud healthcare dicom-stores export bq SOURCE_DICOM_STORE_ID ^ --project=SOURCE_PROJECT_ID ^ --location=SOURCE_LOCATION ^ --dataset=SOURCE_DATASET_ID ^ --bq-table=bq://DESTINATION_PROJECT_ID.DESTINATION_BIGQUERY_DATASET_ID.DESTINATION_BIGQUERY_TABLE_ID ^ --write-disposition=WRITE_DISPOSITION
name
字段中输出操作的名称。请注意OPERATION_ID
的值。下一步中需要用到此值。响应
Request issued for: [SOURCE_DICOM_STORE_ID] Waiting for operation [projects/SOURCE_PROJECT_ID/locations/SOURCE_LOCATION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID] to complete...⠏ name: projects/SOURCE_PROJECT_ID/locations/SOURCE_LOCATION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID
如需查看操作的更多详细信息,请运行
gcloud healthcare operations describe
命令并提供响应中的 OPERATION_ID:在使用下面的命令数据之前,请先进行以下替换:
- SOURCE_PROJECT_ID:来源 Google Cloud 项目的 ID
- SOURCE_LOCATION:源数据集位置
- SOURCE_DATASET_ID:源数据集 ID
- OPERATION_ID:从长时间运行的操作返回的 ID
执行以下命令:
Linux、macOS 或 Cloud Shell
gcloud healthcare operations describe OPERATION_ID \ --project=SOURCE_PROJECT_ID \ --dataset=SOURCE_DATASET_ID \ --location=SOURCE_LOCATION
Windows (PowerShell)
gcloud healthcare operations describe OPERATION_ID ` --project=SOURCE_PROJECT_ID ` --dataset=SOURCE_DATASET_ID ` --location=SOURCE_LOCATION
Windows (cmd.exe)
gcloud healthcare operations describe OPERATION_ID ^ --project=SOURCE_PROJECT_ID ^ --dataset=SOURCE_DATASET_ID ^ --location=SOURCE_LOCATION
您应该会收到类似如下所示的响应:
响应
done: true // If there were any errors, an `error` field displays instead of a `response` field. // See Troubleshooting long-running operations for a list of response codes. error: ERROR code: ERROR_CODE message: DESCRIPTION metadata: '@type': 'type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata' apiMethodName: 'google.cloud.healthcare.v1.dicom.DicomService.ExportDicomData_bq' counter: success: 'SUCCESS_COUNT' // If there were any failures, they display in the `failure` field. failure: 'FAILURE_COUNT' createTime: 'YYYY-MM-DDTHH:MM:SS+ZZ:ZZ' endTime: 'YYYY-MM-DDTHH:MM:SS+ZZ:ZZ' logsUrl: https://console.cloud.google.com/CLOUD_LOGGING_URL name: projects/SOURCE_PROJECT_ID/locations/SOURCE_LOCATION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID // The `response` field only displays if there were no errors. response: '@type': 'type.googleapis.com/google.protobuf.Empty'
REST
如需将 DICOM 元数据从某个项目中的 DICOM 存储区导出到另一个项目中的 BigQuery 表,请使用 projects.locations.datasets.dicomStores.export
方法。
导出 DICOM 元数据。
在使用任何请求数据之前,请先进行以下替换:
- SOURCE_PROJECT_ID:来源 Google Cloud 项目的 ID
- SOURCE_LOCATION:源数据集位置
- SOURCE_DATASET_ID:源 DICOM 存储区的父数据集
- SOURCE_DICOM_STORE_ID:源 DICOM 存储区 ID
- DESTINATION_PROJECT_ID:不同项目的 ID
- DESTINATION_BIGQUERY_DATASET_ID:您要导出 DICOM 元数据的目标项目中的现有 BigQuery 数据集的名称
- DESTINATION_BIGQUERY_TABLE_ID:BigQuery 数据集中新表或现有表的名称。如果导出操作是创建新表,请参阅表命名,了解表名称要求。
- WRITE_DISPOSITION:
WriteDisposition
枚举的值。请使用以下某个值:WRITE_EMPTY
:仅在 BigQuery 表为空时导出数据。WRITE_TRUNCATE
:先清空 BigQuery 表中的所有现有数据,然后再写入 DICOM 实例。WRITE_APPEND
:将数据附加到 BigQuery 表。
请求 JSON 正文:
{ "bigqueryDestination": { "tableUri": "bq://DESTINATION_PROJECT_ID.DESTINATION_BIGQUERY_DATASET_ID.DESTINATION_BIGQUERY_TABLE_ID", "writeDisposition": "WRITE_DISPOSITION" } }
如需发送请求,请选择以下方式之一:
curl
将请求正文保存在名为
request.json
的文件中。在终端中运行以下命令,在当前目录中创建或覆盖此文件:cat > request.json << 'EOF' { "bigqueryDestination": { "tableUri": "bq://DESTINATION_PROJECT_ID.DESTINATION_BIGQUERY_DATASET_ID.DESTINATION_BIGQUERY_TABLE_ID", "writeDisposition": "WRITE_DISPOSITION" } } 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/SOURCE_PROJECT_ID/locations/SOURCE_LOCATION/datasets/SOURCE_DATASET_ID/dicomStores/SOURCE_DICOM_STORE_ID:export"PowerShell
将请求正文保存在名为
request.json
的文件中。在终端中运行以下命令,在当前目录中创建或覆盖此文件:@' { "bigqueryDestination": { "tableUri": "bq://DESTINATION_PROJECT_ID.DESTINATION_BIGQUERY_DATASET_ID.DESTINATION_BIGQUERY_TABLE_ID", "writeDisposition": "WRITE_DISPOSITION" } } '@ | 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/SOURCE_PROJECT_ID/locations/SOURCE_LOCATION/datasets/SOURCE_DATASET_ID/dicomStores/SOURCE_DICOM_STORE_ID:export" | Select-Object -Expand ContentAPI Explorer
复制请求正文并打开方法参考页面。API Explorer 面板会在页面右侧打开。您可以与此工具进行交互以发送请求。将请求正文粘贴到此工具中,填写任何其他必填字段,然后点击执行。
OPERATION_ID
的值。在下一步中,您需要使用此值。使用
projects.locations.datasets.operations.get
方法可获取长时间运行的操作的状态。在使用任何请求数据之前,请先进行以下替换:
- SOURCE_PROJECT_ID:来源 Google Cloud 项目的 ID
- SOURCE_LOCATION:源数据集位置
- SOURCE_DATASET_ID:源数据集 ID
- OPERATION_ID:从长时间运行的操作返回的 ID
如需发送请求,请选择以下方式之一:
curl
执行以下命令:
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1/projects/SOURCE_PROJECT_ID/locations/SOURCE_LOCATION/datasets/SOURCE_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/SOURCE_PROJECT_ID/locations/SOURCE_LOCATION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand ContentAPI Explorer
打开方法参考页面。API Explorer 面板会在页面右侧打开。您可以与此工具进行交互以发送请求。填写所有必填字段,然后点击执行。
"done": true
,则表示长时间运行的操作已完成。
使用过滤条件导出 DICOM 元数据
默认情况下,将 DICOM 数据导出到 Cloud Storage 时,系统会导出指定 DICOM 存储区中的所有 DICOM 文件。同样,将 DICOM 元数据导出到 BigQuery 时,系统会导出指定 DICOM 存储区中所有 DICOM 数据的元数据。
您可以使用过滤条件导出部分 DICOM 数据或元数据。您可以在过滤条件文件中定义过滤条件。
配置过滤条件文件
过滤条件文件指定要导出到 Cloud Storage 或 BigQuery 的 DICOM 文件。您可以在以下级别配置过滤条件文件:
- 在研究级别
- 在系列级别
- 在实例级别
过滤条件文件由多行组成,其中每一行定义要导出的研究、系列或实例。每行都使用 /studies/STUDY_UID[/series/SERIES_UID[/instances/INSTANCE_UID]]
格式。
如果在传入过滤条件文件时未在过滤条件文件中指定研究、系列或实例,则系统将不会导出该研究、系列或实例。
只需要提供路径的 /studies/STUDY_UID
部分。您可以通过指定 /studies/STUDY_UID
导出整个研究,也可以通过指定 /studies/STUDY_UID/series/SERIES_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
使用 BigQuery 创建过滤条件文件
如需创建过滤条件文件,您通常需要先将 DICOM 存储区中的元数据导出到 BigQuery。这样,您就可以使用 BigQuery 来查看 DICOM 存储区中 DICOM 数据的研究、系列和实例 UID。然后,您可以完成以下步骤:
-
查询您感兴趣的研究、系列和实例 UID。例如,将 DICOM 元数据导出到 BigQuery 后,您可以运行以下查询,将研究、系列和实例 UID 串接为符合过滤条件文件要求的格式:
SELECT CONCAT ('/studies/', StudyInstanceUID, '/series/', SeriesInstanceUID, '/instances/', SOPInstanceUID) FROM [PROJECT_ID:BIGQUERY_DATASET.BIGQUERY_TABLE]
- 如果查询返回大型结果集,您可以通过将查询结果保存到 BigQuery 中的目标表将新表具体化。
- 如果您已将查询结果保存到目标表,则可以将目标表的内容保存到文件,并将文件导出到 Cloud Storage。如需了解如何执行此操作,请参阅导出表数据。导出的文件就是您的过滤条件文件。在导出操作中指定过滤条件时,您将使用过滤条件文件在 Cloud Storage 中的位置。
手动创建过滤条件文件
您可以创建包含自定义内容的过滤条件文件,然后将其上传到 Cloud Storage 存储桶。在导出操作中指定过滤条件时,您将使用过滤条件文件在 Cloud Storage 中的位置。以下示例展示了如何使用gsutil cp
命令将过滤条件文件上传到 Cloud Storage 存储桶:
gsutil cp FILTER_FILE gs://BUCKET
传入过滤条件文件
创建过滤条件文件后,您可以调用 DICOM 导出操作,并使用 REST API 传入过滤条件文件。以下示例展示了如何使用过滤条件导出 DICOM 元数据。
gcloud
如需使用过滤器将 DICOM 元数据导出到 BigQuery 表,请运行 gcloud beta healthcare dicom-stores export bq
命令。
导出 DICOM 元数据。
在使用下面的命令数据之前,请先进行以下替换:
- PROJECT_ID:您的 Google Cloud 项目的 ID
- LOCATION:数据集位置
- DATASET_ID: DICOM 存储区的父数据集
- DICOM_STORE_ID:DICOM 存储区 ID
- BIGQUERY_DATASET_ID:您要从中导出 DICOM 元数据的现有 BigQuery 数据集的名称
- BIGQUERY_TABLE_ID:BigQuery 数据集中新表或现有表的名称。如果导出操作是创建新表,请参阅表命名,了解表名称要求。
- BUCKET:包含过滤器文件的 Cloud Storage 存储桶的名称。如果过滤器文件位于目录中,请在路径中包括该目录。
- FILTER_FILE:过滤器文件在 Cloud Storage 存储桶中的位置和名称
- WRITE_DISPOSITION:
WriteDisposition
枚举的值。请使用以下某个值:write-empty
:仅在 BigQuery 表为空时导出数据。write-truncate
:先清空 BigQuery 表中的所有现有数据,然后再写入 DICOM 实例。write-append
:将数据附加到 BigQuery 表。
执行以下命令:
Linux、macOS 或 Cloud Shell
gcloud beta healthcare dicom-stores export bq DICOM_STORE_ID \ --location=LOCATION \ --dataset=DATASET_ID \ --bq-table=bq://PROJECT_ID.BIGQUERY_DATASET_ID.BIGQUERY_TABLE_ID \ --filter-config-gcs-uri=gs://BUCKET/FILTER_FILE \ --write-disposition=WRITE_DISPOSITION
Windows (PowerShell)
gcloud beta healthcare dicom-stores export bq DICOM_STORE_ID ` --location=LOCATION ` --dataset=DATASET_ID ` --bq-table=bq://PROJECT_ID.BIGQUERY_DATASET_ID.BIGQUERY_TABLE_ID ` --filter-config-gcs-uri=gs://BUCKET/FILTER_FILE ` --write-disposition=WRITE_DISPOSITION
Windows (cmd.exe)
gcloud beta healthcare dicom-stores export bq DICOM_STORE_ID ^ --location=LOCATION ^ --dataset=DATASET_ID ^ --bq-table=bq://PROJECT_ID.BIGQUERY_DATASET_ID.BIGQUERY_TABLE_ID ^ --filter-config-gcs-uri=gs://BUCKET/FILTER_FILE ^ --write-disposition=WRITE_DISPOSITION
name
字段中输出操作的名称。请注意OPERATION_ID
的值。下一步中需要用到此值。响应
Request issued for: [DICOM_STORE_ID] Waiting for operation [projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID] to complete...⠏ name: projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID
如需查看操作的更多详细信息,请运行
gcloud healthcare operations describe
命令并提供响应中的 OPERATION_ID:在使用下面的命令数据之前,请先进行以下替换:
- PROJECT_ID:您的 Google Cloud 项目的 ID
- DATASET_ID:数据集 ID
- LOCATION:数据集位置
- OPERATION_ID:从长时间运行的操作返回的 ID
执行以下命令:
Linux、macOS 或 Cloud Shell
gcloud healthcare operations describe OPERATION_ID \ --project=PROJECT_ID \ --dataset=DATASET_ID \ --location=LOCATION
Windows (PowerShell)
gcloud healthcare operations describe OPERATION_ID ` --project=PROJECT_ID ` --dataset=DATASET_ID ` --location=LOCATION
Windows (cmd.exe)
gcloud healthcare operations describe OPERATION_ID ^ --project=PROJECT_ID ^ --dataset=DATASET_ID ^ --location=LOCATION
您应该会收到类似如下所示的响应:
响应
done: true // If there were any errors, an `error` field displays instead of a `response` field. // See Troubleshooting long-running operations for a list of response codes. error: ERROR code: ERROR_CODE message: DESCRIPTION metadata: '@type': 'type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata' apiMethodName: 'google.cloud.healthcare.v1.dicom.DicomService.ExportDicomData_bq' counter: success: 'SUCCESS_COUNT' // If there were any failures, they display in the `failure` field. failure: 'FAILURE_COUNT' createTime: 'YYYY-MM-DDTHH:MM:SS+ZZ:ZZ' endTime: 'YYYY-MM-DDTHH:MM:SS+ZZ:ZZ' logsUrl: https://console.cloud.google.com/CLOUD_LOGGING_URL name: projects/SOURCE_PROJECT_ID/locations/SOURCE_LOCATION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID // The `response` field only displays if there were no errors. response: '@type': 'type.googleapis.com/google.protobuf.Empty'
REST
如需使用过滤器将 DICOM 元数据导出到 BigQuery 表,请使用 projects.locations.datasets.dicomStores.export
方法。
导出 DICOM 元数据。
在使用任何请求数据之前,请先进行以下替换:
- PROJECT_ID:您的 Google Cloud 项目的 ID
- LOCATION:数据集位置
- DATASET_ID: DICOM 存储区的父数据集
- DICOM_STORE_ID:DICOM 存储区 ID
- BIGQUERY_DATASET_ID:您要从中导出 DICOM 元数据的现有 BigQuery 数据集的名称
- BIGQUERY_TABLE_ID:BigQuery 数据集中新表或现有表的名称。如果导出操作是创建新表,请参阅表命名,了解表名称要求。
- BUCKET:包含过滤器文件的 Cloud Storage 存储桶的名称。如果过滤器文件位于目录中,请在路径中包括该目录。
- FILTER_FILE:过滤器文件在 Cloud Storage 存储桶中的位置和名称
- WRITE_DISPOSITION:
WriteDisposition
枚举的值。请使用以下某个值:WRITE_EMPTY
:仅在 BigQuery 表为空时导出数据。WRITE_TRUNCATE
:先清空 BigQuery 表中的所有现有数据,然后再写入 DICOM 实例。WRITE_APPEND
:将数据附加到 BigQuery 表。
请求 JSON 正文:
{ "bigqueryDestination": { "tableUri": "bq://PROJECT_ID.BIGQUERY_DATASET_ID.BIGQUERY_TABLE_ID", "writeDisposition": "WRITE_DISPOSITION" }, "filterConfig": { "resourcePathsGcsUri": "gs://BUCKET/FILTER_FILE" } }
如需发送请求,请选择以下方式之一:
curl
将请求正文保存在名为
request.json
的文件中。在终端中运行以下命令,在当前目录中创建或覆盖此文件:cat > request.json << 'EOF' { "bigqueryDestination": { "tableUri": "bq://PROJECT_ID.BIGQUERY_DATASET_ID.BIGQUERY_TABLE_ID", "writeDisposition": "WRITE_DISPOSITION" }, "filterConfig": { "resourcePathsGcsUri": "gs://BUCKET/FILTER_FILE" } } 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:export"PowerShell
将请求正文保存在名为
request.json
的文件中。在终端中运行以下命令,在当前目录中创建或覆盖此文件:@' { "bigqueryDestination": { "tableUri": "bq://PROJECT_ID.BIGQUERY_DATASET_ID.BIGQUERY_TABLE_ID", "writeDisposition": "WRITE_DISPOSITION" }, "filterConfig": { "resourcePathsGcsUri": "gs://BUCKET/FILTER_FILE" } } '@ | 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:export" | Select-Object -Expand ContentAPI Explorer
复制请求正文并打开方法参考页面。API Explorer 面板会在页面右侧打开。您可以与此工具进行交互以发送请求。将请求正文粘贴到此工具中,填写任何其他必填字段,然后点击执行。
OPERATION_ID
的值。在下一步中,您需要使用此值。使用
projects.locations.datasets.operations.get
方法可获取长时间运行的操作的状态。在使用任何请求数据之前,请先进行以下替换:
- PROJECT_ID:您的 Google Cloud 项目的 ID
- DATASET_ID:数据集 ID
- LOCATION:数据集位置
- 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 ContentAPI Explorer
打开方法参考页面。API Explorer 面板会在页面右侧打开。您可以与此工具进行交互以发送请求。填写所有必填字段,然后点击执行。
"done": true
,则表示长时间运行的操作已完成。
在 BigQuery 中查询和分析 DICOM 数据
将 DICOM 元数据导出到 BigQuery 表后,您可以运行示例查询来获取有关元数据的更多详细信息。以下示例展示了如何针对一些常见的用例运行查询。
搜索元数据
假设您要搜索很难在其他系统中搜索的大量元数据,例如图片归档和通信系统 (PACS) 或供应商中性归档 (VNA)。以下查询展示了如何查询患者的 PatientID
值以及如何使用 DICOMweb 路径检索特定映像实例。该示例使用 NIH Chest X-ray 数据集中的 chc-nih-chest-xray.nih_chest_xray.nih_chest_xray 表。
#standardSQL
SELECT CONCAT('/dicomWeb/studies/', StudyInstanceUID, '/series/', SeriesInstanceUID, '/instances/', SOPInstanceUID) as DICOMwebPath
FROM `chc-nih-chest-xray.nih_chest_xray.nih_chest_xray`
WHERE PatientID = '19045';
该查询返回与患者相关的研究。以下响应使用 JSON 格式:
[
{
"DICOMwebPath": "/dicomWeb/studies/1.3.6.1.4.1.11129.5.5.169629990647803559688464142879817265366193/series/1.3.6.1.4.1.11129.5.5.141990184899344268273968625887396932057061/instances/1.3.6.1.4.1.11129.5.5.162448513493627342869165322873398445570578"
},
{
"DICOMwebPath": "/dicomWeb/studies/1.3.6.1.4.1.11129.5.5.114160532832901355654444239008681456919023/series/1.3.6.1.4.1.11129.5.5.178361108150351071908200174504411112440700/instances/1.3.6.1.4.1.11129.5.5.145959606905209488520697484018030440952428"
},
{
"DICOMwebPath": "/dicomWeb/studies/1.3.6.1.4.1.11129.5.5.177801331756958922168115732894519725643007/series/1.3.6.1.4.1.11129.5.5.134128639331055702643451404466208677561042/instances/1.3.6.1.4.1.11129.5.5.148534317486838863760908141408862094292875"
},
{
"DICOMwebPath": "/dicomWeb/studies/1.3.6.1.4.1.11129.5.5.119570482687494886334491471870663517807852/series/1.3.6.1.4.1.11129.5.5.148050768676645373034111775531663876425927/instances/1.3.6.1.4.1.11129.5.5.111153708388576066195389700503245704293300"
},
{
"DICOMwebPath": "/dicomWeb/studies/1.3.6.1.4.1.11129.5.5.144704399171290022427247626928443085419319/series/1.3.6.1.4.1.11129.5.5.190285793344339390593165731988543561416633/instances/1.3.6.1.4.1.11129.5.5.110245902713751842026864359179754889505217"
},
{
"DICOMwebPath": "/dicomWeb/studies/1.3.6.1.4.1.11129.5.5.172276126220388966649736649950361623806435/series/1.3.6.1.4.1.11129.5.5.171512371498506519035489729484464872160452/instances/1.3.6.1.4.1.11129.5.5.111721417729733087384317002785068394901165"
}
]
查询最新研究
假设您希望使用数据集中的最新研究来填充 PACS 读取工作列表。
以下查询展示了如何检索和显示最新研究以及实例计数和相关元数据。该示例使用 TCIA 数据集中的 bigquery-public-data.idc_v5.dicom_metadata 表。
#standardSQL
SELECT
MIN(CONCAT(StudyDate, ' ', StudyTime)) as StudyDateTime, MIN(PatientID) as PatientID, StudyInstanceUID, COUNT(*) as InstanceCount
FROM
`bigquery-public-data.idc_v5.dicom_metadata` AS dicom
GROUP BY StudyInstanceUID
ORDER BY StudyDateTime DESC
LIMIT 10;
查询会返回以下信息:
- 最新进入系统的 10 项研究,以及进入系统的时间
- 与每项研究关联的患者
- 研究的 UID
- 与研究关联的实例数
以下响应使用 JSON 格式:
[
{
"StudyDateTime": "2021-07-11 00:38:22",
"PatientID": "C3L-01924",
"StudyInstanceUID": "1.3.6.1.4.1.5962.99.1.2466232160.763753303.1625963902816.3.0",
"InstanceCount": "4"
}, {
"StudyDateTime": "2021-07-10 23:52:10",
"PatientID": "C3L-01924",
"StudyInstanceUID": "1.3.6.1.4.1.5962.99.1.2463459463.1074873794.1625961130119.3.0",
"InstanceCount": "4"
}, {
"StudyDateTime": "2021-07-10 23:31:13",
"PatientID": "C3L-02513",
"StudyInstanceUID": "1.3.6.1.4.1.5962.99.1.2462202516.1453336368.1625959873172.3.0",
"InstanceCount": "7"
}, {
"StudyDateTime": "2021-07-10 23:25:17",
"PatientID": "C3L-01924",
"StudyInstanceUID": "1.3.6.1.4.1.5962.99.1.2461846936.496969835.1625959517592.3.0",
"InstanceCount": "4"
}, {
"StudyDateTime": "2021-07-10 22:35:16",
"PatientID": "C3L-02515",
"StudyInstanceUID": "1.3.6.1.4.1.5962.99.1.2458845347.1905567435.1625956516003.3.0",
"InstanceCount": "6"
}, {
"StudyDateTime": "2021-07-10 21:49:46",
"PatientID": "C3L-02515",
"StudyInstanceUID": "1.3.6.1.4.1.5962.99.1.2456116127.1264613559.1625953786783.3.0",
"InstanceCount": "7"
}, {
"StudyDateTime": "2021-07-10 21:46:04",
"PatientID": "C3L-02513",
"StudyInstanceUID": "1.3.6.1.4.1.5962.99.1.2455894080.1705479047.1625953564736.3.0",
"InstanceCount": "6"
}, {
"StudyDateTime": "2021-07-10 21:13:30",
"PatientID": "C3L-01924",
"StudyInstanceUID": "1.3.6.1.4.1.5962.99.1.2453939652.2052768474.1625951610308.3.0",
"InstanceCount": "4"
}, {
"StudyDateTime": "2021-07-10 21:10:17",
"PatientID": "C3L-02515",
"StudyInstanceUID": "1.3.6.1.4.1.5962.99.1.2453746219.164669562.1625951416875.3.0",
"InstanceCount": "6"
}, {
"StudyDateTime": "2021-07-10 20:05:48",
"PatientID": "C3L-02513",
"StudyInstanceUID": "1.3.6.1.4.1.5962.99.1.2449877792.1996682667.1625947548448.3.0",
"InstanceCount": "6"
}
]
限制和其他行为
如果 DICOM 标记在 BigQuery 中没有受支持的类型(在排除的 VR 中列出),则可能列在目标 BigQuery 表的单独列(名为 DroppedTags.TagName
)中,或者可以完全排除。超出大约 1 MB 的 DICOM 标记将被完全排除。
对 DICOM 导出请求进行问题排查
如果在 BigQuery 请求中执行 DICOM 导出元数据期间发生错误,则错误将记入 Cloud Logging 中。如需了解详情,请参阅在 Cloud Logging 中查看错误日志。