一个有点长的前言…
最近在做一个政府项目,数据来源非常复杂:公安的,居委会的,发改委的…
如果以传统的方式,将接收到的数据直接放入一张表中,然后直接对这张表进行增删改查,那么就会涉及到一个问题:如果中途某一步骤时,发现数据有问题,那么如何判断到底是不是源头数据本身就有问题导致的?(其实主要是为了防止如果源头数据出了问题,我们要找到证据,否则只能打碎了牙往肚里咽)
基于这个原因,我们对数据库进行了物理分隔——分为ODS和DW两层,ODS存放源数据,DW存放我们真正在生产、测试等环境中使用的数据。
即比如从公安来了一条数据,姓名张三,年龄25,生日XXXX…,我们原封不动的放进ODS的人员表中,然后再将这些数据经过一些清洗(去重,根据业务去除无效数据等等的操作)后,放进DW中,如果要对某些人员的信息进行修改,则修改DW中的,ODS只是存放来源数据,而不会做任何修改。
以前清洗数据的操作,大多都是编写一些测试类,然后进行逻辑处理,这虽然也能达到效果,但测试类本身不好管理(很容易被误删,且等时间一长,哪怕有注释,重新读一遍