集成平台、ETL、数据抽取
在集成平台建设中,我们经常会遇到许多数据整合、同步或者上报等场景,比如:
- 如何从HIS、LIS、EMR等临床系统抽取数据到CDR中,实现基于CDR的患者360°视图;
- 如何整合下属医疗机构的信息,在区域层面上形成EHR电子健康档案;
- 慢病管理服务中,如何实现对患者的核心指标数据监测、随访等消息的抽取与汇总;
.....
这些场景会用到数据交换技术之一的ETL方式来实现,同时这种方式许多厂商也会作为集成平台整体架构中数据交换层的核心中间件。 在ETL技术应用中,往往会遇到各种数据源(数据库、文件、流媒体等),数据量是少量也可能是海量。 数据如何抽取、怎样抽取在ELT中是最多讨论和关心的,本文就集成平台在医疗行业实现ETL,尤其是数据抽取的方式和优劣势进行探讨。
ETL:我们只是数据的搬运工
ETL是Extract (抽取),Transform (转换) 和Load (加载) 这三个过程的简写, 简单来说ETL的目的就是将数据从源数据库搬运至目标数据库。 抽取(Extract)就是找出需要搬运的数据并进行抽取; 转换(transform)就是调整抽取的源数据格式使它满足搬运目标数据库的标准; 加载(Load)则是将数据载入目标数据库。
集成平台在医疗行业
实现ETL中数据抽取的常见方式
1. 技术对接方式:
1.1视图/快照方式---由于时常会遇到集成平台从医院的第三方系统进行抽取,为保证数据安全性,通常会以视图/快照的方式生成一个源数据库的本地副本,该副本是只读文件不能进行编辑修改,但可以读取视图中数据进行数据抽取,通常采用全量或增量的抽取方式。
优点: 对数据库的侵入性低,无需调整原有数据库的架构,实现上简单容易,实现难度低周期短。
缺点: 实时性较低,需抽取端不停的轮训,增加IO压力,另外对于增量数据的判断需要有特定字段(自增列、时间等)。
1.2 操作日志---需要源数据库生成数据完毕之后,在外部生成日志。 数据抽取时通过检查源系统的执行日志找出数据增删查改的痕迹进行抽取作业,通常采用增量抽取方式。
优点: 能实时实现数据的获取,无需判断增量的特定字段。
缺点: 影响原有数据库性能,需调整数据库架构,实现难度大周期长。
1.3 改造成接口---对源系统接口进行改造,能让系统在对数据进行增删改等操作时通过程序接口主动同步发送数据至目标库,发送数据的动作可以跟业务修改数据动作脱耦,独立发送,通常采用增量抽取方式
优点: 对原系统没有压力和影响,实时性好,可靠度高,可控性更强,灵活度好。
缺点: 需改造原系统,有一定的改造工作量,周期较长。
建议:
集成平台中ETL应根据不同系统灵活切换不同的对接方式,医院原有系统可采用非侵入或侵入性较小的视图或快照方式进行数据抽取,保证系统的安全运转; 新系统可采用改造接口方式,提升数据抽取的效率和可靠性。
各类数据抽取方式优劣图一览
2. 数据传输方式:
2.1批量抽取:
即一批批抽取数据,医院的数据上报场景通常就会采用批量抽取方式。 在该场景下,医院会在程序中设置一个数据已加载完毕同时对源数据库压力较小的时间(如每日凌晨2点),时间一到自动发起抽取,通常采用增量或全量抽取方式。
然而,随着医院数据量的越来越大,单纯在夜间进行批量抽取,时间上已慢慢变得捉襟见肘,甚至会出现医院第二天开始日常工作了前一天的数据仍然没有抽取完毕的窘境。
2.2 流式数据抽取:
通过轮询方式实现的小批量多次抽取,且可以实现不间断抽取,用于实时性要求较高的场景,例如医院新老系统交替时日常业务的数据同步。 数据及时性可以通过轮询时间的间隔进行调整,大大提高了数据同步的实时性,但并未达到完全的实时抽取。
2.3 通过消息格式主动推送:
该方式并非由ETL工具进行数据的搬运而是让源系统在每次进行数据的更新后主动将更新的部分推送给目标数据库。 此类数据同步过程并不是由数据抽取的形式达成,但仍可以达成源数据库与目标数据库的数据同步,是实时性最高的一种数据传输方式。 不过缺点就是多数医院的老旧系统不支持,需要进行系统改造才能实现。
建议:
需要根据不同场景需求灵活使用不同的数据抽取方式,大部分数据建议采用流式抽取,能兼顾数据抽取的实时性和抽取效率,对于小量但实时性要求高的数据则通过消息格式主动推送,达到实时同步。
3. 增量数据抽取的核心难点
在增量数据抽取的过程中,主要的难点就是去判断数据源中哪些数据需要搬运,以下将会分析三种较为常见的解决办法以及其对应的优缺点和局限性。
3.1 有判定标识或能添加判定标识: 即通过判定标识以确认该数据是否已被抽取
该方式最易操作且最有效,但局限性较大。 需要实施人员有权限对原表进行增删查改。 如果遇到从第三方系统进行数据抽取,出于数据安全等因素考虑很多时候只能通过视图方式抽取,那该方法就不能实现。
3.2 有时间戳或序号标识: 根据最后更新时间或主键序号,确认每次需要搬运的数据
这种情况下由于增量数据仅关注新出现的时间或序列号,对于已搬运的数据被删除无法识别,也无法区分数据的插入和更新。 因此在这种场景下,需要重起一行描述该数据的删除、插入或更新的操作,以便让ETL工具进行识别或抽取。
3.3 只有数据没有任何标识: 这种情况最为常见,而且由于没有任何标识作为锚点,无法直接从视图/快照中找出需要搬运的数据。 此时的解决办法如下:
- 直接全量抽取/全表对比: 易于实现,方法简单粗暴,但每次操作的数据量会越来越大,对系统性能的压力大。
- CDC(Change Data Capture变化数据捕获): 通过读取日志文件找出发生变化的数据进行抽取,市面上的主流数据库(Oracle、SQL Server)都会支持CDC功能,但需要额外购买功能模块---对数据库有侵入性和架构影响(技术上想平衡好性能和数据捕获的准确性要求较高)
ETL中的转换(Transform)
以上是对ETL中的“E”做了较为详细的剖析。 当然,除了数据抽取之外,ETL中的“T”也备受关注,不论是实际项目需求还是互联互通测评要求,都需要标准之间的转换处理,数据交换系统是否能够更好的支撑ETL中的Transform也需要考虑。 目前各厂商有自己的数据结构和产品标准,国际上有HL7 v2、v3、FHIR等,国内有互联互通2020 (HL7 CDA),引擎对于对于标准的建模、存储、使用以及转换等能力,也越来越被重视。
HL7 v2.x 标准协议示例
因此,引擎不仅需要支持上述行业协议标准,还需要提供模板工具和数据转换工具等功能,帮助医院减少开发成本、降低学习门槛、提高数据转换效率。
集成平台仅使用ETL够用了么?
医疗卫生机构仅用ETL已无法满足各种复杂的数据处理和交换场景,有些复杂场景需要完成一个完整业务,需要对接不同协议和技术的第三方应用,会使用到ESB、API、MQ等其他数据交换技术。 因此在考虑集成平台建设时除了具备ETL能力外,还更应该考虑多种数据交换技术使用的综合能力。
应用场景举例: 非税电子发票开票项目
场景描述:
非税电子发票开票项目服务流程包括: 从各院区数据库中抽取开票信息,访问系统API,将开票记录结果返回给对应的数据库。
场景技术需求分析:
在这个场景中,前半段开票信息抽取业务适合通过ETL实现,开票过程中调用接口的动作适合通过APIs实现,而后半段电子发票处理结果的分发和处理业务适合通过ESB实现。 在处理这个业务场景时,需要ETL、ESB和APIs根据具体的业务要求协同使用。
多院区非税电子发票开票业务场景示意图
那么数据交换除了ETL技术外还有更好的方式和实现思路么?
——答案来了,有的
在不久前的HL7新西兰年中会议,特别将一项名为ALEX(Application Layer EXchange)的项目列入专题。 ALEX的特别之处在于能基于FHIR API直接对接应用层实现端到端互联。 ALEX解决方案涵盖了新西兰 90% 以上的初级医疗数据,允许诊所通过ALEX平台的FHIR API与第三方(包括应用程序、全科医生、患者、保险公司等)安全共享实时医疗数据和记录。 该方式既保证了数据同步的安全性和实时性,同时对源系统也不会产生影响,以后我们也会对ALEX项目进行详细的描述,敬请期待。
Odin文章评论: