1:分区表

hive 分区表、桶表和外部表_hive

     图:创建分区表

hive 分区表、桶表和外部表_数据_02

      图:导入数据

hive 分区表、桶表和外部表_外部表_03

        图:在HDFS的显示信息

分区字段就是一个文件夹的标识

hive 分区表、桶表和外部表_外部表_04

     图:在多列上创建分区


hive 分区表、桶表和外部表_外部表_05

      图:导入数据

hive 分区表、桶表和外部表_数据_06

                 图:在多列上建立分区后在HDFS上形成的结构信息

把表中的大多数字段建立为分区字段,可行吗?分区不是越多越好,分区越多的话,加载数据的话必须注意分区,那么文件会被控制的非常小,Map的任务数量增多,

计算不一定会快。Hive限定了分区的数量。选用一些查询比较频繁的字段来建立分区,时间字段等。

查询比较频繁,并且不会有很多枚举值的字段,适合作为分区字段。分区字段就是虚拟列(virtual column)。

hive 分区表、桶表和外部表_字段_07

       图:查询结果,其中分区字段显示了出来,但是在数据文件中是不存在的,那么我们称它们为虚拟列。

不合理的地方,比如我们对一个网站的销售日志进行分析,我们根据ip地址的地区进行分区,那么有些地区如京广沪地区的ip会比较多,

造成数据分布的不平衡,有些文件中的数据多,有些文件中的数据少。

2:桶表

对立面的记录做一个hash计算,经过hash运算后,  然后对hash进行取模计算,比如mod 10,那么取模计算后,划分的每份的数据量是差不多的,

模的数据为桶,模10的话,那么就有10个桶,那么各个map进行计算的时间差不多,缺点:用业务字段来查询的话,没有什么效果。

进行表连接的时候查询数据方便;进行抽样查询时比较方便,按照桶表进行抽比较符合要求。


hive 分区表、桶表和外部表_字段_08

      图:创建桶表,并加载数据

hive 分区表、桶表和外部表_hive_09

                                                                                     图:分完桶后是三个文件


3:外部表

 外部表不对应HDFS的文件夹,但是在数据库中能够找到它。把数据表删了不会影响数据。

  

外部表和分区表用的比较多,用户在上传数据时早已根据某些字段对数据进行了划分。


hive 分区表、桶表和外部表_数据_10

       图:创建外部表并查询