hive 01

hive就是MapReduce的封装

hbase是hdfs的包装,本质是部署在hdfs上的数据库克服随机读写的缺点

Hive是基于一个统一的查询分析层,通过sql语句对HDFS上的数据进行查询统计和分析,hive本身并不能存数据。

它是一个SQL解析引擎,将SQL转译成MR Job之后在Hadoop平台上运行,达到快速开发的目的,是纯逻辑表没有物理存储,不支持数据的修改和删除(在0.14版本后可以更新,但是默认不支持)

hive要制定三个属性

行分隔符(空格、\t、\001)

列分隔符(\n)

读取文件方法:TextFile(磁盘开销大)、SequenceFile(二进制)、RCFile(hive专门推出的面向列的数列格式)

SequenceFlie是Hadoop提供的一种二进制文件,通常是以(key,value)的形式数列化到文件中

Java里有writeable接口进行序列化和反序列化
 

select word,count(*)

from (

select

explode(split(sentence, ' '))

word

from article

) t

group by word

 这段代码就用hive实现了wordcount

split(sentence,' ')这个把读进来的每一个字符串都转换成了一个数组用' '分割

explode 是展开用的输入一行转成多个行(读入一个数组转成一条记录供外部使用)

这几个都是函数,但是有不同

UDF:直接应用于select语句(查询的时候对字段进行格式化处理,如大小写转换)

特点:一进一出,一对一

UDAF:

多对一的场景

运用于group by的场景

UDTF:一对多

读时模式:

只有在读的时候才检查、解析字段、schema(据库的组织和结构)

加载数据写数据快

传统数据库写的慢,读的时候会得到优化

Hive的组织结构

一篇文章搞懂 Hive 的系统架构_hive架构组成部分-CSDN博客

driver相当于把sql(hql)变成一个或多个MapReduce是核心部分, 自身不会生成mr会通过一个执行计划执行mr。

默认的本地数据库是derby(单用户)

一般多用户远程服务模式:MySQL

hive有四个数据类型

数据表:

table

external table

分区表:

partition

bucket

每一个table都有一个目录存储数据,一个表可以有多个分区,一个table可以有多个partition

也不能创建太多分区,只适合取值有限的否则会产生很多小文件,工作中常见的是拿时间、地域、系统分区

分桶(bucket)

table -> partition -> bucket(partitionx目录下的part

table -> bucket

分库,把一张表拆成多个表

例如分32个 user_id % 32

tableOnlineBroadcast_0

tableOnlineBroadcast_1

....

tableOnlineBroadcast_31

可以通过这种方式把两个大表之间的join和两个小表之间的join

两个优点

1.优化查询

2.方便采样

内部表和外部表之间的差别

如果drop的是内部表,内部表里的数据也会丢失,外部表则只drop表结构不丢失数据

支持原生类型和复合类型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值