将 FHIR(快速医疗互操作性资源)注入 BigQuery

1. 简介

1f4764c4ca4c50d9

上次更新日期:2020 年 5 月 16 日

此 Codelab 演示了使用 Cloud Healthcare FHIR API 将 FHIR R4 格式的医疗保健数据(常规资源)提取到 BigQuery 中的数据注入模式。我们已为您生成真实的医疗保健测试数据,并将其保存在 Google Cloud Storage 存储分区 (gs://hcls_testing_data_fhir_10_patients/)) 中。

在此 Codelab 中,您将学习以下内容

  • 如何将 FHIR R4 资源从 GCS 导入 Cloud Healthcare FHIR 存储区。
  • 如何将 FHIR 数据从 FHIR 存储区导出到 BigQuery 中的数据集。

您需要满足什么条件才能运行此演示?

  • 您需要访问 GCP 项目。
  • 您必须分配有 GCP 项目的 Owner 角色。
  • NDJSON 格式的 FHIR R4 资源 (content-structure=RESOURCE)

如果您没有 GCP 项目,请按照这些步骤创建一个新的 GCP 项目。

NDJSON 格式的 FHIR R4 资源已预加载到位于以下位置的 GCS 存储分区:

  • gs://hcls_testing_data_fhir_10_patients/fhir_r4_ndjson/ - 常规资源

上述所有资源都具有换行符 JSON (NDJSON) 文件格式,但内容结构不同:

  • 采用 ndjson 格式的常规资源 - 文件中的每一行都包含一个 JSON 格式的核心 FHIR 资源(例如患者观察对象等)。每个 ndjson 文件都包含相同资源类型的 FHIR 资源。例如,Patient.ndjson 将包含一个或多个 resourceType 为“Patient”的 FHIR 资源和 Observation.ndjson 将包含一个或多个 resourceType 为“Observation”的 FHIR 资源。

如果需要一个新数据集,您始终可以使用 SyntheaTM 生成它。然后将其上传到 GCS,而不是使用 Codelab 中提供的存储分区。

2. 项目设置

请按照以下步骤启用 Healthcare API 并授予所需的权限:

为您的环境初始化 shell 变量

如需查找 PROJECT_NUMBER 和 PROJECT_ID,请参阅识别项目PROJECT_NUMBERPROJECT_NUMBER

<!-- CODELAB: Initialize shell variables -->
export PROJECT_ID=<PROJECT_ID>
export PROJECT_NUMBER=<PROJECT_NUMBER>
export SRC_BUCKET_NAME=hcls_testing_data_fhir_10_patients
export BUCKET_NAME=<BUCKET_NAME>
export DATASET_ID=<DATASET_ID>
export FHIR_STORE=<FHIR_STORE>
export BQ_DATASET=<BQ_DATASET>

启用 Healthcare API

按照以下步骤操作,即可在 GCP 项目中启用 Healthcare API。这会为项目添加 Healthcare API 服务账号

  1. 转到 GCP Console API 库
  2. 从项目列表中,选择一个项目。
  3. 在 API 库中,选择要启用的 API。如果您在查找 API 时需要帮助,请使用搜索字段和过滤条件。
  4. 在 API 页面上,点击启用

获取合成数据集的访问权限

  1. 通过您用于登录 Cloud 控制台的电子邮件地址,向 hcls-solutions-external+subscribe@google.com 发送电子邮件以请求加入。
  2. 您会收到一封电子邮件,其中会说明如何确认此操作。
  3. 使用回复电子邮件的选项即可加入群组。
  4. 请勿点击 525a0fa752e0acae 按钮。它不起作用。
  5. 收到确认电子邮件后,您便可以继续执行此 Codelab 中的下一步。

在 GCP 项目中创建一个 Google Cloud Storage 存储分区

gsutil mb gs://$BUCKET_NAME

将合成数据复制到您的 GCP 项目

gsutil -m cp gs://$SRC_BUCKET_NAME/fhir_r4_ndjson/**.ndjson \
gs://$BUCKET_NAME/fhir_r4_ndjson/

授予权限

在从 Cloud Storage 导入 FHIR 资源并导出到 BigQuery 之前,您必须向 Cloud Healthcare Service Agent 服务账号授予额外的权限。如需了解详情,请参阅 FHIR 存储区 Cloud StorageFHIR 存储区 BigQuery 权限。

授予 Storage Admin 权限

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member=serviceAccount:service-$PROJECT_NUMBER@gcp-sa-healthcare.iam.gserviceaccount.com \
  --role=roles/storage.objectViewer

授予 BigQuery 管理员权限

gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member=serviceAccount:service-$PROJECT_NUMBER@gcp-sa-healthcare.iam.gserviceaccount.com \
  --role=roles/bigquery.admin

3. 环境设置

请按照以下步骤使用 Cloud Healthcare FHIR API 将 NDJSON 文件中的数据注入 BigQuery 中的医疗保健数据集:

创建 Healthcare 数据集和 FHIR 存储区

使用 Cloud Healthcare API 创建 Healthcare 数据集

gcloud beta healthcare datasets create $DATASET_ID --location=us-central1

使用 Cloud Healthcare API 在数据集中创建 FHIR 存储区

gcloud beta healthcare fhir-stores create $FHIR_STORE \
  --dataset=$DATASET_ID --location=us-central1 --version=r4

4. 将数据导入 FHIR 存储区

将测试数据从 Google Cloud Storage 导入 FHIR 存储区

我们将使用 GCS 存储分区中预加载的文件。这些文件包含 NDJSON 格式的 FHIR R4 常规资源。作为响应,您将获得 OPERATION_NUMBER,可在验证步骤中使用。

从 GCP 项目的 GCS 存储分区导入常规资源

gcloud beta healthcare fhir-stores import gcs $FHIR_STORE \
  --dataset=$DATASET_ID --async \
  --gcs-uri=gs://$BUCKET_NAME/fhir_r4_ndjson/**.ndjson \
  --location=us-central1 --content-structure=RESOURCE

验证

验证操作已成功完成。操作可能需要几分钟才能完成,因此您可能需要重复几次此命令,但有一定的延迟。

gcloud beta healthcare operations describe OPERATION_NUMBER \
  --dataset=$DATASET_ID --location=us-central1

5. 将数据从 FHIR 存储区导出到 BigQuery

创建 BigQuery 数据集

bq mk --location=us --dataset $PROJECT_ID:$BQ_DATASET

将医疗保健数据从 FHIR Store 导出到 BigQuery 数据集

gcloud beta healthcare fhir-stores export bq $FHIR_STORE \
  --dataset=$DATASET_ID --location=us-central1 --async \
  --bq-dataset=bq://$PROJECT_ID.$BQ_DATASET \
  --schema-type=analytics

作为响应,您将获得 OPERATION_NUMBER,可在验证步骤中使用。

验证

验证操作已成功完成

gcloud beta healthcare operations describe OPERATION_NUMBER \
  --dataset=$DATASET_ID --location=us-central1

验证 BigQuery 数据集是否包含全部 16 个表

bq ls $PROJECT_ID:$BQ_DATASET

6. 清理

为避免因本教程中使用的资源导致您的 Google Cloud Platform 账号产生费用,您可以清理在 GCP 上创建的资源,以避免这些资源占用配额,日后产生费用。以下部分介绍如何删除或关闭这些资源。

删除项目

若要避免产生费用,最简单的方法是删除您为本教程创建的项目。

如需删除项目,请执行以下操作:

  1. 在 GCP Console 中,转到项目页面。转到“项目”页面
  2. 在项目列表中,选择要删除的项目,然后点击删除
  3. 在对话框中输入项目 ID,然后点击关停以删除项目。

如果您需要保留项目,可以按照以下说明删除 Cloud Healthcare 数据集和 BigQuery 数据集。

删除 Cloud Healthcare API 数据集

请按照步骤,使用 GCP Console 和 gcloud CLI 删除 Healthcare API 数据集。

快速 CLI 命令:

gcloud beta healthcare datasets delete $DATASET_ID --location=us-central1

删除 BigQuery 数据集

请按照步骤,使用不同的界面删除 BigQuery 数据集。

快速 CLI 命令:

bq rm -r -f $PROJECT_ID:$DATASET_ID

7. 恭喜

恭喜!您已成功完成使用 Cloud Healthcare API 在 BigQuery 中提取医疗保健数据的 Codelab。

您已将符合 FHIR R4 的合成数据从 Google Cloud Storage 导入到 Cloud Healthcare FHIR API。

您已将数据从 Cloud Healthcare FHIR API 导出到 BigQuery。

现在,您已了解在 Google Cloud Platform 上使用 BigQuery 开启医疗保健数据分析之旅所需的关键步骤。