数据库与数据仓库
数据库
- 面向业务(OLTP - On-Line Transaction Processing),为了捕获数据而设计
数据仓库
- Data Warehouse
- 面向分析(OLAP - On-Line Analytical Processing),为了分析数据而设计
- 不生产任何数据,也不消耗任何数据,数据来源于外部
- 面向主题的、继承的、非易失的、时变的(T + 1)
数据仓库的分层架构
提高效率,用空间换时间。
- 源数据层(ODS) 此层数据无任何更改,直接沿用外围系统数据结构和数据,不对外开放;为临时存储层,是接口数据的临时存储区域,为后一步的数据处理做准备。
比如:点击流日 志(行为日志)、数据库数据、文档数据、爬虫
- 数据仓库层(DW) 经过对ODS进行ETL(Extract Transfer Load)的清洗之后得到的干净数据。
比如:聚合数据、多维数据模型、业务模型、细节数据
- 数据应用层(DA) 前端应用直接读取的数据源
比如:报表展示、即席查询、数据分析、数据挖掘
Hive
一个基于Hadoop的数据仓库工具。本质是将SQL转换为MapReduce的任务进行运算,即Hive是一个MapReduce的客户端。
优点
- 操作接口采用类SQL语法
缺点
- 查询延迟很严重
- 不支持事务
Hive架构原理
- 用户接口:
- CLI
- JDBC/ODBC
- Web UI(eg:HUE)
- 元数据:Metastore
- 包括:表名、表所属的数据库(默认是default)、表的拥有者、列/分区字段、表的类型(内部表与外部表)、表的数据所在目录等
- 默认存储在自带的Derby数据库中
- 解析器
- 编译器
- 优化器
- 执行器
- Hadoop集群
Hive交互方式
- Shell
- JDBC
- Hive的命令: eg. hive -f
Hive的数据类型
- 基本数据类型
类型 | 描述 |
---|---|
boolean | true/false |
tinyint | 1字节的有符号整数 |
smallint | 2字节的有符号整数 |
int | 4字节的有符号整数 |
bigint | 8字节的有符号整数 |
float | 4字节单精度浮点数 |
double | 8字节单精度浮点数 |
string | 字符串(不设长度) |
varchar | 字符串(1-65355长度,超长截断) |
timestamp | 时间戳 |
date | 日期 |
- 复合数据类型
| 类型 | 描述 |
| :------: | :--------------------------------------------: |
| array | 一组有序的字段,字段类型必须相同 array(元素1,元素2) |
| map | 一组无序的键值对 map(k1,v1,k2,v2) | | struct | 一组命名的字段,字段类型可以不同 struct(元素1,元素2) |
Hive的内部表与外部表
desc formatted table_name;
内部表
- Table Type: MANAGED_TABLE
- create table ------;
- 删除后,表的元数据和真实数据都被删除了
- 一般内部表都是用在数据仓库的DW层 外部表
- Table Type: EXTERNAL_TABLE
- create external table ------;(创建表时需要有关键字 external)
- 删除后,仅仅只是把该表的元数据删除了,真实数据还在,后期还是可以恢复出来
- 一般外部表都是用在数据仓库的ODS层
#内部表改为外部表
alter table table_name set tblproperties('EXTERNAL'='TRUE');
#外部表改为内部表
alter table table_name set tblproperties('EXTERNAL'='FALSE');
Hive的分区表
- 通过分文件夹的形式
- 文件夹的嵌套是有顺序的
- 分区字段也是数据表的字段