Databricks

Introducing Funke: Native HL7v2 Parsing on Databricks

8.5内容质量

TL;DR · AI 摘要

Databricks推出Funke,原生解析HL7v2医疗消息为Spark数据结构,无需FHIR转换或第三方工具。

核心要点

  • Funke使用Python/PySpark重写,集成Unity Catalog和Spark Declarative Pipelines
  • 直接解析HL7v2消息保留完整层级结构,避免数据丢失
  • 开源附带演示,可5分钟构建HL7数据管道

结构提纲

按章节快速跳转。

  1. §HL7v2在医疗数据中的挑战

    解释HL7v2消息结构复杂性及传统处理方案的缺陷

  2. ·Funke架构解析

    展示如何将HL7v2直接转换为Spark原生数据结构

  3. ›与Smolder的对比

    说明Funke在现代Databricks平台上的改进

  4. 强调开源、集成现代平台功能和快速部署能力

思维导图

用一张图看清主题之间的关系。

查看大纲文本(无障碍 / 无 JS 友好)
  • Funke: HL7v2解析
    • 架构优势
      • 原生Spark类型转换
      • 保留完整层级结构
    • 特性
      • 开源
      • 集成Unity Catalog
      • 快速部署
    • 对比Smolder
      • Python/PySpark重写
      • 现代平台兼容性

金句 / Highlights

值得收藏与分享的关键句。

#HL7v2#Databricks#Spark#开源#医疗数据
打开原文

介绍 Funke:在 Databricks 上原生解析 HL7v2 | Databricks 博客

跳至主要内容

医疗健康与生命科学

2026年10月8日

介绍 Funke:在 Databricks 上原生解析 HL7v2

一个开源加速器,可将原始 HL7v2 消息直接转换为可查询的原生 Spark 数据,无需 FHIR 转换或第三方扁平化处理。

作者:Sean Fischer、Chris Mantz 和 Andy Launchbury

摘要

  • Funke 在 Databricks Lakehouse 上直接将 HL7v2 电子健康记录消息解析为原生 Spark 类型,完整保留原始消息的完整段、字段、组件和子组件层次结构。
  • 它是 2021 年我们推出的 Scala 库 Smolder 的继任者,基于 Unity Catalog、声明式自动化捆绑包和 Spark 声明式管道,使用 Python 和 PySpark 重写。
  • Funke 是开源的,并附带可运行的演示,因此您可以在几分钟内搭建端到端的 HL7 吞吐管道,并探索解析后的临床数据。

Lakehouse 中的 HL7v2 问题

HL7v2 是在医疗保健领域默默运行的消息标准。它用于临床系统之间传递信息,例如通知患者入院、实验室订单已下达或检测结果已返回。自几十年前引入以来,它仍然是行业中部署最广泛的标准,绝大多数医疗机构仍依赖它进行日常运营数据流。

但它也难以处理。HL7v2 消息是一种嵌套的分隔符编码结构:由字段组成的段、由组件和重复项组成的字段、由子组件组成的组件,所有内容均由消息标题中声明的一小组特殊字符分隔。规范允许一定的灵活性,因此实际消息会因发送系统而异。

当团队希望以现代格式使用这些数据时,通常会采用两种变通方法。他们首先将所有内容转换为 FHIR,这会增加一个翻译层并可能丢失没有清晰 FHIR 等效项的细节。或者他们将消息交给第三方引擎进行扁平化处理,这意味着要支付另一家供应商的费用、将数据移出平台,并失去对底层粒度结构的直接访问。这两种方法都会增加成本、增加延迟,并使您与临床数据之间产生距离。

Funke 与 Smolder 的理念一致,即 HL7 作为湖仓数据的一等公民。但 Funke 的实现方式是全新的。

使 Funke 独特的特性

Funke 可直接将 HL7v2 消息解析为原生 Spark 类型,并完整保留原始层级结构。该解析过程设计为无损,目标是在整个数据管道中尽可能保留原始结构。

解析后的消息被建模为从段名映射到该段重复次数的映射表。每个字段本身也是一个映射表,可通过字段编号、重复次数、组件和子组件进行访问。用 Spark 术语表示:

$

/$

由于解析后的消息是标准的 Spark 列,所有元素都可以通过普通的 DataFrame 或 SQL 表达式访问,解析器会为您处理 HL7 编码规则:MSH 头部声明的字段、组件、重复次数和子组件分隔符,以及标准转义序列。Funke 支持所有 HL7 消息类型和版本,因此相同的管道可以处理健康系统通常接收到的各种版本消息。

因此,您的原始临床数据可以以完整保真度进入湖仓,由 Unity Catalog 管理,随时可供查询。您可以决定哪些字段对特定用例重要,而不是被动接受转换器或供应商为您选择的结构。

工作原理:摄取管道

Funke 作为遵循勋章模式的声明式管道进行部署。它定义两个表,您可以在其基础上构建自己的金表。

图1:Databricks 湖仓上的 Funke 数据流

从原始到青铜层。新的 HL7 文件到达 Unity Catalog 卷。Auto Loader 会自动获取这些文件,解码内容,并将它们连同摄取元数据(包括用于跟踪消息通过管道的 MD5 哈希、插入时间戳和消息 ID)写入 raw_messages 表。

从青铜到白银层。parsed_messages 表读取原始流并应用 Funke 解析器,添加一个如上所示的原生类型 hl7 列。这是非结构化消息文本转化为结构化、可查询数据的阶段。

从原始消息到金表

由于 hl7 列是原生 Spark 数据,您可以直接通过段、字段、重复次数、组件和子组件定位任何元素:

同样的提取方法在 Spark SQL 中同样适用,因此即使从未接触过 Python 的分析师也可以直接构建金表和视图:

位置索引链精确但难以在开发数月后理解。为此 Funke 提供了访问器辅助工具,帮助开发者清晰提取内容。get_value 方法接收段、重复次数、字段、字段重复次数、组件和子组件参数,并返回作为列的值:

还有更高层次的辅助工具,包括 get_segment、get_field、get_component、get_subcomponent,以及一个 parse_hl7_version 辅助工具,可直接从 MSH 头部读取版本信息。您可以根据查询需求选择合适的抽象层次。

端到端演示

Funke 配备了演示功能,您无需连接实时 EHR 数据流即可观看整个流程。它包含一个合成的 ADT 事件生成器,可模拟跨多个设施的入院、转科和出院事件,以及一个基于 Databricks Apps 构建的控制室应用,可启动和停止事件流,并追踪消息从原始文本到解析结构再到金表的全过程。

该演示的黄金层本身就是一个可运行的示例。它将解析后的ADT流转换为adt_events历史表,然后通过基于访问编号的变更数据捕获,维护一个实时的current_census表,使得出院事件能够将患者从在册名单中移除并释放病床。bed_utilization表将实时在册数据与设施容量进行关联,展示各单元已占用与可用病床数量,从而为仪表板提供数据支持。这是从原始HL7消息到医院实际监控的操作指标的具体实例。

入门指南

Funke是Databricks行业解决方案加速器,以资产包形式部署:

  • 将仓库克隆到您的Databricks工作区。
  • 在DAB编辑器中打开目录并点击部署。部署过程将构建funke库并为您配置流水线、Unity Catalog架构和落地卷。
  • 将HL7消息上传到创建的落地卷。
  • 点击运行HL7摄取流水线。

如果您更倾向于使用命令行,可通过Databricks CLI执行相同部署:

Funke是什么,以及它不是什么

Funke是一个解析器和摄取加速器。它为您提供原生、受管、可查询的湖仓数据形式的HL7v2消息,并为您提供将这些消息转换为业务用例所需黄金表的清晰模式。它不是接口引擎,也不会替代正确解读这些消息所需的临床和HL7专业知识。从段落和字段到业务概念的映射是您基于自身领域知识做出的决策。Funke的任务是确保当您做出该决策时,数据已就绪、完整且易于获取。

立即体验

Funke基于Databricks许可证开源。探索代码、运行演示,并通过反馈或建议提交问题:

https://github.com/databricks-industry-solutions/funke-hl7v2

演示中使用的测试消息来自HL7 v2-to-FHIR项目。

订阅最新文章

订阅我们的博客,获取最新文章发送至您的邮箱。

立即注册

查看所有博客

slice-start id="_gatsby-scripts-1"

slice-end id="_gatsby-scripts-1"