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 表名; 

posted @ 2018-11-29 13:58  丶Biu~  阅读(15)  评论(0)    收藏  举报