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;