暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Hive的学习

Nathan的笔记 2017-05-21
329

        今天学习了下Hive的知识,作为Hadoop生态圈中的成员,Hive确实简化了数据分析的过程。之前,我们使用MapReduce来分析文件的结果,都要编写Map,Reduce和Job类来得到最终的查询结果。但是有了Hive之后,我们可以非常方便的使用类似关系型数据库的sql语句来查询结构,说道底,在Hive中发起的一个sql查询,也是在调用MapReduce,只不过这些都被封装了起来,我们只需关心怎么去写sql。

         在Hive是使用方面,其实很多操作跟关系型数据库oracle很相似。有一些另类的地方,如下所示:

  1. Hive中表的分区

create table book (id bigint, name string) partitioned by (pubdate string) row format delimited fields terminated by '\t';

从上面的建表来看,分区字段并不是表里面的字段,而是自己定义的字段。

分区表加载数据

load data local inpath './book.txt' overwrite into table book partition (pubdate='2010-08-22');

另外,对分区表的查询,Hive里面是把分区作为过滤条件来使用,而不是像oracle里面样直接查询分区的内容。

select  * from book where pubdate='2010-08-22';


2.Hive的数据类型

在Hive里面,定义的数据类型还可以是集合。在创建这种数据类型的时候,需要添加collection items terminated by来标示集合间的分隔符。

create table tab_array(a array<int>,b array<string>)

row format delimited

fields terminated by '\t'

collection items terminated by ',';


另外,数据的类型还可以是map类型。

create table tab_map(name string,info map<string,string>)

row format delimited

fields terminated by '\t'

collection items terminated by ','

map keys terminated by ':';

比如,下面这种文件,我们可以把后面一部分当作是Key-Value对,K-V间是以冒号来存储的。

nathon       age:18;addr:china

xlt               age:19;addr:china


3.与shell的交互

在Hive里面,没有像关系型数据库里面存储过程的概念,很难将所有的sql逻辑都串联起来,因此可以使用shell的方式来执行Hive中的sql语句,将多个逻辑封装在shell脚本里面。

hive -S -e 'select country,count(*) from tab_ext'


文章转载自Nathan的笔记,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论