现在的位置: 首页 > 综合 > 正文

hive 分区表、桶表和外部表

2018年05月20日 ⁄ 综合 ⁄ 共 776字 ⁄ 字号 评论关闭

1:分区表

     图:创建分区表

      图:导入数据

        图:在HDFS的显示信息

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

     图:在多列上创建分区

      图:导入数据

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

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

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

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

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

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

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

2:桶表

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

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

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

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

                                                                                     图:分完桶后是三个文件

3:外部表

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

  

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

       图:创建外部表并查询

   

抱歉!评论已关闭.