复习HIVE

HIVE基础知识点复习

数据仓库

什么是数据仓库

数据仓库的特点:
  1. 数据仓库是面向主题的
  2. 数据仓库是随时间改变的
  3. 数据仓库是相对稳定的
数据处理种类:OLTP(联机数据处理)和OLAP(联机分析处理)

​ OLTP主要应用于传统关系数据库,主要针对的是基本的日常事务处理,如银行转账

​ OLAP主要应用于数据仓库系统的主要应用,支持复杂的分析操作,侧重决策支持,并提出直观易懂的查询结果,如商品的推荐系统。

数据仓库的结构
  1. 数据源
  2. 数据管理和存储
  3. OLAP管理器
  4. 前端展示工具
数据仓库的数据模型
  1. 星型模型(最常用的模型,以一张事实表作为主表,数张维度表为副表组成。维度表的主键放置在事实表中,作为事实表与维度表连接的外键)
  2. 雪花模型(星型模型的变种,由两个或多个星型表组成,事实表可以作为一部分的副表加入模型完成格式,但是由于雪花模型需要关联更多的维度表,所以性能会比星型模型低,不常用)

HIVE

HIVE简介

	1. hive是建立在hadoop文件系统上的数据仓库,能够对存储在HDFS中的数据进行提取、转换、加载,是一种可以存储、查询、分析存储在hadoop中大规模数据的工具。
	2. 语言:类SQL语言(HQL)。将结构化的数据文件映射成一张数据表,允许熟悉SQL语句的用户查询数据,也可以自定义mr处理复杂的分析工作。对于java编写的mr来说更有优势

hive系统架构

  1. 用户接口

    • CLI:终端命令行

    • JDBC/ODBC:用java连接,与JDBC相似

    • WebUI:通过浏览器访问Hive

  2. 跨语言服务(Thrift Server)

    • 可扩展且跨语言的服务,能用不同的编程语言调用hive接口
  3. 底层的驱动引擎(Driver)

    • 编译器(Compiler):完成HQL查询语句的词法分析、语法分析和编译
    • 优化器(Optimizer):完成HQL语言的优化
    • 执行器(Executor):完成HQL查询计划
  4. 元数据存储系统(Metastore)

    元数据通常包含表名、列、分区、及其相关属性,以及表数据所在目录的位置信息

    • 默认存在自带的Derby数据库。但由于此数据库不适合多用户操作,且数据存储目录不固定,不方便管理,所以一般使用MySQL数据库

hive工作原理

  1. 用户通过用户接口将查询操作发送给Driver
  2. Driver将任务发送给编译器
  3. 编译器将元数据请求发送到Metastore获取元数据
  4. 编译器得到元数据信息对任务进行编译,先将HQL转化为抽象语法树,然后将抽象语法树转化为查询块,将查询块转化为逻辑的查询计划,重写此计划,将其转化为物理的计划,最后决定最佳的执行策略。
  5. 将最终计划提交给Driver
  6. Driver元数据发送给jobTracker或sourceManager执行任务,任务直接读取HDFS内容进行操作
  7. 取得并返回执行结果

hive数据模型

  • 数据库

    存放数据表的命名仓库

  • 由存储的数据和描述表格数据形式的相关元数据组成

    • 内部表:数据存放于数据仓库中,删除表数据也会消失
    • 外部表:数据存放在HDFS上,删除表数据不会消失
  • 分区

    将表中的数据进行粗略划分的机制,在hive存储上体现为表主目录下的子目录,表名即分区名,目的是提高查询速度

  • 将一张表分成多部分,以此来提高查询效率,桶表是hive数据模型的最小单元,数据加载到桶表时,会对字段进行哈希取值,然后除以桶的个数取余数进行分桶保证每个桶上都有数据,在物理上,每个桶就是表或者分区的一个文件


重要参数

TEMPORARY(temporary):创建临时表,仅对当前回话可见。临时表的数据会存放在用户的暂存目录中,并在 会话结束时删除

EXTERNAL(external):创建一个外部表,如果不写,默认创建内部表

PARTITIONED BY(partitioned by):创建分区

CLUSTERED BY(clustered by):在表或者分区中,用此关键字将若干个列放入一个桶中

SORTED BY(sorted by):队列排序,提高查询性能

ROW FORMAT(row format):指一行中的字段存储格式

STORED AS(stored as):文件存储格式

LOCATION(location):数据文件在HDFS上的实际路径

数据操作关键字

  • where 作为可选参数,用于指定查询条件
  • distinct:去重,如果没有定义则全部输出,默认为all
  • group by:将查询结果按照指定字段进行分组
  • having:将分组后的结果进行过滤,与group by连用
  • distribute by:根据指定字段分发到不同的Reducer进行处理,采用哈希散列算法进行分发,类似mr的 partition分区,通常与sort by使用
  • sort by 在数据进入reduce之前进行排序,不是全局排序,如果设置的reduce个数大于1,那么只能保证每个reduce的输出有序,不保证全局有序
  • cluster by:根据指定的字段进行分桶,分桶数和设置的reduce个数相同,分桶后,每桶数据都会进行排序,相当于sort by和distribute by相结合
  • order by:将查询结果按照指定字段进行全局排序,因此输出文件只有一个,但是reduce也只有一个,所以当数据量很大时,计算时间很长
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值