项目中RAW、STG层及数据消费是什么?为何不直接加载数据到STG?
问题答复
一、RAW层、STG层及数据消费的定义
结合你描述的项目链路,各部分的定位如下:
- RAW层:属于原始贴源落地层,是FlatFile数据经过trim、round、日期格式转换等基础适配逻辑后,第一次写入DB2的落地表,数据和处理后的FlatFile内容完全对齐,无额外业务逻辑清洗,核心作用是忠实留存文件源的第一手入库数据,用于链路异常时的溯源核对。
- STG层:属于临时缓冲层,和同库的RAW层表结构完全一致,无字段级逻辑处理,是对接最终目标HANA DB加载的直接数据源。
- 数据消费:当前项目的数据消费链路为STG层的全量/增量数据直接同步到HANA DB,供上层的业务报表、数据分析、业务系统等下游场景调用。
二、分两层加载的必要性
拆分RAW、STG两层而不是直接写入STG,核心是为了保障链路稳定性和可维护性,主要原因如下:
- 容错兜底:如果直接向STG写入数据,一旦FlatFile入库逻辑出现异常(比如日期转换错误、字段超出长度截断、数值运算错误),会直接污染对接下游的缓冲数据,导致HANA加载出错。分层架构下,RAW层写入完成后可以先做数据校验(行数核对、空值率校验、格式规则校验等),校验通过后再同步到STG,就算校验不通过,仅需清空RAW层重跑文件入库任务即可,不会影响下游链路的正常运行。
- 事务原子性保障:文件入库和同步到STG是两个独立拆分的事务,避免半写问题。如果直接向STG写入的过程中程序中断、数据库异常,STG中会存在部分加载的脏数据,下游同步HANA时就会出现数据不全的问题。分层后只有RAW层全量加载、校验完成才会触发STG同步,保证STG内的数据永远是完整的可用版本。
- 需求扩展性强:如果后续需要新增其他数据消费场景(比如除HANA外需要同步到其他数仓、做原始数据审计等),可以直接基于RAW层开发,不需要修改STG对接HANA的现有链路,也不需要重复开发FlatFile入库的逻辑,降低了改造成本。
- 性能隔离:FlatFile入库过程会产生大量数据库IO、表锁等资源消耗,如果直接操作STG层,会和下游读取STG同步HANA的任务产生资源抢占,互相影响运行效率。分层后两个操作的资源消耗隔离,不会出现资源竞争的问题。
内容的提问来源于stack exchange,提问作者nithin
相关产品推荐
相关产品推荐

