1:分区表
图:创建分区表
图:导入数据
图:在HDFS的显示信息
分区字段就是一个文件夹的标识
图:在多列上创建分区
图:导入数据
图:在多列上建立分区后在HDFS上形成的结构信息
把表中的大多数字段建立为分区字段,可行吗?分区不是越多越好,分区越多的话,加载数据的话必须注意分区,那么文件会被控制的非常小,Map的任务数量增多,
计算不一定会快。Hive限定了分区的数量。选用一些查询比较频繁的字段来建立分区,时间字段等。
查询比较频繁,并且不会有很多枚举值的字段,适合作为分区字段。分区字段就是虚拟列(virtual column)。
图:查询结果,其中分区字段显示了出来,但是在数据文件中是不存在的,那么我们称它们为虚拟列。
不合理的地方,比如我们对一个网站的销售日志进行分析,我们根据ip地址的地区进行分区,那么有些地区如京广沪地区的ip会比较多,
造成数据分布的不平衡,有些文件中的数据多,有些文件中的数据少。
2:桶表
对立面的记录做一个hash计算,经过hash运算后, 然后对hash进行取模计算,比如mod 10,那么取模计算后,划分的每份的数据量是差不多的,
模的数据为桶,模10的话,那么就有10个桶,那么各个map进行计算的时间差不多,缺点:用业务字段来查询的话,没有什么效果。
进行表连接的时候查询数据方便;进行抽样查询时比较方便,按照桶表进行抽比较符合要求。
图:创建桶表,并加载数据
图:分完桶后是三个文件
3:外部表
外部表不对应HDFS的文件夹,但是在数据库中能够找到它。把数据表删了不会影响数据。
外部表和分区表用的比较多,用户在上传数据时早已根据某些字段对数据进行了划分。
图:创建外部表并查询