一、Hive基础概念
1、hive数据模型
2、数据类型
3、文件格式和压缩格式
文件格式:
面向行:.txt .seq
面向列:.rc .roc
压缩格式:
可切分:.loz .bz2
不可切分:.gz .snappy
4、数据操作分类
DDL:数据定义语言
DML:数据操纵语言
DQL:数据查询语言
二、Hive SQL
表分类
内表:元数据和数据本身都被Hive管理,删除表则全部删除。
外表:元数据被Hive管理,数据本身被HDFS管理。删除表只删除元数据。
1、DDL
- 关键字解释
external:此为内外表区分的唯一关键字
comment:为表添加注释
partitioned by:按照哪些字段分区
clustered by:按照哪些字段分桶
row format:设定分隔符
stored as:指定存储的文件类型
location:指定存储的Hive目录
- 常用命令
show create table 查看已存在表的详细信息
show table 显示所有表
show views 查看所有视图
drop view 删除视图
2、DML
- 加载HDFS文件
load data inpath ‘ ‘ overwrite into table 表名 partition (come_data=???)
- 将查询的数据插入到数据表中
insert overwrite table 表名 partition(come_data=???)select * from …….
- 动态分区模式(以被查询出来的结果的字段名分区)
insert overwrite table 表名 partition(come_data)select * from…….
注意:需要先设置成非严格模式:set hive.exec.dynamic.partition.mode=nonstric;
3、DQL
- distribute by 以指定字段作为key做分区处理
- sort by 以指定字段作为reduce排序的字段
- order by 只会生成一个reduce,并且全部排序
- cluster bu 相当于distribute和sort连用
- union all 将两个表的数据完全叠在一起,不去重
-
三、Hive系统函数
使用实例 count
统计记录行数,推荐使用count(1),而不是count(*)
- if
if(条件,正确输出,错误输出)
- coalesce
coalesce(value1,value2,,,)将第一个不为null的值输出
- case…when
case ‘ ‘
when ‘apple’ then ‘isapple’
when ‘pear’ then ‘isnotapple’
else ‘is not fruit’
end;
- split 将字符串切分为一个数组
split(”a,b,c”,”,”)
- explode 行转列
explode(split(”a,b,c”,”,”))