本页面介绍了如何使用 projects.locations.datasets.hl7V2Stores.export
方法将 HL7v2 消息导出到 Pub/Sub。
您可以将 HL7v2 消息导出到 Pub/Sub 以进行下游处理。假设您有一条 Dataflow 流水线,可在将新消息提取到 HL7v2 存储区时转换 HL7v2 消息。流水线从 Pub/Sub 订阅中读取并等待新 HL7v2 消息的通知。当您使用 hl7V2Stores.import
方法将 HL7v2 消息导入 HL7v2 存储区时,该方法不会发送 Pub/Sub 通知。如需触发流水线,请导入 HL7v2 消息,然后使用 hl7v2Stores.export
方法将它们导出至 Pub/Sub。
须知事项
启用 Pub/Sub API
在 Google Cloud 控制台中,启用 Pub/Sub API:
配置 Pub/Sub 权限
如需将消息从 HL7v2 存储区导出到 Pub/Sub,您必须将 pubsub.publisher
角色添加到项目的 Cloud Healthcare Service Agent
服务帐号中。
如需查看添加所需角色的步骤,请参阅 DICOM、FHIR 和 HL7v2 存储区 Pub/Sub 权限。
创建 Pub/Sub 主题
如需创建主题,请参阅创建主题。
各个数据存储区可以有自己的 Pub/Sub 主题,或者多个数据存储区可以共享同一主题。
指定 Pub/Sub 主题时,请使用以下格式:
projects/PROJECT_ID/topics/TOPIC_NAME
PROJECT_ID
是您的 Google Cloud 项目 ID,TOPIC_NAME
是 Pub/Sub 主题的名称。
将 HL7v2 消息导出到 Pub/Sub
默认情况下,系统会导出 HL7v2 存储区中的所有 HL7v2 消息。 如需导出 HL7v2 消息的子集,您可以使用过滤条件以仅导出与过滤条件匹配的消息。 如需了解详情,请参阅指定过滤条件。
curl
如需将 HL7v2 消息导出到 Pub/Sub,请发出 POST
请求并指定以下信息:
- 父数据集的名称
- HL7v2 存储区的名称
- 目标 Pub/Sub 主题
以下示例展示了使用 curl
的 POST
请求。
curl -X POST \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ --data "{ 'pubsubDestination': { 'pubsubTopic': 'projects/PROJECT_ID/topics/PUBSUB_TOPIC' } }" "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_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.hl7v2.Hl7V2Service.ExportMessages", "createTime": "CREATE_TIME", "endTime": "END_TIME", "counter": { "success": "RESOURCE_COUNT" } }, "done": true, "response": { "@type": "type.googleapis.com/google.cloud.healthcare.v1.hl7v2.ExportMessagesResponse" } }
指定过滤条件
如需导出 HL7v2 消息的子集,您可以使用过滤条件仅导出与过滤条件匹配的消息。
有效的过滤条件参数包括:
message_type
:来自 MSH.9.1 字段。例如NOT message_type = "ADT"
。send_date
:消息从 MSH.7 细分中发送的YYYY-MM-DD
日期,以数据集的时区指定。例如send_date < "2017-01-02"
。send_time
:发送消息时的时间戳。此参数来自消息的 MSH.7 片段。此参数使用 RFC 3339 时间格式进行比较。例如send_time < "2017-01-02T00:00:00-05:00"
。create_time
:在 Cloud Healthcare API 中创建消息的时间戳,使用 RFC 3339 时间格式进行比较。例如:create_time < "2017-01-02T00:00:00-05:00"
。send_facility
:消息的护理中心,来自 MSH.4 细分。例如send_facility = "ABC"
。startTime
:时间范围的开始时间,以send_time
参数的形式指定,在此期间会发送 HL7v2 消息。如需了解详情,请参阅startTime
。endTime
:一个时间范围的结束时间,以send_time
参数的形式指定,在此期间会发送 HL7v2 消息。如需了解详情,请参阅endTime
。
您可以使用这些术语指定任何过滤条件。如需了解如何指定过滤器语法和构建查询,请参阅查询字符串。
以下示例展示了如何指定与 ADT
类型的消息匹配的过滤器。
curl
curl -X POST \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ --data "{ 'pubsubDestination': { 'pubsubTopic': 'projects/PROJECT_ID/topics/PUBSUB_TOPIC' }, 'filter': 'message_type = \"ADT\"' }" "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID:export"
查看 Pub/Sub 中导出的 HL7v2 消息
如需在 Pub/Sub 中查看导出的 HL7v2 消息,请运行 gcloud pubsub subscriptions pull
命令。该命令使用 --format=json
标志以 JSON 格式返回输出结果,而非默认的 YAML。
gcloud pubsub subscriptions pull --auto-ack projects/PROJECT_ID/subscriptions/PUBSUB_SUBSCRIPTION \ --format=json
PROJECT_ID
是您的 Google Cloud 项目的 IDPUBSUB_SUBSCRIPTION
是附加到导出 HL7v2 消息的 Pub/Sub 主题的订阅
输出如下所示:
[ { "ackId": "ACK_ID", "message": { "attributes": { "msgType": "TYPE" }, "data": "DATA", "messageId": "8076570784126536", "publishTime": "YYYY-MM-DDTHH:MM:SS+ZZ:ZZ" } } ]