在将数据初始导入 Vertex AI Search 医疗保健数据存储区后,您可能已在源 FHIR 存储区中执行以下任一更新:
添加了新的 FHIR 资源
更新了现有 FHIR 资源
已删除的 FHIR 资源
在这种情况下,您可以将源 FHIR 存储区中的更改协调 到 Vertex AI Search 医疗保健数据存储区。
对账概览
关键字 :Vertex AI Search 医疗保健数据存储区中的文档对应于 FHIR 存储区中的 FHIR R4 资源。
您可以增量或完全对更改进行协调。下表比较了这两种模式。
对源 FHIR 存储区所做的更改
增量模式
完整模式
新的 FHIR 资源
向 Vertex AI Search 数据存储区添加新文档
向 Vertex AI Search 数据存储区添加新文档
更新了 FHIR 资源
替换 Vertex AI Search 数据存储区中的现有文档,同时保留文档 ID
替换 Vertex AI Search 数据存储区中的现有文档,同时保留文档 ID
已删除的 FHIR 资源
不一致
从 Vertex AI Search 数据存储区中移除相应文档
准备工作
查看 Google Cloud 项目的配额和限制 。
每个 Vertex AI Search 医疗保健数据存储区在每个项目中最多可以包含 100 万个文档。如果在导入过程中达到此配额,导入流程将停止。
以下示例展示了如何使用 documents.import
方法从 Cloud Healthcare API FHIR 存储区导入增量更改。
执行此任务所需的权限
向 service-PROJECT_NUMBER @gcp-sa-discoveryengine.iam.gserviceaccount.com
服务账号授予以下权限或 以下 Identity and Access Management (IAM) 角色。
用于从 Cloud Healthcare API 中的 FHIR 存储区一次性导入 FHIR 数据。
权限
bigquery.jobs.create
bigquery.datasets.create
bigquery.tables.export
healthcare.datasets.get
healthcare.datasets.list
healthcare.fhirStores.get
healthcare.fhirStores.list
healthcare.fhirStores.export
角色
用于从 Cloud Healthcare API(预览版)中的 FHIR 存储区流式导入 FHIR 数据。
权限
healthcare.datasets.get
healthcare.datasets.list
healthcare.fhirStores.get
healthcare.fhirStores.update
healthcare.fhirStores.list
healthcare.fhirStores.export
healthcare.fhirResources.get
角色
在创建数据存储区(预览版)时自定义架构,以配置 FHIR 资源和元素的可编入索引性、可搜索性和可检索性。
权限
storage.objects.create
storage.objects.delete
storage.objects.list
角色
导入引用 Google Cloud 中文件的 FHIR 数据。如果引用的文件与 Vertex AI Search 应用位于同一 Google Cloud 项目中,系统会默认授予这些权限。
权限
storage.objects.get
storage.buckets.create
角色
REST
执行增量导入。
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-H "X-Goog-User-Project: PROJECT_ID " \
"https://us-discoveryengine.googleapis.com/v1alpha/projects/PROJECT_ID /locations/us/dataStores/DATA_STORE_ID /branches/0/documents:import" \
-d '{
"reconciliation_mode": "INCREMENTAL",
"fhir_store_source": {"fhir_store": "projects/PROJECT_ID /locations/CLOUD_HEALTHCARE_DATASET_LOCATION /datasets/CLOUD_HEALTHCARE_DATASET_ID /fhirStores/FHIR_STORE_ID "}
}'
替换以下内容:
PROJECT_ID
:您的 Google Cloud 项目的 ID。
DATA_STORE_ID
:Vertex AI Search 数据存储区的 ID。
CLOUD_HEALTHCARE_DATASET_ID
:包含源 FHIR 存储区的 Cloud Healthcare API 数据集的 ID。
CLOUD_HEALTHCARE_DATASET_LOCATION
:包含源 FHIR 存储区的 Cloud Healthcare API 数据集的位置。
FHIR_STORE_ID
:Cloud Healthcare API FHIR R4 存储区的 ID。
响应
您应该收到类似以下内容的 JSON 响应。响应包含长时间运行的操作的标识符。当方法调用可能需要大量时间才能完成时,会返回长时间运行的操作。记下 IMPORT_OPERATION_ID 的值。您需要此值来验证导入的状态 。
{
"name": "projects/PROJECT_ID /locations/us/collections/default_collection/dataStores/DATA_STORE_ID /branches/0/operations/IMPORT_OPERATION_ID ",
"metadata": {
"@type": "type.googleapis.com/google.cloud.discoveryengine.v1alpha.ImportDocumentsMetadata"
}
}
验证 FHIR 数据导入操作是否已完成。
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://us-discoveryengine.googleapis.com/v1alpha/projects/PROJECT_ID /locations/us/collections/default_collection/dataStores/DATA_STORE_ID /branches/0/operations/IMPORT_OPERATION_ID "
替换以下内容:
PROJECT_ID
:您的 Google Cloud 项目的 ID。
DATA_STORE_ID
:Vertex AI Search 数据存储区的 ID。
IMPORT_OPERATION_ID
:调用 import
方法时返回的长时间运行的操作的操作 ID。
响应
您应该收到类似以下内容的 JSON 响应。导入操作是一项长时间运行的操作。操作运行期间,响应包含以下字段:
successCount
:表示到目前为止成功导入的 FHIR 资源的数量。
failureCount
:表示到目前为止未能导入的 FHIR 资源的数量。只有在有任何 FHIR 资源导入失败时,才会显示此字段。
操作完成后,响应将包含以下字段:
successCount
:表示成功导入的 FHIR 资源的数量。
failureCount
:表示导入失败的 FHIR 资源的数量。只有在有任何 FHIR 资源导入失败时,才会显示此字段。
totalCount
:表示源 FHIR 存储区中存在的 FHIR 资源数量。只有在有任何 FHIR 资源导入失败时,才会显示此字段。
done
:值为 true
,表示导入操作已完成
errorSamples
:提供有关导入失败的资源的信息。只有在有任何 FHIR 资源导入失败时,才会显示此字段。
errorConfig
:提供包含错误摘要日志文件的 Cloud Storage 位置的路径。
{
"name": "projects/PROJECT_ID /locations/us/collections/default_collection/dataStores/DATA_STORE_ID /branches/0/operations/IMPORT_OPERATION_ID ",
"metadata": {
"@type": "type.googleapis.com/google.cloud.discoveryengine.v1alpha.ImportDocumentsMetadata",
"createTime": "START_TIMESTAMP ",
"updateTime": "END_TIMESTAMP ",
"successCount": "SUCCESS_COUNT ",
"failureCount": "FAILURE_COUNT ",
"totalCount": "TOTAL_COUNT ",
},
"done": true,
"response": {
"@type": "type.googleapis.com/google.cloud.discoveryengine.v1alpha.ImportDocumentsResponse",
"errorSamples": [ERROR_SAMPLE ],
"errorConfig": {
"gcsPrefix": "LOG_FILE_LOCATION "
}
}
}