热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

hive学习笔记(一)入门

目录数据仓库基本概念主要特征数据库与数据仓库的区别数仓的分层架构Hive的基本概念Hive架构Hive与Hadoop的关系数据库、数据库表操作​内部表的操作外部表的操

目录

数据仓库基本概念

主要特征

数据库与数据仓库的区别

            数仓的分层架构

Hive的基本概念

            Hive 架构

Hive 与 Hadoop 的关系

数据库、数据库表操作 

​ 内部表的操作

               外部表的操作

 内外部表的选择

              分区表的操作

 分桶表操作

                 修改表结构

hive表中加载数据




数据仓库基本概念

数据仓库是存数据的,企业的各种数据往里面存,主要目的是为了分析有效数据,后续会基 于它产出供分析挖掘的数据,或者数据应用需要的数据,如企业的分析性报告和各类报表 等。




主要特征

面向主题


数据仓库是面向主题的,数据仓库通过一个个主题域将多个业务系统的数据加载到一起,为了 各个主题(如:用户、订单、商品等)进行分析而建,操作型数据库是为了支撑各种业务而 建立。


集成性


数据仓库会将不同源数据库中的数据汇总到一起,数据仓库中的综合数据不能从原有的数据库 系统直接得到。因此在数据进入数据仓库之前,必然要经过统一与整合,这一步是数据仓库 建设中最关键、最复杂的一步(ETL),要统一源数据中所有矛盾之处,如字段的同名异义、异 名同义、单位不统一、字长不一致,等等。


非易失性


数据仓库的数据反映的是一段相当 长的时间内历史数据的内容,是不同时点的数据库的集合,以及基于这些快照进行统计、综 和重组的导出数据。数据仓库中的数据一般仅执行查询操作,很少会有删除和更新。但是 需定期加载和刷新数据。


时变性


虽然数据仓库的用户不能修改数据,但并不是说数据仓库的数据是永远不变 的。分析的结果只能反映过去的情况,当业务变化后,挖掘出的模式会失去时效性。因此数 据仓库的数据需要定时更新,以适应决策的需要。



数据库与数据仓库的区别

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


操作型处理,叫联机事务处理 OLTPOn-Line Transaction Processing,),也可以称面向交易 的处理系统,它是针对具体业务在数据库联机的日常操作,通常对少数记录进行查询、修 改。用户较为关心操作的响应时间、数据的安全性、完整性和并发支持的用户数等问题。传 统的数据库系统作为数据管理的主要手段,主要用于操作型处理。 分析型处理,叫联机分析处理 OLAP(On-Line Analytical Processing)一般针对某些主题的历 史数据进行分析,支持 管理决策。


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


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

数据仓库,是在数据库已经大量存在的情况下,为了进一步挖掘数据资源、为了决策需要而 产生的,它决不是所谓的大型数据库




数仓的分层架构

数据仓库的数据来源于不同的源数据,并提供多样的数据应用,数据自下而上流入数据仓库 后向上层开放应用,而数据仓库只是中间集成化数据管理的一个平台。

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

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

数据应用层(DAAPP:前端应用直接读取的数据源;根据报表、专题分析需求而计算

生成的数据。




Hive的基本概念

Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并 提供类SQL查询功能。 其本质是将SQL转换为MapReduce的任务进行运算,底层由HDFS来提供数据的存储,说白了 hive可以理解为一个将SQL转换MapReduce的任务的工具,甚至更进一步可以说hive就是一 个MapReduce的客户端


Hive 架构

 


  • 用户接口: 包括CLIJDBC/ODBCWebGUI。其中,CLI(command line interface)shell命 令行;JDBC/ODBCHiveJAVA实现,与传统数据库JDBC类似
  • 元数据存储: 通常是存储在关系数据库如mysql/derby中。Hive 将元数据存储在数据库 中。Hive 中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表 等),表的数据所在目录等。
  • 解释器、编译器、优化器、执行器: 完成HQL 查询语句从词法分析、语法分析、编译、优 化以及查询计划的生成。生成的查询计划存储在HDFS 中,并在随后有MapReduce 调用执



Hive Hadoop 的关系

Hive利用HDFS存储数据,利用MapReduce查询分析数据

安装不做说明,只是想说作为刚入门的小白的我们,使用  hive 要先启动 hadoop 集群,MySQL,关闭防火墙,将 mysql-connector jar包上传到 hive安装目录的 lib 文件夹中等一系列基本的操作。



  数据准备

​// student 文件
01 赵雷 1990-01-01 男
02 钱电 1990-12-21 男
03 孙风 1990-05-20 男
04 李云 1990-08-06 男
05 周梅 1991-12-01 女
06 吴兰 1992-03-01 女
07 郑竹 1989-07-01 女
08 王菊 1990-01-20 女// teacher 文件
01 张三
02 李四
03 王五// course 老师id
01 语文 02
02 数学 01
03 英语 03// s_id , c_id, s_score
01 01 80
01 02 90
01 03 99
02 01 70
02 02 60
02 03 80
03 01 80
03 02 80
03 03 80
04 01 50
04 02 30
04 03 20
05 01 76
05 02 87
06 01 31
06 03 34
07 02 89
07 03 98

数据库、数据库表操作 

   基本操作 跟 MySQL 语句 一样的,SQL 掌握了,这个学两天基本就入门了。

创建数据库

create database if not exists myhive;
use myhive;

创建数据库并指定位置  

create database myhive2 location '/myhive2';

删除数据库

drop database myhive2;

查看数据库更多详细信息  

desc database extended myhive2;

 查看表详细信息






 内部表的操作

创建表时,如果没有使用 external 关键字,则该表是内部表(managed table 。

// 创建表并指定表文件的存放路径
create  table if not exists stu2(id int ,name string) row format delimited
fields terminated by '\t' location '/user/stu2';
// 根据查询结果创建表 复制表 数据也会复制
create table stu3 as select * from stu2;
// 根据已经存在的表结构创建表 仅仅是 复制的表结构 没有 复制到数据
create table stu4 like stu;



外部表的操作

创建 表时加 external,就创建了外部 表。  

操作案例

分别创建老师与学生表外部表,并向表中加载数据

// 创建老师表
create external table teacher (t_id string,t_name string) row format
delimited fields terminated by '\t';
// 创建学生表
create external table student (s_id string,s_name string,s_birth string ,
s_sex string ) row format delimited fields terminated by '\t';
// 加载数据 到学生表
load data local inpath '/export/servers/hivedatas/student.csv' into table
student;
// 从 hdfs 上 加载 数据 techer.csv ,在hdfs中来说 是数据的移动
load data inpath '/hivedatas/techer.csv' into table teacher;

接下来我们我们删除 外部表 teacher 

 

 而删除 内部表 表数据进了垃圾桶 

 外部表删除 ,当时数据文件还在,我们再次创建 teacher 表   加载 数据,可以 去 hdfs 中  


 内外部表的选择




分区表的操作

在大数据中,最常用的一种思想就是分治,我们可以把大的文件切割划分成一个个的小的文件,这样每次操作一个小的文件就会很容易了,同样的道理,在hive当中也是支持这种思想 的,就是我们可以把大的数据,按照每月,或者天进行切分成一个个的小的文件,存放在不同 的文件夹中.

创建分区表语法  

create table score(s_id string,c_id string, s_score int) partitioned by
(month string) row format delimited fields terminated by '\t';

 创建一个表带多个分区

create table score2 (s_id string,c_id string, s_score int) partitioned by
(year string,month string,day string) row format delimited fields
terminated by '\t';

加载数据到分区表中 

load data local inpath '/export/servers/hivedatas/score.csv' into table
score partition (mOnth='20191025');

加载数据到多分区表中(多个子文件三个分区)

load data local inpath '/export/servers/hivedatas/score.csv' into table
score2 partition(year='2019',mOnth='10',day='25');

 查询某一分区的数据

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

select * from score where mOnth= '20191025' union all select * from score
where mOnth= '20191026';

查看分区

show partitions score;

添加一个分区

alter table score drop partition(mOnth= '20191027');

删除分区

alter table score add partition(mOnth='20191025');

分区表练习

需求描述

现在有一个文件score.csv文件,存放在集群的这个目录下/scoredatas/mOnth=201910,这个文 件每天都会生成,存放到对应的日期文件夹下面去,文件别人也需要公用,不能移动。需 求,创建hive对应的表,并将数据加载到表中,进行数据统计分析,且删除表之后,数据不能 删除,  创建外部分区表 

创建外部分区表

创建外部分区表,并指定文件数据存放目录

create external table score4(s_id string, c_id string,s_score int)
partitioned by (month string) row format delimited fields terminated by
'\t' location '/scoredatas';

 


 




分桶表操作

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

开启 Hive 的分桶功能

set hive.enforce.bucketing=true;

 设置 Reduce 个数

set mapreduce.job.reduces=3;

创建分桶表

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

我们这里使用普通表 ,通过将数据加载到 普通表 中,再将通过 insert  overwrite 给桶表中加载数据创建普通表,并通过insert overwriter的方式将普通表的数据通过查询的方式加载到桶表当中 去,mapreduce脑壳疼。

 创建普通表加载数据

create table course_common (c_id string,c_name string,t_id string) row
format delimited fields terminated by '\t';
load data local inpath '/export/servers/hivedatas/course.csv' into table
course_common;
// 通过insert overwrite给桶表中加载数据
insert overwrite table course select * from course_common cluster
by(c_id);

执行结果


 




修改表结构

把表score4修改成score5

alter table score4 rename to score5;

// 查询表结构
desc score5;
// 添加列
alter table score5 add columns (mycol string, mysco int);
// 更新列
alter table score5 change column mysco mysconew int;

hive表中加载数据

直接 向分区 insert into 入门 练手

insert into table score partition(mOnth='20191028') values
('001','002','100');

通过load方式加载数据

load data local inpath '/export/servers/hivedatas/score.csv' overwrite
into table score3 partition(mOnth='201910');

通过查询方式加载数据,   复制 score 的表结构,再将 分区 20191027(文件夹) 的数据 加载到 表score5(文件夹)

create table score5 like score;
insert overwrite table score4 partition(mOnth= '20191025') select
s_id,c_id,s_score from score;

 

 

 


推荐阅读
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • ubuntu用sqoop将数据从hive导入mysql时,命令: ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了软件测试知识点之数据库压力测试方法小结相关的知识,希望对你有一定的参考价值。 ... [详细]
  • MySQL数据库锁机制及其应用(数据库锁的概念)
    本文介绍了MySQL数据库锁机制及其应用。数据库锁是计算机协调多个进程或线程并发访问某一资源的机制,在数据库中,数据是一种供许多用户共享的资源,如何保证数据并发访问的一致性和有效性是数据库必须解决的问题。MySQL的锁机制相对简单,不同的存储引擎支持不同的锁机制,主要包括表级锁、行级锁和页面锁。本文详细介绍了MySQL表级锁的锁模式和特点,以及行级锁和页面锁的特点和应用场景。同时还讨论了锁冲突对数据库并发访问性能的影响。 ... [详细]
  • 什么是大数据lambda架构
    一、什么是Lambda架构Lambda架构由Storm的作者[NathanMarz]提出,根据维基百科的定义,Lambda架构的设计是为了在处理大规模数 ... [详细]
  • Oracle Database 10g许可授予信息及高级功能详解
    本文介绍了Oracle Database 10g许可授予信息及其中的高级功能,包括数据库优化数据包、SQL访问指导、SQL优化指导、SQL优化集和重组对象。同时提供了详细说明,指导用户在Oracle Database 10g中如何使用这些功能。 ... [详细]
  • 本文详细介绍了MysqlDump和mysqldump进行全库备份的相关知识,包括备份命令的使用方法、my.cnf配置文件的设置、binlog日志的位置指定、增量恢复的方式以及适用于innodb引擎和myisam引擎的备份方法。对于需要进行数据库备份的用户来说,本文提供了一些有价值的参考内容。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • MyBatis错题分析解析及注意事项
    本文对MyBatis的错题进行了分析和解析,同时介绍了使用MyBatis时需要注意的一些事项,如resultMap的使用、SqlSession和SqlSessionFactory的获取方式、动态SQL中的else元素和when元素的使用、resource属性和url属性的配置方式、typeAliases的使用方法等。同时还指出了在属性名与查询字段名不一致时需要使用resultMap进行结果映射,而不能使用resultType。 ... [详细]
  • Tomcat/Jetty为何选择扩展线程池而不是使用JDK原生线程池?
    本文探讨了Tomcat和Jetty选择扩展线程池而不是使用JDK原生线程池的原因。通过比较IO密集型任务和CPU密集型任务的特点,解释了为何Tomcat和Jetty需要扩展线程池来提高并发度和任务处理速度。同时,介绍了JDK原生线程池的工作流程。 ... [详细]
  • 本文介绍了Java高并发程序设计中线程安全的概念与synchronized关键字的使用。通过一个计数器的例子,演示了多线程同时对变量进行累加操作时可能出现的问题。最终值会小于预期的原因是因为两个线程同时对变量进行写入时,其中一个线程的结果会覆盖另一个线程的结果。为了解决这个问题,可以使用synchronized关键字来保证线程安全。 ... [详细]
  • 上图是InnoDB存储引擎的结构。1、缓冲池InnoDB存储引擎是基于磁盘存储的,并将其中的记录按照页的方式进行管理。因此可以看作是基于磁盘的数据库系统。在数据库系统中,由于CPU速度 ... [详细]
  • 腾讯安全平台部招聘安全工程师和数据分析工程师
    腾讯安全平台部正在招聘安全工程师和数据分析工程师。安全工程师负责安全问题和安全事件的跟踪和分析,提供安全测试技术支持;数据分析工程师负责安全产品相关系统数据统计和分析挖掘,通过用户行为数据建模为业务决策提供参考。招聘要求包括熟悉渗透测试和常见安全工具原理,精通Web漏洞,熟练使用多门编程语言等。有相关工作经验和在安全站点发表作品的候选人优先考虑。 ... [详细]
  • 大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记
    本文介绍了大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记,包括outputFormat接口实现类、自定义outputFormat步骤和案例。案例中将包含nty的日志输出到nty.log文件,其他日志输出到other.log文件。同时提供了一些相关网址供参考。 ... [详细]
  • 《Spark核心技术与高级应用》——1.2节Spark的重要扩展
    本节书摘来自华章社区《Spark核心技术与高级应用》一书中的第1章,第1.2节Spark的重要扩展,作者于俊向海代其锋马海平,更多章节内容可以访问云栖社区“华章社区”公众号查看1. ... [详细]
author-avatar
博饼薄饼
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有