hive初步学习

数据仓库技术及应用

一、Hive 简介

1、Hive 架构

  • UI

用户提交接口,用于用户提交查询和其它操作等。

  • Driver

接收查询的组件。该组件实现了会话句柄,并提供基于 JDBC/ODBC 接口的execute、 fetch APIs。

  • Compiler

该组件解析查询,在不同查询块和查询表达式中做语义分析,最终借助从metastore查找的表和分区元数据生成执行计划。

  • MetaStore

存储所有表、分区的结构化信息包括:列和列类型信息、读写数据所需的序列化器和反序列化器以及相关存储的hdfs文件。

  • Execution Engine

执行由Compiler生成的执行计划。执行计划是一个由stages组成的有向无环图,执行引擎管理stage之间的依赖关系,并让合适的组件执行对应的stage。

Hive 架构图

2、Hive 存储模型

  • 行式存储模型:以行为单位存储数据,适合于实时查询和增量更新

  • 列式存储模型:以列为单位存储模型,适合于批量查询和聚合计算

  • ORC 存储模型:Optimized Row Columnar(ORC) 是 Hadoop 中一种高效的列式存存储格式,支持压缩和索引,适合于大规模数据的存储和查询

  • Parquet 存储模型:Parquet 是一种跨平台的列式存储格式,支持压缩和高效的列操作,适合于大规模数据的存储和查询

  • Avro 存储模型:Apache Avro 是一种数据序列化系统,支持多种编程语言和数据存储格式,适合于复杂数据结构的存储和查询

3、Hive 的基本数据类型

类型描述示例
BOOLEANtrue/falseTRUE
TINYINT1字节有符号整数,从-128到1271Y
SMALLINT2字节有符号整数,从-32768到327671S
INT4字节有符号整数,从-2147483648到21474836471
BIGINT8字节有符号整数,从-9223372036854775808到92233720368547758071L
FLOAT4字节单精度浮点数1.0
DOUBLE8字节(64位)双精度浮点数1.0
DECIMAL任意精度有符号小数1.0
STRING无上限可变长度字符串‘a’, “a”
VARCHAR可变长度字符串‘a’, “a”
CHAR固定长度字符串‘a’, “a”
BINARY字节数组-
TIMESTAMP精度到纳秒的时间戳‘2020-03-01 00:00:00’
DATE日期‘2020-01-01’

4、HIve 的库/表操作

修改数据表表名:

ALTER TABLE table_name RENAME TO new_table_name

清空表:

truncate table table_name

5、Hive 内部表与外部表的定义

内部表(managed table):未被 external 修饰的表,也叫管理表

外部表(external table):被 external 修饰的表。

内部表被 drop 后,表的 data 和 metadata 都会被删除;

外部表被 drop 后,表的 metadata 会被删除,但是 data 不会被删除。

  • 创建内部表

create table student1(
id int,
name string
)
row format delimited fields terminated by '\t'
sorted as textfile;
  • 创建外部表

create external table student2(
id int,
name string)
row format delimited fields terminated by '\t'
sorted as textfile;

6、Hive 元数据

概述:Hive元数据包括hive库信息、表信息(表的属性、表的名称、表的列、分区及其属性)以及表数据所在的目录等。

Hive的元数据,默认是存储在derby中的,但是我们一般会修改其存储在关系型数据库比如MYSQL中(其可以在hive配置中修改),在关系型数据库中会有一个hive库,存放相应的表。

6.1 存储模式图
  • 单用户存储模式

  • 多用户存储模式

  • 远程服务存储模式

7、HQL

hive 关联表方式:

例表:

  • 内关联:join on

select * from jion1 join join2 on jion1.id = jion2.id;

作用:将表1和表2的字段id相同的内容 关联到一个表里。

  • 左外关联:left join on

select * from jion1 left join join2 on jion1.id = jion2.id;

作用:以join左边的表为标准进行连接(即保留左边表的字段值,右边表不符合on条件的用null表示)。

  • 右外关联:right join on

select * from jion1 right join join2 on jion1.id = jion2.id;

作用:以join右边的表为标准进行连接(即保留右边表的字段值,左边表不符合on条件的用null表示)。

  • 全外关联:full join on

select * from jion1 full join join2 on jion1.id = jion2.id;

作用:两个表连接,表留所有字段的值,不符合on条件的用null表示。

  • 左半连接

内连接的一半

  • 交叉连接

笛卡尔积

7.1 排序
  • order by

对结果集进行全局排序,数据规模较大时,比较耗时

  • sort by

指出数据在每个 Reducer 内如何排序的,通常与 DISTRIBUTE BY 一起使用

  • DISTRIBUTE BY

控制 Map 输出在 Reducer 中的划分

  • CLUSTER BY

相当于 DISTRIBUTE BY 和 SORT BY

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值