本页面介绍了如何将 FHIR 资源导出到 BigQuery 进行探索和分析。
设置 BigQuery 权限
在将 FHIR 资源导出到 BigQuery 之前,您必须向 Cloud Healthcare Service Agent 服务帐号授予其他权限。如需了解详情,请参阅FHIR 存储区 BigQuery 权限。
导出 FHIR 资源
以下示例展示了如何将 FHIR 资源导出到 BigQuery 表。
设置 BigQuery 目标时,请使用完全限定的 URI,如下所示:
bq://PROJECT_ID.BIGQUERY_DATASET_ID.BIGQUERY_TABLE_ID
导出操作的行为可能会因以下方面而有所不同:
- 目标表是否已存在
- 您是否已设置
force
字段 - 您是否已设置
writeDisposition
枚举的值。如果使用writeDisposition
枚举,请勿设置force
字段。
上述每种情况下的行为如下:
- 如果目标表已存在,并且
force
设置为true
,则导出操作会覆盖现有表。 - 如果目标表已存在,并且
force
设置为false
,则会发生错误。 - 如果目标表尚不存在,则无论您是否指定
force
字段,导出操作都会创建一个新表。 - 使用
writeDisposition
时,如果目标表已存在且为空,则导出操作会成功完成,而不是返回错误。
控制台
如需将 FHIR 资源导出到 BigQuery,请完成以下步骤:
- 在 Cloud Console 中,转到数据集页面。
转到“数据集”页面 - 点击要从中导出 FHIR 资源的 FHIR 存储区的数据集。
- 在数据存储区列表中,从 FHIR 存储区的操作列表中选择导出。
- 在显示的导出 FHIR 资源页面上,选择 BigQuery 表。
- 在 BigQuery 输出选项中,选择数据导出到 BigQuery 的方式。
- 在 BigQuery 输出选项中,点击浏览以选择 BigQuery 项目和数据集。
- 在选择数据集中,搜索要将 FHIR 资源导出到的 BigQuery 项目和数据集。
- 如需在输出架构中设置所有递归结构的深度,请点击递归结构深度滑块中的相关深度级别。默认情况下,递归值为 2。
如需了解详情,请参阅projects.locations.datasets.fhirStores.SchemaConfig
。 - 点击导出,将 FHIR 资源导出到 BigQuery。
- 要跟踪操作的状态,请点击操作标签页。操作完成后,系统会显示以下指示:
- 长时间运行的操作状态部分下方的确定标题下会显示一个绿色的对勾标记。
- 概览部分在操作 ID 的同一行中显示一个绿色对勾标记和一个确定指示符。
gcloud
如需将 FHIR 资源导出到 BigQuery,请使用 gcloud healthcare fhir-stores export bq
命令。请指定以下信息:
- 父数据集的名称
- FHIR 存储区的名称
- 现有 BigQuery 数据集的名称
- 拥有 BigQuery 数据集的项目的名称
- 将
schema-type
设置为analytics
--writeDisposition
标志可使用以下值之一:write-empty
:仅在目标表为空时才导出数据。这是默认的。write-truncate
:在写入实例之前清空表中的所有现有数据。write-append
:将数据附加到现有表。
以下示例展示了 gcloud healthcare fhir-stores export bq
命令。
gcloud healthcare fhir-stores export bq FHIR_STORE_ID \ --dataset=DATASET_ID \ --location=LOCATION \ --bq-dataset=bq://PROJECT_ID.BIGQUERY_DATASET_ID \ --schema-type=analytics \ --write-disposition={write-empty|write-truncate|write-append}
命令行会显示操作 ID,操作完成后,done
:
Request issued for: [FHIR_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/fhirStores/FHIR_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.fhir.FhirService.ExportResources createTime: 'CREATE_TIME' endTime: 'END_TIME' name: projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID response: '@type': type.googleapis.com/google.cloud.healthcare.v1.fhir.rest.ExportResourcesResponse fhirStore: projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID
API
如需了解详情,请参阅 projects.locations.datasets.fhirStores.export
。
curl
要导出 FHIR 资源,请发出 POST
请求并提供以下信息:
- 父数据集的名称
- FHIR 存储区的名称
- 现有 BigQuery 数据集的名称
- 拥有 BigQuery 数据集的项目的名称
将
schemaType
字段设置为以下其中一项:ANALYTICS
:FHIR 分析架构ANALYTICS_V2
:支持重复扩展列和包含资源(JSON 字符串形式)的 FHIR 分析架构
访问令牌
writeDisposition
枚举的以下某个值:write-empty
:仅在目标表为空时才导出数据。这是默认的。write-truncate
:在写入实例之前清空表中的所有现有数据。write-append
:将数据附加到现有表。
(仅适用于 v1beta1):可选字段
_type
,仅导出一种或多种 FHIR 资源类型(仅适用于 v1beta1):可选字段
_since
,仅导出在特定时间之后更新的资源(定义为YYYY-MM-DDThh:mm:ss.sss+zz:zz
)
该操作会为 FHIR 存储区中的每种资源类型输出一个 BigQuery 表。
以下示例展示了使用 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': { 'datasetUri': 'bq://PROJECT_ID.BIGQUERY_DATASET_ID', 'schemaConfig': { 'schemaType': '{ANALYTICS|ANALYTICS_V2}' }, 'writeDisposition': '{write-empty|write-truncate|write-append}' } }" "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_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.fhir.FhirService.ExportResources", "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.cloud.healthcare.v1.fhir.rest.ExportResourcesResponse", } }
PowerShell
要导出 FHIR 资源,请发出 POST
请求并提供以下信息:
- 父数据集的名称
- FHIR 存储区的名称
- 现有 BigQuery 数据集的名称
- 拥有 BigQuery 数据集的项目的名称
将
schemaType
字段设置为以下其中一项:ANALYTICS
:FHIR 分析架构ANALYTICS_V2
:支持重复扩展列和包含资源(JSON 字符串形式)的 FHIR 分析架构
访问令牌
writeDisposition
枚举的以下某个值:write-empty
:仅在目标表为空时才导出数据。这是默认的。write-truncate
:在写入实例之前清空表中的所有现有数据。write-append
:将数据附加到现有表。
(仅适用于 v1beta1):可选字段
_type
,仅导出一种或多种 FHIR 资源类型(仅适用于 v1beta1):可选字段
_since
,仅导出在特定时间之后更新的资源(定义为YYYY-MM-DDThh:mm:ss.sss+zz:zz
)
该操作会为 FHIR 存储区中的每种资源类型输出一个 BigQuery 表。
以下示例展示了使用 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': { 'datasetUri': 'bq://PROJECT_ID.BIGQUERY_DATASET_ID', 'schemaConfig': { 'schemaType': '{ANALYTICS|ANALYTICS_V2}' }, 'writeDisposition': '{write-empty|write-truncate|write-append}' } }" ` -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_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.fhir.FhirService.ExportResources", "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.cloud.healthcare.v1.fhir.rest.ExportResourcesResponse", } }
在 BigQuery 中查询和分析 FHIR 数据
将 FHIR 资源导出到 BigQuery 后,请参阅在 BigQuery 中分析 FHIR 数据解决方案,了解如何查询和分析导出的数据。该解决方案使用 FHIR 中由 Synthea™ 生成的合成数据 公共数据集,该数据集托管了在 Synthea™ 中使用 FHIR 格式生成的超过 100 万条合成患者记录。
对 FHIR 导出请求进行问题排查
如果在执行 FHIR 导出请求期间发生错误,则错误会记录到 Cloud Logging。如需了解详情,请参阅在 Cloud Logging 中查看错误日志。
如果整个操作返回错误,请参阅排查长时间运行的操作问题。
后续步骤
- 如果您是研究人员、数据科学家或 IT 团队,请参阅在 BigQuery 中存储医疗保健数据解决方案,详细了解如何在 BigQuery 中分析和存储数据。
- 在 BigQuery 中管理医疗保健数据访问权限解决方案介绍了在 BigQuery 中保护临床和医疗保健运营数据的策略。