当前位置: 首页 / 技术干货 / 正文
Hive的分区表

2023-02-09

   数据 查询 分区

  Hive表在创建的时候,其实就是在HDFS的指定目录上创建的一个文件夹。如果是内部表,只能映射在数据库目录下,而如果是外部表,则可以使用location指定映射的位置。这个文件夹下的所有的数据文件,都是这个表中的数据。随着系统运行时间的累积,文件中的数据量也会越来越大。hive在进行查询的时候,每一次的查询,都会从这个目录下的所有的数据文件中进行查询。如果数据量过大的时候,这个查询将会非常的慢了。

  那么,有没有什么办法可以加速这个查询的过程呢?其实,最简单的加速查询就是减少文件的扫描量即可。

  我们以一个电商的订单数据表为例,表中存放着过去5年的所有的订单数据。每一次查询的时候,都需要从所有的数据文件中进行查询,数据量非常庞大,导致查询的时间会非常的长。但是,表中的5年的订单的数据,我们在查询的时候,很多的数据其实都是没有必要去查询的。其中没有任何的数据价值,反而要增加查询的文件数量。

  如果我们对这些订单的数据分个类呢?例如,按照时间?

  我们可以在表目录下创建若干个文件夹,例如: 2022年、2021年、2020年...,然后将不同年份的订单数据,存放到对应的文件夹里面即可。这样我们在进行数据查询的时候,如果要查询2022年的数据,是不是只需要到2022年的文件夹中查询即可,不用再查询所有的数据了,就达到了加速查询的效果了!

  这,就是分区!

  我们使用分区,就是将表中的数据,按照不同的维度进行归类。在进行数据查询的时候,就可以按照不同的分区的号,到指定的文件夹中进行查询即可。在上述的例子中,表目录下只创建了一层的文件夹,这就是一级分区。而有时候我们还需要在一个文件夹中创建二级文件夹,来将数据进行更加细致的归类,例如对于某一年的数据,可以按照月份再进行归类。这就是二级分区。在创建分区的时候,还可以创建三级、四级等分区,但是实际使用中,三级分区已经是比较多的分区层级了。常用的就是一级和二级分区。

  分区表在创建的时候,需要使用partitioned by 来指定分区的字段。例如:

  12345

  create table tableName(

  .......

  .......

  )

  partitioned by (colName colType [comment '...'],...)

  需要注意的是,分区字段是一个伪字段,并不会真实的存储数据,只是一个分区的标识而已。例如我们在建表的时候如下:

  -- 一级分区

  create table part1(

  id int,

  name string,

  age int

  )

  partitioned by (dt string)

  row format delimited

  fields terminated by ',';

  -- 二级分区

  create table part2(

  id int,

  name string,

  age int

  )

  partitioned by (year int, month int)

  row format delimited

  fields terminated by ',';

  在上述的两个分区表中,dt字段、year字段、month字段等,都是分区字段。如果我们到数据文件中进行数据的查看的话,你会发现数据文件中其实并没有这个字段对应的信息。但是我们的确是可以通过desc查看表结构,能够看到这个字段。因此这个字段存在的意义,只是用来区分分区的,而并不是真实的用来映射数据的。因此我们称这样的字段为伪字段。

好程序员公众号

  • · 剖析行业发展趋势
  • · 汇聚企业项目源码

好程序员开班动态

More+
  • HTML5大前端 <高端班>

    开班时间:2021-04-12(深圳)

    开班盛况

    开班时间:2021-05-17(北京)

    开班盛况
  • 大数据+人工智能 <高端班>

    开班时间:2021-03-22(杭州)

    开班盛况

    开班时间:2021-04-26(北京)

    开班盛况
  • JavaEE分布式开发 <高端班>

    开班时间:2021-05-10(北京)

    开班盛况

    开班时间:2021-02-22(北京)

    开班盛况
  • Python人工智能+数据分析 <高端班>

    开班时间:2021-07-12(北京)

    预约报名

    开班时间:2020-09-21(上海)

    开班盛况
  • 云计算开发 <高端班>

    开班时间:2021-07-12(北京)

    预约报名

    开班时间:2019-07-22(北京)

    开班盛况
IT培训IT培训
在线咨询
IT培训IT培训
试听
IT培训IT培训
入学教程
IT培训IT培训
立即报名
IT培训

Copyright 2011-2023 北京千锋互联科技有限公司 .All Right 京ICP备12003911号-5 京公网安备 11010802035720号