本页面介绍如何将 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 元数据导出到其他项目,请参阅将 DICOM 元数据导出到其他项目。
控制台
如需将 DICOM 元数据导出到 BigQuery,请完成以下步骤:
- 在控制台中,转到数据集页面。
转到“数据集”页面 - 点击包含您要从中导出 DICOM 元数据的 DICOM 存储区的数据集。
- 在数据存储区列表中,从 DICOM 存储区的操作列表中选择导出。
- 在显示的导出 DICOM 存储区页面上,选择 BigQuery 表。
- 在项目列表中,选择 BigQuery 项目。
- 在数据集 ID 列表中,选择数据集。
- 在表名称字段中,输入新表名称。
BigQuery 会检查每项选择,以确保目标表有效。 - 在 BigQuery 输出选项部分中,选择以下选项之一:
- 将数据附加到现有表:这相当于
writeDisposition
参数的WRITE_APPEND
值。 - 在导出资源之前删除数据集中的目标 DICOM 表中的现有数据:这相当于
writeDisposition
参数的WRITE_TRUNCATE
值。
- 将数据附加到现有表:这相当于
- 点击导出,将 DICOM 元数据导出到 BigQuery 中定义的目标位置。
- 要跟踪操作的状态,请点击操作标签页。操作完成后,系统会显示以下指示:
- 长时间运行的操作状态部分下方的确定标题下会显示一个绿色的对勾标记。
- 概览部分在操作 ID 的同一行中显示一个绿色对勾标记和一个确定指示符。
gcloud
要将 DICOM 元数据导出到 BigQuery,请使用 gcloud healthcare dicom-stores export bq
命令。请指定以下信息:
- 父数据集的名称
- DICOM 存储区的名称
- 现有 BigQuery 数据集的名称
- BigQuery Export 表的名称。名称只能包含字母(大写或小写)、数字和下划线。如需了解如何自定义导出操作的行为,请参阅设置 BigQuery 目标位置。
以下示例展示了 gcloud dicom-stores export bq
命令。
gcloud healthcare dicom-stores export bq DICOM_STORE_ID \ --dataset=DATASET_ID \ --location=LOCATION \ --bq-table=bq://PROJECT_ID.BIGQUERY_DATASET_ID.BIGQUERY_TABLE_ID \ [--overwrite-table]
运行该命令后,它会返回操作名称:
name: projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID
如需详细了解该操作,请运行 gcloud healthcare operations describe
命令并从响应中提供 OPERATION_ID:
gcloud healthcare operations describe OPERATION_ID \ --dataset=DATASET_ID
操作完成后,响应中将包含 done: true
。
done: true metadata: '@type': type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata apiMethodName: google.cloud.healthcare.v1.dicom.DicomService.ExportDicomData createTime: 'CREATE_TIME' endTime: 'END_TIME' name: projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID response: '@type': '...'
API
要将 DICOM 元数据导出到 BigQuery,请使用 projects.locations.datasets.dicomStores.export
方法。
curl
要导出 DICOM 元数据,请发出 POST
请求并指定以下信息:
- 父级数据集的名称和位置
- DICOM 存储区的名称
- 现有 BigQuery 数据集的名称
- BigQuery Export 表的名称。名称只能包含字母(大写或小写)、数字和下划线。如需了解如何自定义导出操作的行为,请参阅设置 BigQuery 目标位置。
writeDisposition
枚举的以下某个值:WRITE_EMPTY
:仅在目标表为空时才导出数据。这是默认的。WRITE_TRUNCATE
:在写入实例之前清空表中的所有现有数据。WRITE_APPEND
:将数据附加到现有表。
以下示例展示了使用 curl
的 POST
请求。
curl -X POST \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ --data "{ 'bigqueryDestination': { 'tableUri': 'bq://PROJECT_ID.BIGQUERY_DATASET_ID.BIGQUERY_TABLE_ID' }, 'writeDisposition': '{WRITE_EMPTY|WRITE_TRUNCATE|WRITE_APPEND}' }" "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID:export"
如果请求成功,服务器将以 JSON 格式返回响应:
{ "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" }
响应包含操作名称。要跟踪操作的状态,您可以使用 Operation get
方法:
curl -X GET \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"
如果请求成功,服务器将以 JSON 格式返回包含操作状态的响应:
{ "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.dicom.DicomService.ExportDicomData", "createTime": "CREATE_TIME", "endTime": "END_TIME", "logsUrl": "https://console.cloud.google.com/logs/query/CLOUD_LOGGING_URL" }, "done": true, "response": { "@type": "..." } }
PowerShell
要导出 DICOM 元数据,请发出 POST
请求并指定以下信息:
- 父级数据集的名称和位置
- DICOM 存储区的名称
- 现有 BigQuery 数据集的名称
- BigQuery Export 表的名称。名称只能包含字母(大写或小写)、数字和下划线。如需了解如何自定义导出操作的行为,请参阅设置 BigQuery 目标位置。
writeDisposition
枚举的以下某个值:WRITE_EMPTY
:仅在目标表为空时才导出数据。这是默认的。WRITE_TRUNCATE
:在写入实例之前清空表中的所有现有数据。WRITE_APPEND
:将数据附加到现有表。
以下示例展示了使用 Windows PowerShell 的 POST
请求。
$cred = gcloud auth application-default print-access-token $headers = @{ Authorization = "Bearer $cred" } Invoke-WebRequest ` -Method Post ` -Headers $headers ` -ContentType: "application/json; charset=utf-8" ` -Body "{ 'bigqueryDestination': { 'tableUri': 'bq://PROJECT_ID.BIGQUERY_DATASET_ID.BIGQUERY_TABLE_ID' }, 'writeDisposition': '{WRITE_EMPTY|WRITE_TRUNCATE|WRITE_APPEND}' }" ` -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID:export" | Select-Object -Expand Content
如果请求成功,服务器将以 JSON 格式返回响应:
{ "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" }
响应包含操作名称。要跟踪操作的状态,您可以使用 Operation get
方法:
$cred = gcloud auth application-default 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
如果请求成功,服务器将以 JSON 格式返回包含操作状态的响应:
{ "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.dicom.DicomService.ExportDicomData", "createTime": "CREATE_TIME", "endTime": "END_TIME", "logsUrl": "https://console.cloud.google.com/logs/query/CLOUD_LOGGING_URL" }, "done": true, "response": { "@type": "..." } }
将 DICOM 元数据导出到其他项目
要将 DICOM 元数据从一个项目导出到另一个项目,请先参阅将 DICOM 元数据导出到其他项目权限,了解如何在目标项目中设置 IAM 权限。
gcloud
要将 DICOM 元数据从一个项目中的 DICOM 存储区导出到另一个项目中的 BigQuery 表,请使用 gcloud healthcare dicom-stores export bq
命令。请指定以下信息:
- 父数据集的名称
- DICOM 存储区的名称
- 目标项目
- 目标项目中现有 BigQuery 数据集的名称
- BigQuery Export 表的名称。名称只能包含字母(大写或小写)、数字和下划线。如需了解 Cloud Healthcare API 如何将数据写入 BigQuery 表,请参阅设置 BigQuery 目标位置。
以下示例展示了 gcloud dicom-stores export bq
命令。
gcloud healthcare dicom-stores export bq DICOM_STORE_ID \ --dataset=DATASET_ID \ --location=LOCATION \ --bq-table=bq://DESTINATION_PROJECT_ID.BIGQUERY_DATASET_ID.BIGQUERY_TABLE_ID \ [--overwrite-table]
命令行会显示操作 ID,操作完成后,done
:
Request issued for: [DICOM_STORE_ID] Waiting for operation [projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/OPERATION_ID] to complete...done. name: projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID
如需详细了解该操作,请运行 gcloud healthcare operations describe
命令并从响应中提供 OPERATION_ID:
gcloud healthcare operations describe OPERATION_ID \ --dataset=DATASET_ID
操作完成后,响应中将包含 done: true
。
done: true metadata: '@type': type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata apiMethodName: google.cloud.healthcare.v1.dicom.DicomService.ExportDicomData createTime: 'CREATE_TIME' endTime: 'END_TIME' name: projects/SOURCE_PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID response: '@type': '...'
API
要将 DICOM 元数据导出到 BigQuery,请使用 projects.locations.datasets.dicomStores.export
方法。
curl
要将 DICOM 元数据从一个项目中的 DICOM 存储区导出到另一个项目中的 BigQuery 表,请发出 POST
请求并指定以下信息:
- 来源项目
- 父级数据集的名称和位置
- DICOM 存储区的名称
- 目标项目
- 目标项目中现有 BigQuery 数据集的名称
- BigQuery Export 表的名称。名称只能包含字母(大写或小写)、数字和下划线。如需了解 Cloud Healthcare API 如何将数据写入 BigQuery 表,请参阅设置 BigQuery 目标位置。
writeDisposition
枚举的以下某个值:WRITE_EMPTY
:仅在目标表为空时才导出数据。这是默认的。WRITE_TRUNCATE
:在写入实例之前清空表中的所有现有数据。WRITE_APPEND
:将数据附加到现有表。
以下示例展示了使用 curl
的 POST
请求。
curl -X POST \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ --data "{ 'bigqueryDestination': { 'tableUri': 'bq://DESTINATION_PROJECT_ID.BIGQUERY_DATASET_ID.BIGQUERY_TABLE_ID' }, 'writeDisposition': '{WRITE_EMPTY|WRITE_TRUNCATE|WRITE_APPEND}' }" "https://healthcare.googleapis.com/v1/projects/SOURCE_PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID:export"
如果请求成功,服务器将以 JSON 格式返回响应:
{ "name": "projects/SOURCE_PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" }
响应包含操作名称。要跟踪操作的状态,您可以使用 Operation get
方法:
curl -X GET \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ "https://healthcare.googleapis.com/v1/projects/SOURCE_PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"
如果请求成功,服务器将以 JSON 格式返回包含操作状态的响应:
{ "name": "projects/SOURCE_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.dicom.DicomService.ExportDicomData", "createTime": "CREATE_TIME", "endTime": "END_TIME", "logsUrl": "https://console.cloud.google.com/logs/query/CLOUD_LOGGING_URL" }, "done": true, "response": { "@type": "..." } }
PowerShell
要将 DICOM 元数据从一个项目中的 DICOM 存储区导出到另一个项目中的 BigQuery 表,请发出 POST
请求并指定以下信息:
- 来源项目
- 父级数据集的名称和位置
- DICOM 存储区的名称
- 目标项目
- 目标项目中现有 BigQuery 数据集的名称
- BigQuery Export 表的名称。名称只能包含字母(大写或小写)、数字和下划线。如需了解 Cloud Healthcare API 如何将数据写入 BigQuery 表,请参阅设置 BigQuery 目标位置。
writeDisposition
枚举的以下某个值:WRITE_EMPTY
:仅在目标表为空时才导出数据。这是默认的。WRITE_TRUNCATE
:在写入实例之前清空表中的所有现有数据。WRITE_APPEND
:将数据附加到现有表。
以下示例展示了使用 Windows PowerShell 的 POST
请求。
$cred = gcloud auth application-default print-access-token $headers = @{ Authorization = "Bearer $cred" } Invoke-WebRequest ` -Method Post ` -Headers $headers ` -ContentType: "application/json; charset=utf-8" ` -Body "{ 'bigqueryDestination': { 'tableUri': 'bq://DESTINATION_PROJECT_ID.BIGQUERY_DATASET_ID.BIGQUERY_TABLE_ID' }, 'writeDisposition': '{WRITE_EMPTY|WRITE_TRUNCATE|WRITE_APPEND}' }" ` -Uri "https://healthcare.googleapis.com/v1/projects/SOURCE_PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID:export" | Select-Object -Expand Content
如果请求成功,服务器将以 JSON 格式返回响应:
{ "name": "projects/SOURCE_PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" }
响应包含操作名称。要跟踪操作的状态,您可以使用 Operation get
方法:
$cred = gcloud auth application-default print-access-token $headers = @{ Authorization = "Bearer $cred" } Invoke-WebRequest ` -Method Get ` -Headers $headers ` -Uri "https://healthcare.googleapis.com/v1/projects/SOURCE_PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand Content
如果请求成功,服务器将以 JSON 格式返回包含操作状态的响应:
{ "name": "projects/SOURCE_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.dicom.DicomService.ExportDicomData", "createTime": "CREATE_TIME", "endTime": "END_TIME", "logsUrl": "https://console.cloud.google.com/logs/query/CLOUD_LOGGING_URL" }, "done": true, "response": { "@type": "..." } }
使用过滤条件导出 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 PATH/TO/FILTER_FILE gs://BUCKET/DIRECTORY
传入过滤条件文件
创建过滤条件文件后,您可以调用 DICOM 导出操作,并使用 REST API 传入过滤条件文件。以下示例展示了如何使用过滤条件导出 DICOM 元数据。
gcloud
如需使用过滤条件将 DICOM 元数据导出到 BigQuery,请使用 gcloud beta healthcare dicom-stores export bq
命令:
gcloud beta healthcare dicom-stores export bq DICOM_STORE_ID \ --dataset=DATASET_ID \ --location=LOCATION \ --bq-table=bq://PROJECT_ID.BIGQUERY_DATASET_ID.BIGQUERY_TABLE_ID \ --filter-config-gcs-uri=gs://BUCKET/DIRECTORY/FILTER_FILE
替换以下内容:
- DICOM_STORE_ID:DICOM 存储区的标识符
- DATASET_ID:DICOM 存储区的父级数据集的名称
- LOCATION:DICOM 存储区的父级数据集的位置
- PROJECT_ID:包含 BigQuery 数据集的项目标识符
- BIGQUERY_DATASET_ID:BigQuery 数据集的名称
- BIGQUERY_TABLE_ID:BigQuery Export 表的名称。名称只能包含字母(大写或小写)、数字和下划线。如需了解 Cloud Healthcare API 如何将数据写入 BigQuery 表,请参阅设置 BigQuery 目标位置。
- BUCKET/DIRECTORY/FILTER_FILE:过滤条件文件在 Cloud Storage 存储分区中的位置
输出如下所示:
Request issued for: [DICOM_STORE_ID] Waiting for operation [projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID] to complete...done. name: projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID
如需查看操作的状态,请运行 gcloud healthcare operations describe
命令并从响应中提供 OPERATION_ID:
gcloud healthcare operations describe OPERATION_ID \ --location=LOCATION \ --dataset=DATASET_ID
替换以下内容:
- OPERATION_ID:从上一条响应中返回的 ID 编号
- DATASET_ID:DICOM 存储区的父级数据集的名称
- LOCATION:DICOM 存储区的父级数据集的位置
输出如下所示:
done: true metadata: '@type': type.googleapis.com/google.cloud.healthcare.v1beta1.OperationMetadata apiMethodName: google.cloud.healthcare.v1beta1.dicom.DicomService.ExportDicomData createTime: 'CREATE_TIME' endTime: 'END_TIME', logsUrl: 'https://console.cloud.google.com/logs/query/CLOUD_LOGGING_URL' name: projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID response: '@type': '...'
API
如需使用过滤条件将 DICOM 元数据导出到 BigQuery,请使用 projects.locations.datasets.dicomStores.export
方法。
curl
如需使用过滤条件导出 DICOM 元数据,请发出 POST
请求并指定以下信息:
- 父级数据集的名称和位置
- DICOM 存储区的名称
- 过滤条件文件在 Cloud Storage 存储分区中的位置
- BigQuery Export 表的名称。名称只能包含字母(大写或小写)、数字和下划线。如需了解 Cloud Healthcare API 如何将数据写入 BigQuery 表,请参阅设置 BigQuery 目标位置。
writeDisposition
枚举的以下某个值:WRITE_EMPTY
:仅在目标表为空时才导出数据。这是默认的。WRITE_TRUNCATE
:在写入实例之前清空表中的所有现有数据。WRITE_APPEND
:将数据附加到现有表。
以下示例展示了使用 curl
的 POST
请求。
curl -X POST \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ --data "{ 'bigqueryDestination': { 'tableUri': 'bq://PROJECT_ID.BIGQUERY_DATASET_ID.BIGQUERY_TABLE_ID' }, 'filterConfig': { 'resourcePathsGcsUri': 'gs://BUCKET/DIRECTORY/FILTER_FILE' }, 'writeDisposition': '{WRITE_EMPTY|WRITE_TRUNCATE|WRITE_APPEND}' }" "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID:export"
如果请求成功,服务器将以 JSON 格式返回响应:
{ "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" }
响应包含操作名称。要跟踪操作的状态,您可以使用 Operation get
方法:
curl -X GET \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"
如果请求成功,服务器将以 JSON 格式返回包含操作状态的响应:
{ "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID", "metadata": { "@type": "type.googleapis.com/google.cloud.healthcare.v1beta1.OperationMetadata", "apiMethodName": "google.cloud.healthcare.v1beta1.dicom.DicomService.ExportDicomData", "createTime": "CREATE_TIME", "endTime": "END_TIME", "logsUrl": "https://console.cloud.google.com/logs/query/CLOUD_LOGGING_URL" }, "done": true, "response": { "@type": "..." } }
PowerShell
如需使用过滤条件导出 DICOM 元数据,请发出 POST
请求并指定以下信息:
- 父级数据集的名称和位置
- DICOM 存储区的名称
- 过滤条件文件在 Cloud Storage 存储分区中的位置
- BigQuery Export 表的名称。名称只能包含字母(大写或小写)、数字和下划线。如需了解 Cloud Healthcare API 如何将数据写入 BigQuery 表,请参阅设置 BigQuery 目标位置。
writeDisposition
枚举的以下某个值:WRITE_EMPTY
:仅在目标表为空时才导出数据。这是默认的。WRITE_TRUNCATE
:在写入实例之前清空表中的所有现有数据。WRITE_APPEND
:将数据附加到现有表。
以下示例展示了使用 Windows PowerShell 的 POST
请求。
$cred = gcloud auth application-default print-access-token $headers = @{ Authorization = "Bearer $cred" } Invoke-WebRequest ` -Method Post ` -Headers $headers ` -ContentType: "application/json; charset=utf-8" ` -Body "{ 'bigqueryDestination': { 'tableUri': 'bq://PROJECT_ID.BIGQUERY_DATASET_ID.BIGQUERY_TABLE_ID' }, 'filterConfig': { 'resourcePathsGcsUri': 'gs://BUCKET/DIRECTORY/FILTER_FILE' }, 'writeDisposition': '{WRITE_EMPTY|WRITE_TRUNCATE|WRITE_APPEND}' }" ` -Uri "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID:export" | Select-Object -Expand Content
如果请求成功,服务器将以 JSON 格式返回响应:
{ "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" }
响应包含操作名称。要跟踪操作的状态,您可以使用 Operation get
方法:
$cred = gcloud auth application-default 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
如果请求成功,服务器将以 JSON 格式返回包含操作状态的响应:
{ "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID", "metadata": { "@type": "type.googleapis.com/google.cloud.healthcare.v1beta1.OperationMetadata", "apiMethodName": "google.cloud.healthcare.v1beta1.dicom.DicomService.ExportDicomData", "createTime": "CREATE_TIME", "endTime": "END_TIME", "logsUrl": "https://console.cloud.google.com/logs/query/CLOUD_LOGGING_URL" }, "done": true, "response": { "@type": "..." } }
在 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 LungCT-Diagnosis 数据集中的 chc-tcia:lungct_diagnosis.lungct_diagnosis 表。
#standardSQL
SELECT MIN(CONCAT(StudyDate, ' ', StudyTime)) as StudyDateTime, MIN(PatientID) as PatientID, StudyInstanceUID, COUNT(*) as InstanceCount
FROM `chc-tcia.lungct_diagnosis.lungct_diagnosis`
GROUP BY StudyInstanceUID
ORDER BY StudyDateTime DESC
LIMIT 20;
查询会返回以下信息:
- 进入系统的 20 项最新研究以及它们进入系统的时间
- 与每项研究关联的患者
- 研究的 UID
- 与研究关联的实例数
以下响应使用 JSON 格式:
[
{
"StudyDateTime": "1998-09-24 07:59:11",
"PatientID": "R_006",
"StudyInstanceUID": "1.3.6.1.4.1.14519.5.2.1.4320.5030.203059346048546067166621241946",
"InstanceCount": "130"
},
{
"StudyDateTime": "1998-09-19 15:02:00",
"PatientID": "R_168",
"StudyInstanceUID": "1.3.6.1.4.1.14519.5.2.1.4320.5030.339960057327890022720983572187",
"InstanceCount": "73"
},
{
"StudyDateTime": "1998-09-03 13:59:23",
"PatientID": "R_232",
"StudyInstanceUID": "1.3.6.1.4.1.14519.5.2.1.4320.5030.339835546587977846672632754158",
"InstanceCount": "74"
},
{
"StudyDateTime": "1998-08-20 09:54:23",
"PatientID": "R_210",
"StudyInstanceUID": "1.3.6.1.4.1.14519.5.2.1.4320.5030.296738593990263872210071427126",
"InstanceCount": "108"
},
{
"StudyDateTime": "1998-08-17 15:22:14",
"PatientID": "R_053",
"StudyInstanceUID": "1.3.6.1.4.1.14519.5.2.1.4320.5030.517417975270684537124932347957",
"InstanceCount": "104"
},
{
"StudyDateTime": "1998-08-03 08:53:02",
"PatientID": "R_043",
"StudyInstanceUID": "1.3.6.1.4.1.14519.5.2.1.4320.5030.227672022111453893046049224932",
"InstanceCount": "111"
},
{
"StudyDateTime": "1998-07-24 10:01:17",
"PatientID": "R_141",
"StudyInstanceUID": "1.3.6.1.4.1.14519.5.2.1.4320.5030.179196140853257709306370614304",
"InstanceCount": "110"
},
{
"StudyDateTime": "1998-06-29 09:18:16",
"PatientID": "R_069",
"StudyInstanceUID": "1.3.6.1.4.1.14519.5.2.1.4320.5030.272642986942028254801481747252",
"InstanceCount": "118"
},
{
"StudyDateTime": "1998-06-27 12:47:58",
"PatientID": "R_233",
"StudyInstanceUID": "1.3.6.1.4.1.14519.5.2.1.4320.5030.681962696010777092272412255441",
"InstanceCount": "65"
},
{
"StudyDateTime": "1998-06-13 11:25:35",
"PatientID": "R_075",
"StudyInstanceUID": "1.3.6.1.4.1.14519.5.2.1.4320.5030.905893527127370577828717624475",
"InstanceCount": "112"
},
{
"StudyDateTime": "1998-06-06 12:16:24",
"PatientID": "R_029",
"StudyInstanceUID": "1.3.6.1.4.1.14519.5.2.1.4320.5030.125721920632162119492941634336",
"InstanceCount": "109"
},
{
"StudyDateTime": "1998-04-30 10:52:34",
"PatientID": "R_116",
"StudyInstanceUID": "1.3.6.1.4.1.14519.5.2.1.4320.5030.140526923029511055644251155499",
"InstanceCount": "115"
},
{
"StudyDateTime": "1998-04-11 08:55:15",
"PatientID": "R_014",
"StudyInstanceUID": "1.3.6.1.4.1.14519.5.2.1.4320.5030.231039938881330096566986102847",
"InstanceCount": "76"
},
{
"StudyDateTime": "1998-04-06 13:48:50",
"PatientID": "R_061",
"StudyInstanceUID": "1.3.6.1.4.1.14519.5.2.1.4320.5030.148444392206166653380348096858",
"InstanceCount": "70"
},
{
"StudyDateTime": "1998-04-05 12:57:54",
"PatientID": "R_126",
"StudyInstanceUID": "1.3.6.1.4.1.14519.5.2.1.4320.5030.803397998355063686023109438391",
"InstanceCount": "71"
},
{
"StudyDateTime": "1998-03-21 13:23:15",
"PatientID": "R_093",
"StudyInstanceUID": "1.3.6.1.4.1.14519.5.2.1.4320.5030.201986527949877334068747060981",
"InstanceCount": "65"
},
{
"StudyDateTime": "1998-03-06 13:27:51",
"PatientID": "R_065",
"StudyInstanceUID": "1.3.6.1.4.1.14519.5.2.1.4320.5030.233872568071694592857630274388",
"InstanceCount": "69"
},
{
"StudyDateTime": "1998-03-06 09:09:43",
"PatientID": "R_191",
"StudyInstanceUID": "1.3.6.1.4.1.14519.5.2.1.4320.5030.243097352990517043299166705830",
"InstanceCount": "76"
},
{
"StudyDateTime": "1998-01-14 14:59:23",
"PatientID": "R_237",
"StudyInstanceUID": "1.3.6.1.4.1.14519.5.2.1.4320.5030.213658277730427015624893071198",
"InstanceCount": "68"
},
{
"StudyDateTime": "1998-01-02 14:00:00",
"PatientID": "R_078",
"StudyInstanceUID": "1.3.6.1.4.1.14519.5.2.1.4320.5030.200669196334798686049957852894",
"InstanceCount": "87"
}
]
限制和其他行为
如果 DICOM 标记在 BigQuery 中不受支持(在排除的 VR 中列出),则 DICOM 标记将列在目标 BigQuery 表的单独列中(称为 DroppedTags.TagName
)。
对 DICOM 导出请求进行问题排查
如果在 BigQuery 请求中执行 DICOM 导出元数据期间发生错误,则错误将记入 Cloud Logging 中。如需了解详情,请参阅在 Cloud Logging 中查看错误日志。