Hive基础入门(一)

77 阅读3分钟

数据库与数据仓库

数据库

  • 面向业务(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架构原理

  1. 用户接口:
    • CLI
    • JDBC/ODBC
    • Web UI(eg:HUE)
  2. 元数据:Metastore
    • 包括:表名、表所属的数据库(默认是default)、表的拥有者、列/分区字段、表的类型(内部表与外部表)、表的数据所在目录等
    • 默认存储在自带的Derby数据库中
  3. 解析器
  4. 编译器
  5. 优化器
  6. 执行器
  7. Hadoop集群

Hive交互方式

  1. Shell
  2. JDBC
  3. Hive的命令: eg. hive -f

Hive的数据类型

  1. 基本数据类型
类型描述
booleantrue/false
tinyint1字节的有符号整数
smallint2字节的有符号整数
int4字节的有符号整数
bigint8字节的有符号整数
float4字节单精度浮点数
double8字节单精度浮点数
string字符串(不设长度)
varchar字符串(1-65355长度,超长截断)
timestamp时间戳
date日期
  1. 复合数据类型 | 类型 | 描述 | | :------: | :--------------------------------------------: | | 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的分区表

  • 通过分文件夹的形式
  • 文件夹的嵌套是有顺序的
  • 分区字段也是数据表的字段