- 1、本文档共21页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
用HAWQ轻松取代传统数据仓库(八)——大表分区要点
用HAWQ轻松取代传统数据仓库(八) —— 大表分区
一、HAWQ中的分区表
与大多数关系数据库一样,HAWQ也支持分区表。这里所说的分区表是指HAWQ的内部分区表,外部分区表在后面“外部数据”篇讨论。在数据仓库应用中,事实表通常有非常多的记录,分区可以将这样的大表在逻辑上分为小的、更易管理的数据片段。HAWQ的优化器支持分区消除以提高查询性能。只要查询条件中可以使用分区键作为过滤条件,那么HAWQ只需要扫描满足查询条件的分区,而不必进行全表扫描。
分区并不改变表数据在segment间的物理分布。表的分布是物理的,无论是分区表还是非分区表,HAWQ都会在segment上物理地分布数据,并且并行处理查询。而表的分区是逻辑上的,HAWQ逻辑分隔大表以提高查询性能和数据仓库应用的可维护性。例如,将老的分区数据从数据仓库转储或移除,并建立新的数据分区等。HAWQ支持以下分区类型:
范围分区:基于数字范围分区,如日期、价格等。
列表分区:基于列表值分区,如销售区域、产品分类等。
两者混合的分区类型。
图1是一个混合类型分区表的例子,sales表以销售日期范围作为主分区,而以销售区域作为一个日期分区中的列表子分区键。注意,HAWQ并没提供类似Oracle的在线重定义功能,它只能使用CREATE TABLE命令创建分区表,而没有简单的命令能够将一个非分区表转化成分区表。最好在建表之前就规划好分区方式和维护方法,因为当一个非分区表已经存在大量数据后再改作分区表的操作,时间和空间消耗上都是很棘手的问题。
在CREATE TABLE命令中使用PARTITION BY或可选的SUBPARTITION BY子句建立分区。上级分区可以包含一个或多个下级分区。HAWQ内部创建上下级分区之间的层次关系。分区条件定义一个分区内可以包含的数据。在建立分区表时,HAWQ为每个分区条件创建一个唯一的CHECK约束,限制一个分区所能含有的数据,保证各个分区中数据的互斥性。查询优化器利用该CHECK约束,决定扫描哪些分区以满足查询谓词条件。
HAWQ在系统目录中存储分区的层次信息,因此插入到分区表中的行可以正确传递到子分区中。ALTER TABLE命令的PARTITION子句用于修改分区表结构。
在向分区表插入数据时,可以在INSERT命令中指定表的根分区或叶分区。如果数据对于指定的叶分区无效,将返回错误。INSERT命令不支持向非叶分区的子分区中插入数据。
二、确定分区策略
并不是所有表都适合分区,需要进行实测以保证所期望的性能提升。下面是一些通用的分区指南,如果对以下问题的大部分答案是肯定的,分区表对于提高性能是可行的数据库设计。否则,表不适合分区。
表是否足够大?按照一般的经验,至少千万记录以上的表才算大表。数据仓库中的事实表适合作为分区表。对于小于这个数量级的表通常不需要分区。因为系统管理与维护分区的开销会抵消掉分区带来的可见的性能优势。
性能是否不可接受?只有当实施了其它优化手段后,响应时间仍然不可接受时,再考虑使用分区。
查询谓词条件中是否包含适合的分区键?检查查询的WHERE子句中是否包含适合作为分区的条件。例如,如果大部分查询都通过日期检索数据,那么按照月或周做范围分区可能是有益的。
是否需要维护一个数据仓库的历史数据窗口?例如,组织中的数据仓库只需要保持过去12个月的数据,那么按月分区,就可以很容易地删除最老月份的分区,并向必威体育精装版的月分区中装载当前数据。
根据分区定义条件,是否每个分区的数据量比较平均?分区条件应尽可能使数据平均划分。如果每个分区包含基本相同的记录数,性能会有所提升。例如,将一个大表分成10个相等的分区,如果查询条件中带有分区键,那么理论上查询应该比非分区表快将近10倍。
使用分区还要注意以下问题。首先,不要创建多余的分区。太多的分区将会减慢管理和维护任务,如检查磁盘使用、集群扩展、释放剩余空间等。其次,只有在查询条件可以利用分区消除时,性能才会得到提升。否则,一个需要扫描所有分区的查询会比非分区表还慢。可以通过查看一个查询的执行计划(explain plan)确认是否用到了分区消除。最后是关于多级分区的问题。多级分区会使分区文件的数量快速增长。例如,如果一个表按日期和城市做分区,1000天的1000个城市的数据,就会形成100万个分区。假设表有100列,并且假设表使用面向列的物理存储格式,那么系统为此表需要管理1亿个文件。
三、创建分区表
如前所述,创建分区表需要定义分区键、分区类型、分区层次。下面是几个创建分区表的例子。
1. 定义日期范围分区表
在定义日期分区表时,可以考虑以可接受的细节粒
文档评论(0)