將 HL7v2 訊息匯出至 Pub/Sub

本頁面說明如何使用 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:

啟用 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

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 訊息

您可以在篩選條件中使用下列欄位:

您可以在 filter 欄位中,將下列篩選器參數指定為篩選條件。如要瞭解篩選器語法及建構查詢,請參閱查詢字串

  • 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"

下列範例說明如何指定篩選條件,只匯出 ADT 類型的 HL7v2 訊息。

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 專案
  • PUBSUB_SUBSCRIPTION 是附加至 Pub/Sub 主題的訂閱項目,您已將 HL7v2 訊息匯出至該主題

輸出內容如下:

[
  {
    "ackId": "ACK_ID",
    "message": {
      "attributes": {
        "msgType": "TYPE"
      },
      "data": "DATA",
      "messageId": "8076570784126536",
      "publishTime": "YYYY-MM-DDTHH:MM:SS+ZZ:ZZ"
    }
  }
]