英文名:Data Warehouse 简称DW
面向分析的存储系统,其特点有:面向主题,集成,不可修改,反映历史变化.
2.数据仓库和数据库的对比主要联系:1.二者都是用来存储数据的
2.数据仓库是数据库的衍生及应用
3.二者存在数据交互,你中有我,我中有你
主要区别:1.数据库面向事务,数据仓库面向主题
2.数据库实时性强,吞吐量小但空间有限
3.数据仓库吞吐量大,但实时性弱,空间巨大
4.数据库尽量避免冗余,数据仓库有意引入冗余
二.Hive 1.产生背景1.1为了让非程序员便捷使用大数据
1.2降低程序员处理大数据的难度和成本
1.3基于hadoop的数据仓库应用广泛
1.4FaceBook强大的商业需求和商业化运作
2.定义Hive是建立在hadoop上的数据仓库的基础架构和解决方案
3.作用提供了数据仓库的构建和完整的解决方案
4.意义基于hadoop解决了企业数据仓库构建的核心问题,证明了hadoop平台的强大,降低了hadoop的使用门槛
5.Hive在hadoop生态圈的地位
三.Hive的架构设计 1.基本使用
hive 进入hive cli
show databases 查看所有数据库
create database 创建数据库
use (database name) 使用数据库
show tables 查看数据库中所有表
......
2.架构设计
注意:在2.2版本以后,去掉了HWI模块,HiveCLI模式也采用beeline链接
3.运行流程四.Hive基础应用 1.基础概念
1.1数据模型
1.2数据类型
1.2.1数值型
| 类型 | 说明 |
| TINYINT | 1-byte signed integer from -128 to 127 |
| SMALLINT | 2-byte signed integer from -32,768 to 32,767 |
| INT INTEGER | 4-byte signed integer from -2,147,483,648 to 2,147,483,647 |
| BIGINT | 8-byte signed integer from -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 |
| FLOAT | 4-byte single precision floating point number |
| DOUBLE | 8-byte double precision floating point number PRECISION |
| DECIMAL | Decimal datatype was introduced in Hive0.11.0 (HIVE-2693) and revised in Hive 0.13.0 (HIVE-3976) |
1.2.2日期类型
| 类型 | 说明 |
| TIMESTAMP | UNIX时间戳和可选的纳秒精度 |
| DATE | 描述特定的年/月/日,格式为YYYY-MM-DD |
1.2.3字符串
| 类型 | 说明 |
| string | 最常用的字符串格式,等同于java String |
| varchar | 变长字符串,hive用的较多,最长为65535 |
| char | 定长字符串,比varchar更多一些,一般不要超过255个字符 |
1.2.4布尔类型
| 类型 | 说明 |
| boolean | 等同于java的boolean用的很少 |
1.2.5字节数组
| 类型 | 说明 |
| binary | 字节数组类型,可以存储任意类型的数据用的很少 |
1.2.6复杂数据类型
| 数据类型 | 描述 | 字面语法示例 |
| STRUCT | 和C语言中的struct或者”对象”类似,都可以通过”点”符号访问元素内容。例如,如果某个列的数据类型是STRUCT{first STRING, lastdt STRING},那么第1个元素可以通过字段名.first来引用 | struct( ‘John’, ‘Doe’) |
| MAP | MAP是一组键-值对元组集合,使用数组表示法(例如[‘key’])可以访问元素。例如,如果某个列的数据类型是MAP,其中键->值对是’first’->’John’和’last’->’Doe’,那么可以通过字段名[‘last’]获取值’Doe’ | map(‘first’, ‘John’, ‘last’, ‘Doe’) |
| ARRAY | 数组是一组具有相同类型的变量的集合。这些变量称为数组的元素,每个数组元素都有一个编号,编号从零开始。例如,数组值为[‘John’, ‘Doe’],那么第1个元素可以通过数组名[0]进行引用 | ARRAY( ‘John’, ‘Doe’) |
1.3Hive数据文件格式和压缩格式
1.3.1文件格式
| 面向行/列类型 | 类型名称 | 是否可切割计算 | 优点 | 缺点 | 适用场景 |
| 面向行 | 文本文件格式(.txt) | 可以 | 查看、编辑简单 | 无压缩占空间大、传输压力大、数据解析开销大 | 学习练习使用 |
| 面向行 | SequenceFile序列文件格式(.seq) | 可以 | 自支持、二进制kv存储、支持行和块压缩 | 本地查看不方便:小文件合并成kv结构后不易查看内部数据 | 生产环境使用、map输出的默认文件格式 |
| 面向列 | rcfile文件格式(.rc) | 可以 | 数据加载快、查询快、空间利用率高、高负载能力 | 每一项都不是最高 | 学习、生产均可 |
| 面向列 | orcfile文件格式(.orc) | 可以 | 兼具rcfile优点、进一步提高了读取、存储效率、新数据类型的支持 | 每一项都不是最高 | 学习、生产均可 |
1.3.2压缩格式
| 可切分性 | 类型名称 | 是否原生支持 | 优点 | 缺点 | 适用场景 |
| 可切分 | lzo(.lzo) | 否 | 压缩/解压速度快 合理的压缩率 | 压缩率比gzip低 不原生、需要native安装 | 单个文件越大,lzo优点越越明显。压缩完成后>=200M为宜 |
| 可切分 | bzip2(.bz2) | 是 | 高压缩率超过gzip 原生支持、不需要native安装、用linux bzip可解压操作 | 压缩/解压速率慢 | 处理速度要求不高、要求高压缩率(冷数据处理经常使用) |
| 不可切分 | gzip(.gz) | 是 | 压缩/解压速度快 原生/native都支持使用方便 | 不可切分、对CPU要求较高 | 压缩完成后<=130M的文件适宜 |
| 不可切分 | snappy(.snappy) | 否 | 高速压缩/解压速度 合理的压缩率 | 压缩率比gzip低 不原生、需要native安装 | 适合作为map->reduce或是job数据流的中间数据传输格式 |
1.4数据操作分类
2.HiveSQL
2.1DDL
元数据:描述数据的数据
内表:元数据和数据本身均被Hive管理,删除表全部会删除
外表:元数据被Hive管理,数据本身存在hdfs,删除表只删除元数据,不影响数据本身
2.2DML
将本地数据文件加载到表中:load data local inpath ....overwrite into table .... partition();
将hdfs目录下的文件加载到表中:load data inpath ...overwrite into table...
将查询结果插入表中:insert overwrite table ... select ...
动态分区注意设置非严格模式
2.3DQL
select * from ... 查询所有
select * from ... where 根据条件查询所有
还可以加入limit,设置升序降序
join查询分为 inner join left outer join right outer join full outer join
union分为 union all将所有数据叠加,不去重
union将所有数据叠加且去重
3.Hive系统函数



