我对分区的理解

作者:姜玲
2007/3/29 16:00:10
本文关键字: ttnn 2005年12期

随着ETL工作的深入,我对分区的理解逐渐发生着变化。在没有开始这个ETL项目之前,我一直认为分区是数据仓库优化的一项手段之一,并且在项目开始时,我也是和客户说在数据抽取到主题表后,也就是ETL过程结束后,配置数据展示的需求,也就是查询的需求,我再进行数据仓库的优化,包括分区、索引。客户也认为这样没什么不对的地方。
ETL结束了,根据查询的要求,我给主题表进行了分区,是range-list composite partition,与没有分区之前,查询的性能有了明显的提高,看上去也没什么不对的。

为什么要分区?一般都是因为表的数据量大,尤其是数据仓库的表,随着时间的推移数据量不断在膨胀。分区除了可以优化查询速度外,还带来了数据管理的好处。我们可以针对某一个分区的数据进行整理,包括数据的清洗,加载和更新,同时不能处理其他分区中的数据,这样可以节省大量的资源,包括增加和修改索引、约束、主外键时占用的资源消耗。

分区表是好,我却傻了!仔细分析,发现在实现ETL的过程中,有分区和没有分区实现的步骤有很多不同的地方!这意味着程序的大量修改,重新测试!还是不谈这些了:(
所以,现在看来:分区不光是优化的手段之一,也是在制定ETL策略中非常重要的一个环节。就好像设计一个大厦,先要弄清楚一共有几层,然后才可以设计上下水的管道。

一点小想法,还请各位指教!

还有一个更具体的问题:我现在是按照range-list来进行分区的,range是按照地区(共10个),list是按照月份(10年就120个月)。现在想想好像不太对,地区是固定的,月份是不断增加了。所以如果list中的月份不满足了,我就需要modify,增加一个subpartition,那么我所有的range分区都要加,这岂不是自找麻烦吗?如果反过来,range是按照月份,list是按照地区,因为地区是固定的,所以我只要加一个range分区就行了。对吗?这样两种不同的分区对查询会有什么影响呢?

还望各位多多指教,给出你们的经验啊:)

Range分区从理解上应该用具有连续值的字段来分,而List分区适用离散字段来分。前者如月份,后者如地区。这仅仅从理解上判断的,具体没有做过。可以介绍一下以前的做法。

分区确实对ETL影响甚大,因为牵涉到是否要循环地处理每个Job,如何处理错误恢复,一般来说,将分区字段当作参数传入每个Job是一种基本的设计。

以往我们有一种做法,设计出一个part字段,用它作为分区依据,它是其他实际分区字段的组合。

因为只有对于特别大的数据表才考虑按日期、月份分区,而对于大数据量都是采用按日期循环存放的。例如只存十二个月数据,即使和地市结合起来,比如有10个地市,那就有120个分区,那么Part字段的取值就有120种,可见这种都是List分区。当有新月份的数据进来,会将相应分区truncate掉,再行装载。

这有一定的好处,在于屏蔽掉了业务上的分区信息,例如是按照地市,还是按照月份分区。在ETL处理的时候,每个job的参数包含这个part就可,至于part是地市,还是月份,或是其他,在job中解析,显然这是个弱点。当然,也不能代替Range分区所擅长的。

关于这种做法,后来也没有细细评估其具体的优劣,如果有更好的方法,也希望有朋友一起探讨。


责编:姜玲
vsharing 微信扫一扫实时了解行业动态
portalart 微信扫一扫分享本文给好友
著作权声明:kaiyun体育官方人口 文章著作权分属kaiyun体育官方人口 、网友和合作伙伴,部分非原创文章作者信息可能有所缺失,如需补充或修改请与我们联系,工作人员会在1个工作日内配合处理。
畅享
首页
返回
顶部
×
畅享IT
    信息化规划
    IT总包
    供应商选型
    IT监理
    开发维护外包
    评估维权
客服电话
400-698-9918
Baidu
map