一、Hive基础概念

1、hive数据模型

图片.png

2、数据类型

与mysql基本无差异

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 将两个表的数据完全叠在一起,不去重
  • union 两个表的数据叠在一起,总体去重

    三、Hive系统函数

    图片.png
    使用实例

  • 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”,”,”))