数据仓库--Hive

数据仓库:数据仓库的目的是构建面向分析的集成化数据环境,为企业提供决策支持,数据仓库是存数据的,主要是为了分析有效数据,后续会基于它产出供分析挖掘的数据,或者数据应用需要的数据,如企业的分析性报告和各类报表等。

可以理解为:面向分析的存储系统

数据库和数据仓库的区别实际讲的是OLTP和OLAP的区别

操作型处理,叫联机事务处理OLTP,也可以称为面向交易的处理系统,针对具体业务在数据库联机的日常操作,通常对少数记录进行查询、修改。用户比较关心的是响应时间、数据安全性、完整性和并大支持的用户数等。

分析性处理,叫联机分析处理OLAP。一般针对某些主题的历史数据进行分析,支持管理决策。

首先要明白,数据仓库的出现,并不是要取代数据库。

1、数据库是面向事务的设计,数据仓库是面向主题设计的。

2、数据库一般存储业务数据,数据仓库存储的一般是历史数据。

3、数据库设计是尽量避免冗余,一般针对某一业务应用进行设计,比如一张简单的User表,记录用户名、密码等简单数据即可,符合业务应用,但是不符合分析。数据仓库在设计有意引入冗余,依照分析需求,分析维度、分析指标进行设计。

4、数据库是为了捕获数据而设计,数据仓库是为分析数据而设计

数据仓库的分层架构:

按照数据流入流出的过程,数据仓局架构可以分为三层--源数据、数据仓库、数据应用

源数据层(ODS):此层数据无任何更改,直接沿用外围系统数据结构和数据,不对外开放,为后一步的数据处理做准备。

数据仓库层(DW):也称为细节层,DW层的数据应该是一致的,准确的、干净的过程,即对源系统数据进行了清洗后的数据。

数据应用层(DA或APP):前端应用直接读取的数据源;根据报表、专题分析区需求而计算生成的数据。

数据仓库从各数据源获取数据及在数据仓库内的数据转换和流动都可以认为是ETL(抽取Extra、转化Transfer、装载Load)的过程,ETL是数据仓库的流水线。

Hive简介:

Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能。

其本质是将SQL转换为MapReduce的任务进行计算,底层由HDFS来提供数据的存储,说白了hive可以理解为一个将SQL转换为MapReduce任务的工具,甚至更进一步可以说hive是一个MapReduce的客户端

创建表并指定字段之间的分隔符

create table if not exists stu(id int,name String) row format delimited fields terminated by '\t';

创建表并指定表文件的存放路径

create table if not exists stu(id int,name String) row format delimited fields terminated by '\t' location '/user/stu';

根据查询结果创建表(通过复制表结构和表内容创建新表)

create table stu2 as select * from stu;

根据已经存在的表结构创建表

create table stu3 like stu2;

一般情况下最好设置为外部表

外部表说明:

外部表因为是指定其他的hdfs路径的数据加载到表当中来,所以hive表会认为自己不完全独占这份数据,所以删除hive表的时候,数据仍然存在hdfs中,不会删掉

内部表和外部表的使用场景:

每天将手机到的网站日志定期流入HDFS文本文件。在外部表(原始日志表)的基础上做大量的统计分析,用到中间表、结果表使用内部表存储,数据通过select+insert进入内部表

create external table student(s_id String,s_name String) row format delimited fields terminated by '\t';

加载数据

load data local inpath 'hdfs路径' into table XXX;

加载数据并覆盖已有数据

load data local inpath 'hdfs路径' overwrite into table XXX;

从hdfs文件系统向表中加载数据(需要提前将数据上传到hdfs文件系统)

cd /export/servers/hivedatas

hdfs dfs -mkdir -p /hivedatas

hdfs dfs -put teacher.csv /hivedatas/

load path inpath '/hivedatas/teacher.csv' into table teacher;

分区表的操作:

create table score(s_id String,s_name String) partitioned by(month String) row format delimited fields terminated by '\t';

创建一个表带多个分区

create table score(s_id String,s_name String) partitioned by(year String,month String,day String) row format delimited fields terminated by '\t';

加载数据到分区表中

load data local inpath 'hdfs路径' into table XXX partition (month = '201806');

多分区表联合查询(使用union all)

select * from score where month = '201806' union all select * from score month = '201806';

查看分区

show partitions 表名;

添加一个分区

alter table score add partition(month = '201806' );

删除分区

alter table score drop partition(month = '201806' );

进行表的修复(建立表和数据文件之间的一个关系映射)

msck repair table XXX;

分桶表:

分桶,就是将数据按照指定的字段进行划分到多个文件当中去,分桶就是MR中的分区

开启Hive中的分桶操作

set hive.enforce.bucketing = true

设置Reduce的个数

set mapreduce.job.reduces=3;

创建分桶表

create table cource(c_id String,c_name String) clustered by(c_id) into 3 buckets row format delimited fields terminated by '\t';

桶表的数据加载,由于通标的数据加载通过hdfs dfs -put文件或者通过load data均不好使,只能通过insert overwrite

创建普通表,并通过nsert overwrite方式将普通标的数据通过查询的方式加载

insert overwrite table cource select * from cource_common cluster by (c_id);

常用函数

求总行数

select count(1) from score;

求分数的最大值

select max(score) from score;

求分数的最小值

select min(score) from score;

求分数的总和:

select sum(score) from score;

求分数的平均值(avg)

select avg(score) from score;

Limit语句

select * from score limit 3;

Like和RLike

%代表0个或多个字符

_代表一个字符

RLike子句是Hive中这个功能的一个扩展,其可以通过Java的正则表达式来指定匹配条件

查询所有以8开头的所有成绩

select * from score where s_score like '8%';

查询第二个数值为9的所有成绩数据

select * from score where s_score like '_9%';

查询s_id中含1的数据

select * from score where s_id rlike '[1]';  # like '%1%'

Having语句

1、having和where不同点

where针对表中列发挥作用,查询数据;having针对查询结果中的列发挥作用,筛选数据。

where后面不能与分组函数,而having后面可以使用分组函数

habing只用于group by 分组统计语句

排序

全局排序

ORDER BY 全局排序,一个reduce

1、使用ORDER BY 子句排序ASC,升序是默认,DESC是降序

2、ORDER BY 子句在SELECT语句的结尾

分区排序

Distribute By:类似MR中的partition,进行分区,结合sorted by 使用

注意:Hive要求DISTRIBUTE BY语句要写在SORT BY语句之前

例如:先按照学生id进行分区,再按照学生成绩进行排序

1、设置reduce的个数,将我们对应的s_id划分到对应的reduce当中去

set mapreduce.job.reduces = 7;

通过distribute by 进行数据的分区

insert overwrite local directory '/export/servers/hivedatas/sort' select * from source distribute by s_id sort by s_score

自定义函数:

根据用户自定义函数类别分为以下三种:

UDF:一进一出

UDAF:聚集函数,多进一出

类似于:count/max/min

UDTF:一进多出

使用自定义UDF函数:

自定义类继承UDF,并且重写evaluate方法,之后打包生成jar包

上传到apache-hive的安装包的lib目录下

然后执行以下命令

add jar /apache-hive-2.7.5-bin/lib/my_udf.jar;

设置函数与我们的自定义函数关联

create temporary function my_udf as 'my_udf类所在的全路径类名'

使用: select my_udf('hello world');  =>就会打印出你自定义的函数内容了

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342