B 、数据量的准确性 —— 使用 ETL 工具的质量监控工具就那么准么?我可遇到过不准的情况哦。
C 、discard 的数据怎么重新能够加载回目的数据库中( ETL 已经完毕了,并不是所有的数据能够重新加载进取的)。
不知对不,偶想也不只一种方法吧,望 LZ 给予指正!
A 、如果数据源比较多而且字符集都不一样的话,字符集的转换的确是比较麻烦的,不过我想如果能够保证目标数据库的字符集是其它源数据库字符集的超集,或者是大部分源数据库字符集的超集,我想这样的麻烦可以减少很多。
B 、如果 ETL 处理的表比较多,那么除了用监控工具之外,我想不到有什么其它好的方法,或者可以写写过程之类的,让它定期运行,获取你关心的一些数据指标。
C 、 ETL 已经完毕了,并不是所有的数据能够重新加载进取的?这个我不是很明白为什么不能重新加载进取?
D 、这一点的话楼上的建议也不错,我们现在一般不到生产库抽取数据,数据都是在备机上取的,因为直接到生产库抽数据会影响到正常的业务办理,这种方式不是很好。不过如果没有备机的话,那也只能从生产机上取了,不过不是很明白为什么不能抽到昨天的业务数据?如果要保证抽到昨天的业务数据,既然技术上实现不了,那只能通过别的途径了,是否可能跟客户谈谈,改变这种方式?
E 、这个也是个问题,有时我们只能引导客户。
这个问题看起来很简单,但是却包含很多内容:
B 、数据量的准确性 —— 使用 ETL 工具的质量监控工具就那么准么?我可遇到过不准的情况哦。
-- 这个很难,我建议在不符合标准的数据上做个记号,全部写入到数据仓库中
C 、 discard 的数据怎么重新能够加载回目的数据库中( ETL 已经完毕了,并不是所有的数据能够重新加载进取的)。
-- 通上,不符合条件数据的维度值给以一些缺省值,一般情况下流水作业很难重新补登再入库的
D 、 ETL 一般都是在晚上生产库结束后进行的,如果第二天发现 ETL 数据不对,怎么保证还能够抽取到昨天的业务数据?做个好的脚本,只负责删除和处理某个时间段的数据
进行运算的过程( ETL 抽取的时提供的可是技术元数据,客户所关心的可是业务员数据)?
自己理解后,做好元数据维护和释义
就说两个吧 c, 不符合条件数据的维度 -- 很多时候不符合条件的是五花八门的,什么情况都可能,所以无法预先知道哪些是不符合条件的,
d, 不是所有数据只是插入操作,在业务系统中更新操作的数据很多,而且不是所有都有时间字段的, 具体问题还是要具体分析 ITPUB个人空间1P�gEw1ye`
很多时候理论上是如此,事实却是另一面,这就是为什么有很多好的数据仓库方面的书籍而难有很好的数据仓库的实际项目
D, 一般情况下,业务系统会有一个时间戳,从昨天的时间戳重新抽取。
E, 在每一步的计算机中尽可能保留多的小数据位数据,不进行四舍五入
回复:呵呵,如果用户可以接受的话,我一般把 ETL 执行安排在第二天的凌晨开始,从第二天凌晨开始抽取第一天的数据。
E 、一个指标的计算是经过多层次的抽取后完成的,怎么保证在抽取的过程中数值精度不丢失?怎么让业务人员理解其指标进行运算的过程( ETL 抽取的时提供的可是技术元数据,客户所关心的可是业务员数据)?
回复:我认为在 ETL 的过程中不对数值型数据据进行四舍五入操作,可有效防止数据精度不丢失,至于客户想看到多少位的精度,我们可以在前端展现中对数据进行格式化。为了让业务人员能更好的理解指标的运算过程,我们一般在展现层以文字或在线帮助的形式对可能会引起歧义的指标给出后台的计算公式,帮助用户更好的理解指标含义。
今天冒个泡说两句:
对于 A 问题字符集 bq_wang 说的是很贴切的,一般来说为了确保安全该使用字符集的超集合,对于 Oracle 数据库来说,是可以转换字符集的,也就是说不同种字符集之间 Oracle 会自动给你转换,这个部分抽时间我传个最近整理的字符集 ppt ,大家看看 就知道了,但是我们这里讨论的不仅仅是 Oracle 数据库,这个时候你就要同时考虑操作系统字符集、客户端字符集、数据库字符集甚至应用程序字符集的问题。而最关键的是要看你抽取的数据是否落地,并且在落地的同时有没有进行字符集的转换
例如:如果从一个字符集的操作系统中导出来数据,传输过程中几次落地,但是仅仅是落地存储,即使落地的操作系统、客户端的字符集再怎么相互不兼容,这也不会影响了源数据。一般来说都会在 ETL 前详细调查源的字符集以落地解析的字符集以及目的地的字符集,如果这个过程是字符集的子集以及超级的话那当然最好了,如果不是那么就要评估数据的损失量或者制定 ASCII 的转换机制,因为字符集说白了就是将 “ 字 ” 存储为 ASCII 码,而这个 ASCII 在另个字符集展现中是什么样子的问题。
B 数据量准确性问题,说实话至今好像还没有什么好的方法,因为 ETL 不是数据平移 ---- 用个 count 统计对比就能知道数据量是否正确,当一个指标是经过多次 join 、过滤、判断、计算以后就已经很难保证抽取过来的数据是否在量上是正确的,一般我这边采取的方法是定义抽样检测,得出一定的概率,这个概率就算是指标体系的一个误差了。
C bq_wang 和其他人说的都有道理,有些业务数据在当天做完 ETL 的 EOD 以后是没有办法再重新单独抽取的,在这种情况下要么 制定手工更改抽取的指标;要么启用前一天业务数据备份 ,再另一个环境下在人为的干预下重新跑一次该模块的 ETL 流程。而对于一些仅仅是静态平移、简单清洗的数据当然就不用这么麻烦了。
就是类似于 create table table_name_2008_1_5 as select * from .... ,一旦第二天发现抽取问题,还有昨天的静态数据源;而 对于流水性质的数据来说我们就可以不用做 tmp 表而在第二天还能重新抽取了,但是对于那种可以删除流水的业务系统就有点 变态了:
大家别仅仅就考虑我提出来的这 A--E 五个方面,可以集思广益,多谈谈大家在实际工作中遇到的问题。好了,今天就罗嗦到这里,欢迎大家来拍砖头。
A 、字符集的转换 —— 怎么将基于不同字符集的数据转换到目的数据库。
B 、数据量的准确性 —— 使用 ETL 工具的质量监控工具就那么准么?我可遇到过不准的情况哦。