当前位置: 移动技术网 > 科技>人工智能>云计算 > HIVE的使用详情

HIVE的使用详情

2018年03月07日  | 移动技术网科技  | 我要评论

一、基本的表操作
1.创建表(按不同的区分字符分组)

create table testTable(
    id int,
    name  string,
    likes  array,
    address map
)ROW FORMAT  DELIMITED FIELDS TERMINATED BY ','
 COLLECTION ITEMS TERMINATED BY '-'  MAP KEYS TERMINATED BY ':';

表结构的定义为:根据不同的分隔符来对文本中的数据信息进行过滤和创建表。
2.导入数据:
load data local inpath ‘/root/hivedata01.txt’ into table table01;
比insert的方式快很多倍。备注:其中local 如果不加表示数据在hdfs上,加了则是在linux系统本地。注意:往表里放完后会在hdfs上放一份。hdfs上放的是原始的数据信息。
备注: hive是读时模式,对写的操作不做检查。给他啥就导入啥。读的时候检查。
而像关系型数据库,是写时候模式。写的时候会检查。

测试例:

11,zhangsan,daqiu-kanshu-kandingyi,beijing:tiananmeng-shanghai:pudong-shengzheng:huaqingbei,nan,33
12,xiaoming,pingshu-xiangsheng-moshu,beijing:jingnan-hebei:zhijiazhan-henan:zhengzhou,nv,24

3.查询数据:select * from tablename;
上述的操作结果:

hive> select * from table02;
OK
11  zhangsan    ["daqiu","kanshu","kandingyi"]  {"beijing":"tiananmeng","shanghai":"pudong","shengzheng":"huaqingbei"}
12  xiaoming    ["pingshu","xiangsheng","moshu"]    {"beijing":"jingnan","hebei":"zhijiazhan","henan":"zhengzhou"}

4.从hdfs 上查询表数据
hdfs dfs -cat /user/hive/warehouse/table02/*

备注1:查看表的属性信息 desc tablename;
查看表描述:desc formatted tablename;
5:其他的创建表的方式:
5.1 AS

CREATE TABLE table_new
   AS
SELECT * from table_old;

会转成MapReduce执行创建新表。
5.1 LIKE

CREATE TABLE table_new
LIKE  table_old;

like的方式不会创建MapReduce的方式执行。
5.3 FROM

from chen
 insert into table result
 select *;
 // 把from 放前的原因是:select 后面可并列接各种方式的查询把结果都给result

二、表类型
2.1 内部表和外部表
区别在于内部表在固定的路径下,外部表需要自己定义位置而且加上关键字:EXTERNAL
eg:创建外部表

create  EXTERNAL table externalTable(
    id int,
    name  string,
    likes  array,
    address map
)ROW FORMAT  DELIMITED FIELDS TERMINATED BY ','
 COLLECTION ITEMS TERMINATED BY '-'
       MAP KEYS TERMINATED BY ':'
       LOCATION  '/externalTable';

备注: 内部的表可以通过drop 的方式删除,同时删除元数据。对外部表而言,元数据被删除(通过hive 中 show tables查看是否删除;)。但是实际的数据却还在(hdfs上查看)。

2.2 分区表
内部分区表、外部分区表
内部分区表:

create table inner_part_table(
    id int,
    name  string,
    likes  array,
    address map
)
PARTITIONED BY (sex string)
ROW FORMAT  DELIMITED FIELDS TERMINATED BY ','
 COLLECTION ITEMS TERMINATED BY '-'
       MAP KEYS TERMINATED BY ':';

注意:分区字段必须是新的字段,不可以在原始的字段上作为分区字段。
分区在hdfs上体现在目录的增加。
新增分区:
ALTER TABLE inner_part_table ADD PARTITION(sex='unknown');
往分区表上推送数据:

load data local inpath 'hivedata01.txt' into table inner_part_table PARTITION(sex='nv');

对不同个数分区字段的分区表,设置上述的partitons的个数对应起来。

删除分区:

ALTER TABLE inner_part_table DROP  PARTITION (sex='unknown')

在删除分区的时候注意:如果某2个目录下有同样的一个分区目录,删除此同样的目录,会是的2个目录同时被删除。

三、Hive SerDe
既: Serializer and Deserializer
SerDe 用于做序列化和反序列化。构建在数据存储和执行引擎之间,对两者实现解耦。Hive通过ROW FORMAT DELIMITED以及SERDE进行内容的读写。
举例 :

 CREATE TABLE logtbl (
    host STRING,
    identity STRING,
    t_user STRING,
    time STRING,
    request STRING,
    referer STRING,
    agent STRING)
  ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'
  WITH SERDEPROPERTIES (
    "input.regex" = "([^ ]*) ([^ ]*) ([^ ]*) \\[(.*)\\] \"(.*)\" (-|[0-9]*) (-|[0-9]*)"
  )
  STORED AS TEXTFILE;

测试数据:

192.168.57.4 - - [29/Feb/2016:18:14:35 +0800] "GET /bg-upper.png HTTP/1.1" 304 -
192.168.57.4 - - [29/Feb/2016:18:14:35 +0800] "GET /bg-nav.png HTTP/1.1" 304 -

四、Hive Beeline
解释:
Beeline 要与HiveServer2配合使用
服务端启动hiveserver2
客户的通过beeline两种方式连接到hive
1、beeline -u jdbc:hive2://node03:10000/default -n root
2、beeline
beeline> !connect jdbc:hive2://:/;auth=noSasl root 123
默认 用户名、密码不验证

首先启动hiveserver2,进入到hive的bin下 ,启动hiveserver2文件。则开始服务。
然后,在客户端,beeline -u jdbc;hive2://node03:10000 root 启动beeline客户端。

五、Hive 函数

六、UDF 开发

1、UDF函数可以直接应用于select语句,对查询结构做格式化处理后,再输出内容。
2、编写UDF函数的时候需要注意一下几点:
a)自定义UDF需要继承org.apache.hadoop.hive.ql.UDF。
b)需要实现evaluate函数,evaluate函数支持重载。
3、步骤
a)把程序打包放到目标机器上去;
b)进入hive客户端,添加jar包:hive>add jar /run/jar/udf_test.jar;

c)创建临时函数:hive>CREATE TEMPORARY FUNCTION add_example AS 'hive.udf.Add';
d)查询HQL语句:
    SELECT add_example(8, 9) FROM scores;
    SELECT add_example(scores.math, scores.art) FROM scores;
    SELECT add_example(6, 7, 8, 6.8) FROM scores;
e)销毁临时函数:hive> DROP TEMPORARY FUNCTION add_example;

六、 UDAF 自定义聚集函数
多行进一行出,如sum()、min(),用在group by时
1.必须继承

org.apache.hadoop.hive.ql.exec.UDAF(函数类继承)
org.apache.hadoop.hive.ql.exec.UDAFEvaluator(内部类Evaluator实现UDAFEvaluator接口)

2.Evaluator需要实现 init、iterate、terminatePartial、merge、terminate这几个函数

init():类似于构造函数,用于UDAF的初始化
iterate():接收传入的参数,并进行内部的轮转,返回boolean
terminatePartial():无参数,其为iterate函数轮转结束后,返回轮转数据,类似于hadoop的Combiner
merge():接收terminatePartial的返回结果,进行数据merge操作,其返回类型为boolean
terminate():返回最终的聚集函数结果

开发一个功能同:
Oracle的wm_concat()函数
Mysql的group_concat()

六、UDTF 用户定义表生成函数
操作作用于单个数据行,并且产生多个数据行——-一个表作为输出


如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网