Hive中静态分区与动态分区的示例分析

这篇文章给大家分享的是有关Hive中静态分区与动态分区的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

  分区是hive存放数据的一种方式。将列值作为目录来存放数据,就是一个分区。这样查询时使用分区列进行过滤,只需根据列值直接扫描对应目录下的数据,不扫描其他不关心的分区,快速定位,提高查询效率。分动态和静态分区两种:

  1.静态分区:若分区的值是确定的,那么称为静态分区。新增分区或者是加载分区数据时,已经指定分区名。

  createtableifnotexistsday_part1(

  uidint,

  unamestring

  )

  partitionedby(yearint,monthint)

  rowformatdelimitedfieldsterminatedby''

  ;

  ##加载数据指定分区

  loaddatalocalinpath'/root/Desktop/student.txt'intotableday_part1partition(year=2017,month=04);

  ##新增分区指定分区名

  altertableday_part1addpartition(year=2017,month=1)partition(year=2016,month=12);

  2.动态分区:分区的值是非确定的,由输入数据来确定

  2.1动态分区的相关属性:

  hive.exec.dynamic.partition=true:是否允许动态分区

  hive.exec.dynamic.partition.mode=strict:分区模式设置

  strict:最少需要有一个是静态分区

  nostrict:可以全部是动态分区

  hive.exec.max.dynamic.partitions=1000:允许动态分区的最大数量

  hive.exec.max.dynamic.partitions.pernode=100:单个节点上的mapper/reducer允许创建的最大分区

  2.2动态分区的操作

  ##创建临时表

  createtableifnotexiststmp(

  uidint,

  commentidbigint,

  recommentidbigint,

  yearint,

  monthint,

  dayint

  )

  rowformatdelimitedfieldsterminatedby'';

  ##加载数据

  loaddatalocalinpath'/root/Desktop/comm'intotabletmp;

  ##创建动态分区表

  createtableifnotexistsdyp1(

  uidint,

  commentidbigint,

  recommentidbigint

  )

  partitionedby(yearint,monthint,dayint)

  rowformatdelimitedfieldsterminatedby''

  ;

  ##严格模式

  insertintotabledyp1partition(year=2016,month,day)

  selectuid,commentid,recommentid,month,dayfromtmp;

  ##非严格模式

  ##设置非严格模式动态分区

  sethive.exec.dynamic.partition.mode=nostrict;

  ##创建动态分区表

  createtableifnotexistsdyp2(

  uidint,

  commentidbigint,

  recommentidbigint

  )

  partitionedby(yearint,monthint,dayint)

  rowformatdelimitedfieldsterminatedby'';

  ##为非严格模式动态分区加载数据

  insertintotabledyp2partition(year,month,day)

  selectuid,commentid,recommentid,year,month,dayfromtmp;

  3.分区注意细节

  (1)、尽量不要是用动态分区,因为动态分区的时候,将会为每一个分区分配reducer数量,当分区数量多的时候,reducer数量将会增加,对服务器是一种灾难。

  (2)、动态分区和静态分区的区别,静态分区不管有没有数据都将会创建该分区,动态分区是有结果集将创建,否则不创建。

  (3)、hive动态分区的严格模式和hive提供的hive.mapred.mode的严格模式。

  hive提供我们一个严格模式:为了阻止用户不小心提交恶意hql

  hive.mapred.mode=nostrict:strict

  如果该模式值为strict,将会阻止以下三种查询:

  (1)、对分区表查询,where中过滤字段不是分区字段。

  (2)、笛卡尔积join查询,join查询语句,不带on条件或者where条件。

  (3)、对orderby查询,有orderby的查询不带limit语句。

感谢各位的阅读!关于“Hive中静态分区与动态分区的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:niceseo99@gmail.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

评论

有免费节点资源,我们会通知你!加入纸飞机订阅群

×
天气预报查看日历分享网页手机扫码留言评论Telegram