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

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

创新互联公司专注于鄂托克网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供鄂托克营销型网站建设,鄂托克网站制作、鄂托克网页设计、鄂托克网站官网定制、成都小程序开发服务,打造鄂托克网络公司原创品牌,更为您提供鄂托克网站排名全网营销落地服务。

成都创新互联公司专注于中大型企业的成都做网站、网站制作和网站改版、网站营销服务,追求商业策划与数据分析、创意艺术与技术开发的融合,累计客户数千家,服务满意度达97%。帮助广大客户顺利对接上互联网浪潮,准确优选出符合自己需要的互联网运用,我们将一直专注品牌网站制作和互联网程序开发,在前进的路上,与客户一起成长!

创新互联公司成立与2013年,先为双湖等服务建站,双湖等地企业,进行企业商务咨询服务。为双湖企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。

定襄ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为创新互联的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:18980820575(备注:SSL证书合作)期待与您的合作!

公司主营业务:成都网站设计、网站制作、外贸营销网站建设、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。创新互联是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。创新互联推出靖西免费做网站回馈大家。

成都创新互联是一家企业级云计算解决方案提供商,超15年IDC数据中心运营经验。主营GPU显卡服务器,站群服务器,四川绵阳服务器托管,海外高防服务器,成都机柜租用,动态拨号VPS,海外云手机,海外云服务器,海外服务器租用托管等。

分区是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中静态分区与动态分区的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!


文章题目:Hive中静态分区与动态分区的示例分析
分享链接:http://hbruida.cn/article/igchdd.html