使用 Cloud Storage 导入和导出 HL7v2 消息

本页面介绍如何使用 projects.locations.datasets.hl7V2Stores.importprojects.locations.datasets.hl7V2Stores.export方法从 Cloud Storage 导出和导入 HL7v2 消息。

您可以从 Cloud Storage 导入 HL7v2 消息,以便更轻松地将多条 HL7v2 消息批量加载到 HL7v2 存储区中。您可以一次将多条 HL7v2 消息导出到 Cloud Storage,而不必单独将其存储在 Cloud Storage 中。

设置 Cloud Storage 权限

在向 Cloud Storage 导入和导出 HL7v2 消息之前,您必须向 Cloud Healthcare Service Agent 服务帐号授予额外权限。如需了解详情,请参阅 HL7v2 存储区 Cloud Storage 权限

导入 HL7v2 消息

要导入 HL7v2 消息,您必须先在 Cloud Storage 中创建包含一条或多条消息并以换行符分隔的一个或多个 JSON (.ndjson) 文件。文件的每一行都是一个 Message 资源,其中包含一条 base64 编码的 HL7v2 消息。Message 资源还可以包含可选标签。

例如,以下名为 messages.ndjson 的文件包含两条 HL7v2 消息。第二条消息中定义了一个标签。

{"data" :"TVNIfF5+XCZ8QXxTRU5EX0ZBQ0lMSVRZXzF8QXxBfDIwMTgwMTAxMDAwMDAwfHxUWVBFXkF8MjAxODAxMDEwMDAwMDB8VHwwLjB8fHxBQXx8MDB8QVNDSUkNRVZOfEEwMHwyMDE4MDEwMTA0MDAwMA1QSUR8fDE0ATExMV5eXl5NUk58MTExMTExMTFeXl5eTVJOfjExMTExMTExMTFeXl5eT1JHTk1CUg=="}
{"data" :"TVNIfF5+XCZ8QXxTRU5EX0ZBQ0lMSVRZXzJ8QXxBfDIwMTgwMTAxMDAwMDAwfHxUWVBFXkF8MjAxODAxMDEwMDAwMDB8VHwwLjB8fHxBQXx8MDB8QVNDSUkNRVZOfEEwMHwyMDE4MDEwMTA0MDAwMA1QSUR8fDE0ATExMV5eXl5NUk58MTExMTExMTFeXl5eTVJOfjExMTExMTExMTFeXl5eT1JHTk1CUg==","labels":{"foo":"bar"}}

控制台

要从 Cloud Storage 存储桶导入 HL7v2 消息,请完成以下步骤:

  1. 在 Google Cloud 控制台中,进入数据集页面。

    前往“数据集”页面

  2. 单击包含要向其导入 HL7v2 消息的 HL7v2 存储的数据集。

  3. 在数据存储区列表中,从 HL7v2 存储区的操作列表中选择导入

    系统会显示导入 HL7v2 存储区页面。

  4. 项目列表中,选择一个 Cloud Storage 项目。

  5. 位置列表中,选择一个 Cloud Storage 存储桶。

  6. 要设置导入文件的特定位置,请执行以下操作:

    1. 展开高级选项
    2. 选择替换 Cloud Storage 路径
    3. 要设置特定的文件导入来源,请在位置文本框中定义路径。您可以使用通配符从一个或多个目录中导入多个文件。如需详细了解对象命名,请参阅对象命名指南

      支持以下通配符:
      • 使用 * 可以匹配零个或更多的非分隔符字符。例如,gs://BUCKET/DIRECTORY/Example*.ndjson 匹配 DIRECTORY 中的 Example.ndjson 和 Example22.ndjson。
      • 使用 ** 匹配 0 个或多个字符(包括分隔符)。必须在路径末尾使用,且路径中没有其他通配符。也可以与扩展名(如.ndjson)一起使用,该扩展名会导入指定目录及其子目录中扩展名中的所有文件。例如,gs://BUCKET/DIRECTORY/**.ndjson 会导入 DIRECTORY 及其子目录中扩展名为.ndjson 文件名的所有文件。
      • 使用 ? 可以匹配 1 个字符。例如,gs://BUCKET/DIRECTORY/Example?.ndjson 匹配 Example1.ndjson,但不匹配 Example.ndjson 或 Example01.ndjson。
  7. 点击导入,从定义的来源导入 HL7v2 消息。

  8. 要跟踪操作的状态,请点击操作标签页。操作完成后,系统会显示以下指示:
    • 长时间运行的操作状态部分下方的确定标题下会显示一个绿色的对勾标记。
    • 概览部分在操作 ID 的同一行中显示一个绿色对勾标记和一个确定指示符。
    如果您遇到任何错误,请点击操作,然后点击在 Cloud Logging 中查看详细信息

API

以下示例展示了如何使用 projects.locations.datasets.hl7V2Stores.import 方法从 Cloud Storage 导入 HL7v2 消息。

在调用导入操作时,请注意以下事项:

  • 文件在存储桶中的位置是任意的,无需严格遵循以下示例中指定的格式。
  • 指定 HL7v2 消息在 Cloud Storage 中的位置时,您可以使用通配符从一个或多个目录中导入多个文件。 支持以下通配符:
    • 使用 * 可以匹配零个或更多的非分隔符字符。例如,gs://BUCKET/DIRECTORY/Example*.ndjson 匹配 DIRECTORY 中的 Example.ndjson 和 Example22.ndjson。
    • 使用 ** 匹配 0 个或多个字符(包括分隔符)。必须在路径末尾使用,且路径中没有其他通配符。也可以与扩展名(如.ndjson)一起使用,该扩展名会导入指定目录及其子目录中扩展名中的所有文件。例如,gs://BUCKET/DIRECTORY/**.ndjson 会导入 DIRECTORY 及其子目录中扩展名为.ndjson 文件名的所有文件。
    • 使用 ? 可以匹配 1 个字符。例如,gs://BUCKET/DIRECTORY/Example?.ndjson 匹配 Example1.ndjson,但不匹配 Example.ndjson 或 Example01.ndjson。

curl

要将 HL7v2 消息导入 HL7v2 存储区,请发出 POST 请求并指定以下信息:

  • 父数据集的名称
  • HL7v2 存储区的名称
  • 对象在 Cloud Storage 存储桶中的位置
  • 访问令牌

以下示例展示了如何使用 curl 通过 POST 请求导入单个文件。

curl -X POST \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    --data "{
      'gcsSource': {
        'uri': 'gs://BUCKET/DIRECTORY/HL7V2_MESSAGE_FILE'
      }
    }" "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID:import"

如果请求成功,服务器将以 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.ImportMessages",
    "createTime": "CREATE_TIME",
    "endTime": "END_TIME"
  },
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.cloud.healthcare.v1.hl7v2.ImportMessagesResponse"
  }
}

PowerShell

要将 HL7v2 消息导入 HL7v2 存储区,请发出 POST 请求并指定以下信息:

  • 父数据集的名称
  • HL7v2 存储区的名称
  • 对象在 Cloud Storage 存储桶中的位置
  • 访问令牌

以下示例展示了如何在 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 "{
    'gcsSource': {
      'uri': 'gs://BUCKET/DIRECTORY/HL7V2_MESSAGE_FILE'
    }
  }" `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID:import" | 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.hl7v2.Hl7V2Service.ImportMessages",
    "createTime": "CREATE_TIME",
    "endTime": "END_TIME"
  },
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.cloud.healthcare.v1.hl7v2.ImportMessagesResponse"
  }
}

导出 HL7v2 消息

从 HL7v2 存储区导出 HL7v2 消息时,将导出 HL7v2 存储区中的所有消息。如需仅导出一部分消息,您可以定义 startTimeendTime 参数以仅包括在定义的时间范围内发送的消息。如需仅导出 Message 资源的特定部分,请设置 MessageView

导出消息时,Cloud Healthcare API 会为每个 HL7v2 消息创建一个对象。每个对象由一个 .ndjson 文件组成,文件中的每一行包含一个 Message 资源。消息按照 sendTime (MSH.7) 的升序导出。

控制台

要将 HL7v2 消息导出到 Cloud Storage,请完成以下步骤:

  1. 在 Google Cloud 控制台中,进入数据集页面。

    前往“数据集”页面

  2. 单击包含要从中导出 HL7v2 消息的 HL7v2 存储的数据集。

  3. 在数据存储区列表中,从 HL7v2 存储区的操作列表选择导出

    系统会显示导出 HL7v2 消息页面。

  4. 项目列表中,选择一个 Cloud Storage 项目。

  5. 位置列表中,选择一个 Cloud Storage 存储桶。

  6. 点击导出,将 HL7v2 实例导出到 Cloud Storage 中的指定位置。

  7. 要跟踪操作的状态,请点击操作标签页。操作完成后,系统会显示以下指示:
    • 长时间运行的操作状态部分下方的确定标题下会显示一个绿色的对勾标记。
    • 概览部分在操作 ID 的同一行中显示一个绿色对勾标记和一个确定指示符。
    如果您遇到任何错误,请点击操作,然后点击在 Cloud Logging 中查看详细信息

API

以下示例展示了如何使用 projects.locations.datasets.hl7V2Stores.messages.export 方法将 HL7v2 消息导出到 Cloud Storage。

调用导出操作时,请注意以下事项:

  • 向 Cloud Storage 存储桶或目录(而不是对象)写入数据,因为当有许多消息时,Cloud Healthcare API 可能会创建多个以换行符分隔的 JSON 文件。在每个 JSON 文件中,每行都是一个 HL7v2 消息。
  • 如果该命令指定的目录不存在,则会创建该目录。

curl

要导出 HL7v2 消息,请发出 POST 请求并指定以下信息:

  • 父数据集的名称
  • HL7v2 存储区的名称
  • 目标 Cloud Storage 存储桶或目录
  • 访问令牌

以下示例展示了使用 curlPOST 请求。

curl -X POST \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    --data "{
      'gcsDestination': {
        'uriPrefix': 'gs://BUCKET/DIRECTORY'
      }
    }" "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"
  }
}

PowerShell

要导出 HL7v2 消息,请发出 POST 请求并指定以下信息:

  • 父数据集的名称
  • HL7v2 存储区的名称
  • 目标 Cloud Storage 存储桶或目录
  • 访问令牌

以下示例展示了使用 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 "{
    'gcsDestination': {
      'uriPrefix': 'gs://BUCKET/DIRECTORY'
    }
  }" `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_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.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 导入和导出请求进行问题排查

如果在 HL7v2 导入或导出请求期间发生错误,系统会将错误记录到 Cloud Logging。如需了解详情,请参阅在 Cloud Logging 中查看错误日志

如果操作返回错误,请参阅排查长时间运行的操作的问题