数仓工具Hive必知必会

1 Hive架构图

1.1 客户端

用户通过客户端访问Hive,简单查询一般在Linux上使用belline进行交互;对于Java程序,可以通过JDBC访问Hive。

1.2 Metastore

元数据相关,Hive默认存储在Derby数据库,缺点用户不能同时执行两个Hive CLI实例,因此实际生产中常常使用Mysq进行替代。

1.3 解析器、编译器、优化器和执行器

1)解析器:将SQL字符串转换成抽象语法树AST,这一步一般都用第三方工具库完成,比如antlr;对AST进行语法分析,比如表是否存在、字段是否存在、SQL语义是否有误。
2)编译器:将AST编译生成逻辑执行计划。
3)优化器:对逻辑执行计划进行优化。
4)执行器:把逻辑执行计划转换成可以运行的物理计划。

1.4 计算引擎

离线分析的计算引擎主要有Spark和MapeReduce。

1.5 存储层

大数据存储的底层一般使用HDFS。
在这里插入图片描述

2 Hive数据类型和文件格式

2.1 常用数据类型

在这里插入图片描述

1)String类型是一个可变的字符串,相当于数据库的varchar类型,理论存储大小为2GB,但是不能声明定长。关系型数据库提供定长字符类型是基于性能优化的角度,方便建立索引,提高点查速度。而Hive主要是做离线分析,通常是将大批量的数据从HDFS加载进来分析。

2)Hive的集合类型虽然会破坏了数据库的三大范式原则,可能会造成数据冗余,从而导致不必要的磁盘消耗。但是可以减少多表关联,从而减少磁盘寻址次数。

2.2 数据类型转换

在这里插入图片描述

2.3 读时模式

传统数据库采用写时模式(schema on write),即在写数据到数据库时对模式进行验证。而Hive采用读时模式(schema on read),即数据写入时不做验证,而是等到查询时候才进行。这是原因是Hive本身不存储任何数据,另一原因是Hive主要用于查询,当插叙的数据中某些列不存在时候,该列的返回值为nul值。l

2.4 数据类型实操

1)建表

hive (default)> create table if not exists animal(
id int,
kind array<string>,
nums map<string, int>,
address struct<district:string, city:string>
)
row format delimited fields terminated by ','
collection items terminated by '_'
map keys terminated by ':'
lines terminated by '\n';

字段解释:
row format delimited fields terminated by ‘,’ – 列分隔符
collection items terminated by ‘_’ –MAP STRUCT 和 ARRAY 的分隔符数据分割符号
map keys terminated by ‘:’ – MAP中的key与value的分隔符
lines terminated by ‘\n’; – 行分隔符

2)准备数据
将下面数据保存到/opt/bigdata/data/hive/animal.txt中

1,fish1_fish2,fish1:200_fish2:300, HaiZhu_GZ
2,dog1_dog2,dog1:100_dog2:1000,Longgang_SZ

3)加载数据

hive (default)> load data local inpath '/opt/bigdata/data/hive/animal.txt' into table animal;

4)查询数据

hive (default)> select id, kind[0], nums['fish1'], address.district, address.city from animal where address.city='GZ';

5)数据格式转换

hive (default)> select cast(nums['fish1'] as int) from animal where address.city='GZ';

3 数据定义语言(DDL)

3.1 数据库操作

在这里插入图片描述

3.2 表的操作

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值