Fork me on GitHub

Hive篇--相关概念整理一

一.前述

hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。 其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。

二.Hive相关概念

1.元数据:包括在Hdfs上的映射。除了文件内容,剩下的都是元数据信息。

2.操作符: 表HDFS的一个操作或者一道MapReduce作业。

3.内部表:元数据删除,同时删除数据 ,由hive自身管理。
4.外部表:元数据删除,真正存在HDFS上的数据不会删除,只是做了一个引用。外部表 分区  删除分区  不会丢失数据

5.分区表(内部表):对应两个HDFS 上的一个目录,多级分区对应多层目录,分区字段不在表中。

6.UDF:一进一出,重写evaluate函数

7.UDAF :多进一出
8.UDTF: 一进多出
PS:
添加分区时必须指定全部分区。删除的时候没有必要指定全部,指定某一个会删除相关的。
三。案例
内部表:

内部表
create table psn0 ( id int, name string, likes ARRAY<string>, address MAP<string, string> ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' //每一行中的每一列的区分方式 COLLECTION ITEMS TERMINATED BY '-' //map或Array的每个元素分隔符 MAP KEYS TERMINATED BY ':';//Map中key和value的切割符 LOAD DATA LOCAL INPATH '/root/data1' INTO TABLE psn0; LOAD DATA INPATH '/data1' INTO TABLE psn0;
22,小明22,eat-code-play,北京:天安门广场-上海:黄浦江
外部表
create EXTERNAL table psn1 (
id int,
name string,
likes ARRAY<string>,
address MAP<string, string>
) ROW FORMAT DELIMITED 
FIELDS TERMINATED BY ',' 
COLLECTION ITEMS TERMINATED BY '-' 
MAP KEYS TERMINATED BY ':' 
LOCATION '/psn1';//只是做了一个映射
分区表
create
table psn3 ( id int, name string, likes ARRAY<string>, address MAP<string, string> ) PARTITIONED BY (sex string, age int) //分区 ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' COLLECTION ITEMS TERMINATED BY '-' MAP KEYS TERMINATED BY ':'; LOAD DATA LOCAL INPATH '/root/data1' INTO TABLE psn3 partition (sex='man', age=1); LOAD DATA LOCAL INPATH '/root/data2' INTO TABLE psn3 partition (sex='man', age=10);
外部表 分区  删除分区  不会丢失数据

create EXTERNAL table psn5 (
id int,
name string,
likes ARRAY<string>,
address MAP<string, string>
) 
PARTITIONED BY (sex string, age int) 
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY ',' 
COLLECTION ITEMS TERMINATED BY '-' 
MAP KEYS TERMINATED BY ':' 
location '/psn5';

LOAD DATA LOCAL INPATH '/root/data1' INTO TABLE psn5 partition (sex='man', age=1);

ALTER TABLE psn5 DROP PARTITION (sex='man', age=1);

两种创建表的方式(这两种创建方式都是从其他表中读取的结果创建)
CREATE
TABLE tbl1 AS SELECT id, name , likes FROM psn2; FROM page_view_stg pvs//这句话实际上也可以放在后面 INSERT OVERWRITE TABLE page_view1 SELECT pvs.viewTime, pvs.userid, pvs.page_url, pvs.referrer_url, null, null, pvs.ip, pvs.cnt;//放在这FROM page_view_stg pvs
From psn2

From psn2 
insert into table psnjg 
select count(*) as ct ;

根据正则匹配,序列化Hive支持读时检查,写时不检查

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;

 

 

 

posted @ 2018-01-11 01:09  L先生AI课堂  阅读(397)  评论(0编辑  收藏  举报