3-hadoop之数据仓库hive(三) Hive 基础应用
一、Hive基础概念
1.hive数据模型
每个库的下面呢有一些表,横向分区,纵向分桶
分区:每个分区都为一个物理文件夹,对于一个不在表中存在的字段进行分
区,即分区的字段为虚字段,在这种水平的分层后数据是完全物理
隔离的之间没有关系
分桶:各分桶相互独立,最终形成一个完整的数据块,分桶采用的是实字段
每个分桶即为一个文件,按字段的哈希值分桶
二、HiveSql
按数据操作分类,来分别说明脚本的使用
1.DDL
1.1建表说明
元数据:描述数据的数据
表分类:主要分为内表和外表
内表:元数据和数据本身均被hive所管理,删除表则全部被删除
外表:元数据被hive管理,数据本身存储在hdfs中,不受hive管
理。删除表则只删除元数据,数据本身不变。
区分内外表的关键字:external
查看已存在表的详细信息
show create table / desc tablename
更改表 alter table student rename to student2
增加字段 alter table student2 add columns (age int comment "新
增")
2.DML
加载数据脚本:LOAD DATA [LOCAL] INPATH 'filepath'
[OVERWRITE] INTO TABLE
tablename [PARTITION (partcol1=val1,
partcol2=val2 ...)
动态分区模式:(让分区成为变量)
脚本模板
insert overwrite table tablename
partition (partcol1[=var1],partcol2[=var2]...)
select_statement from from_statement
允许动态分区
set hive.exec.dynamic.partition=true;
设置非严格模式
set hive.exec.dynamic.partition.mode=nonstric;
多插入模式:
from student
insert overwrite table student partition(come_date='20170906')
select id,username,classid,classname where
come_date='20170905'
insert overwrite table student partition(come_date='20170907')
select id,username,classid,classname where
come_date='20170905'
3.join查询
inner join
将左表和右表满足联接条件的数据,全部查询出来
left outer join
以左表为主,将左表数据全部保留,没有关联上数据字段置成 NULL
right join
以右表为主,右表的数据全部保留,没有关联上额数据字段置成null
full outer join
没有关联上数据字段全部置成 NULL
4.union
union all
将所有表数据,完全叠加在一起,不去重。
union
将所有表数据,完全叠加在一起,总体去重。
要求:所有表的字段和类型完全一致
5.later view explode
通过 explode 将一行转换成多行,通过 lateral view 将多行转换成一个表
经典运用