HIVE数据仓库
HIVE数据仓库
HQL
hive通过类似sql的语法来进行分布式计算,hive执行命令时,将HQL转换为MapReduce计算,所以hive其实是一种基于Hadoop的计算框架,其底层计算架构是MapReduce
hive是基于Hadoop的数据仓库,可将结构化的文件转换为数据表,通过HQL查询等
hive不支持在线事物处理,也不至此行级别的数据查询更行和删除
数据仓库和数据库的区别
1.数据仓库人为引入冗余,数据库避免冗余
2.数据仓库作用于分析离线分析历史数据,数据库在线捕获实时数据
Hive的安装的配置
1.hive安装需对应Hadoop版本,与之匹配
2.hive安装前需安装JDK、Hadoop,并完成环境配置
3.解压安装后面,执行bin目录下.hive脚本,显示出hive命令输入提示,既安装成功
Hive原理
1.hive数据存放在hdfs/user/hive/warehouse/***.db目录下
2.hive表既hdfs/user/hive/warehouse/***.db目录下的子目录信息
3.hive数据及表下的数据文件
4.HQL执行时是转换为MapReduce计算
5.hive默认使用default数据库,对应hdfs/user/hive/warehouse目录下,其创建的表也在该目录下
Hive表
内部表、外部表
内部表:
通过hive创建表,在向其中录入数,既先有hive表,再存入数据为内部表
创建语法:create table 表名 (字段信息)row format delimited fields terminated by '分隔符'
外部表:
关键字:external
在hdfs中已有格式化数据,在hive中创建表读取已有数据,既先有数据后建表为外部表
创建语法:create external table 表名(字段信息)row format delimited fields terminated by '分隔符' location '文件地址'
***当内部表被删除时,其在hdfs中对应的文件夹及文件,也会被删除
***当外部表被删除时,其在hdfs中对应的文件夹及文件,不会被删除
外部表/内部表可以直接在其对应的hdfs文件夹下导入对应格式的文件,实现数据的添加录入
分区表、分桶表
分区表:
所谓分区表,既在hdfs中对应表目录下建立子目录(分区),每个子目录中存放对应分区的数据
当表中数据过多,且时常根据某字段信息对表中数据查询时,可以对表进行分区
关键字:partitioned by
创建语法:create table 表名 (字段信息) partitioned by (分区名 类型) row format delimited fields terminated by '分隔符'
如果在hdfs中手动创建分区目录,因为分区在hive是元数据,所以无法识别,需要手动在hive中添加分区信息
例:alter table 表名 add partition(分区名称=分区值);
分桶表:
分桶表既根据相应的列的hash值模余分桶数分别分别存放
一张表可以同时分区又分桶
分桶表的作用:我们经常拿一些样例数据做测试,通过分桶表查询部分数据
关键字:clustered by(字段) into 桶数 buckets
创建语法:create table 表名 (字段信息) clustered by (字段) into 桶数 buckets row format delimited fields terminated by '分隔符';
根据桶查询:select * from 表名 tablesample(bucket 桶数 out of 前几个桶 on 分桶字段);
例:select * from stu tablesample(bucket 1 out of 4 on id);
查询4个桶中第一个桶中的数据;
Hive语法
数据类型
hive类型-java类型
tinyint -byte
smartint -short
int-int
bigint-long
boolean-boolean
float-float
double-double
string-String
timestamp-TimeStamp
binary-byte[]
创建:
crtaete table...
修改:
alter table...
查看表:
show tables
读取外部数据:
load data local inpath '文件地址' into table 表名 【可加入分区】
插入数据:
insert into 表名
删除表:
drop table 表名
分页查询:
limit
查询数据:
select
关联查询:
join
Hive内置函数
可以在网上查找对应文档
Hive的UDF
Hive的自定义函数,简称UDF
1.我们可以新建一个java工程,导入Hive相关的jar包,新建一个类继承extends Hive的UDF类
2.实现UDF中方法evaluate,方法可设定任意的参数以及返回值,但为了能让MapReduce处理,String类型我们要使用Text类型处理
3.将写好的程序打成jar包,上传系统
4.在hive命令行下申明方法:add jar 目录/**.jar
5.为当前jar下UDF取一个名称:create temporary function 名称 as 'jar包下类的全路径名'
之后我们就可以在hql中调用该方法了
例:
1.书写java程序
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.hadoop.hive.ql.exec.UDF;
public class testUDF extends UDF {
public String evaluate(String srt){
return str.substring(0,10);
}
}
2、打jar包,并上传到制定的路径
add jar /opt/litong/lib/hiveUDF.jar
3、指定属性类,创建function
create temporary function HiveTestUdf as 'com.litong.hive.udf.testUDF';
4.使用方法
select HiveTestUdf (字段信息作为参数) from 表名;

浙公网安备 33010602011771号