主页 > 新闻资讯 > 大数据学习:hive分区操作详解

大数据学习:hive分区操作详解

作者:张老师 浏览次数: 2021-03-09 17:50
作为基于Hadoop的数仓工具,Hive在大数据生态圈的地位,也是有目共睹的。Hive的整体运行逻辑,其实是将类SQL语言,转化为MapReduce任务去执行。而到了运行优化阶段,就需要对分区、分桶有清晰的认知。今天的大数据学习分享,我们主要来讲讲Hive分区操作。

Hive分区是什么?

hive分区是指按照数据表的某列或某些列分为多个区,区从形式上可以理解为文件夹,比如我们要收集某个大型网站的日志数据,一个网站每天的日志数据存在同一张表上,由于每天会生成大量的日志,导致数据表的内容巨大,在查询时进行全表扫描耗费的资源非常多。

这种情况下,我们可以按照日期对数据表进行分区,不同日期的数据存放在不同的分区,在查询时只要指定分区字段的值就可以直接从该分区查找。

大数据学习:hive分区操作详解

Hive分区操作

1、创建分区表

hive>create table ptest(userid int)partitioned by(name string)row format delimited fields terminated by'\t';

注意:

①在创建分区表时,通过关键字partitioned by(name string)声明该表是分区表,并且是按照字段name进行分区,name值一致的所有记录存放在一个分区中,分区属性name的类型是string类型。当然,可以依据多个列进行分区,即对某个分区的数据按照某些列继续分区。

②所谓分区,这是将满足某些条件的记录打包,做个记号,在查询时提高效率,相当于按文件夹对文件进行分类,文件夹名可类比分区字段。这个分区字段形式上存在于数据表中,在查询时会显示到客户端上,但并不真正在存储在数据表文件中,是所谓伪列。所以,千万不要以为是对属性表中真正存在的列按照属性值的异同进行分区。

比如上面的分区依据的列name并不真正的存在于数据表中,是我们为了方便管理添加的一个伪列,这个列的值也是我们人为规定的,不是从数据表中读取之后根据值的不同将其分区。我们并不能按照某个数据表中真实存在的列,如userid来分区。

2、将本地文件中的数据加载到分区表中

hive>load data local inpath'/home/hadoop/dataset/ptest.txt'into table ptest partition(name='Jack');

注意:向分区表导入数据时,通过关键字partition(name="jack")声明数据要导入到表的哪个分区,这里表示要将数据导入到分区为name=jack的分区

3、查看分区数据

hive>select userid from ptest where name="Jack";

分区目的在于提高查询效率,查询分区数据的方式就是指定分区名,此时不再全表扫描,而是直接从指定分区(如name=jack的分区)中查询,从hdfs的角度看就是从相应的文件系统中(如name=jack文件夹下)去查找特定的数据。

4、查看分区信息

hive>show partitions ptest;

5、向分区中插入数据

hive>insert overwrite table ptest partition(name="Jack")select name from userinfo;

该操作中,我们就可以验证分区所依据的列其实是一个伪列,如果你要从具有相同结构的分区表中导入数据,会失败。比如两个分区表,都有两个真实的列和一个分区列(伪列),我们要将一个分区表中的数据导入到另一个分区表,会报错。错误信息显示要导入的表只有两列(伪列不记在内,这说明其实数据表文件中只有两列),而源表却有三列(将伪列计算在类)。

关于大数据学习,hive分区操作,以上就为大家做了简单的介绍了。Hive分区操作,对于Hive性能优化而言,是主要的方式之一,理解其操作并进行实操,多多练习还是很有必要的。成都加米谷大数据,专业大数据培训机构,大数据开发、数据分析与挖掘,零基础就业班正在招生中,课程大纲及学习视频资料,可联系客服获取!
热点排行
推荐文章
立即申请>>