Hive基本知识介绍

Hive是个啥?

用类似sql语句实现对分布式存储系统的数据读写、管理功能的软件。HIVE不同于RDBMS(一般指关系数据库管理系统)

Hive特点

1.使用类sql语句分析大数据,避免借助MapReduce程序分析数据

2.数据存储在HDFS上,不是Hive软件上(所以schema变更的时候,仅仅更新metastore)

3.Hive将数据映射成数据库和一张表,库和表的元数据信息一般存在关系型数据库

Hive缺点:

 1.HQL表达能力有限。有些复杂的运算不易表达。

 2.Hive效率低,调优困难,可控性差,生成mr不够智能。

 3.spark的sparkSQL可以有效提高sql在Hadoop的分析运行效率。

什么是元数据?

元数据:描述数据的数据

类比一本书,书的书名、isbn号、作者、出版社、目录等信息就是一本书的元数据。书的内容是数据

hive的底层存储:

hive的数据是存储在HDFS上,hive中的库和表可以看作是对HDFS上数据的一个映射。所以hive必须运行在一个hadoop集群。

hive语句背后的执行过程:

hive中的执行器,将最终要执行的MapReduce程序放到YARN上以一系列job进行执行。

YARN是啥?

hadoop的一个资源管理系统。

 DDL语法:(操作数据库、表、列等,常见关键字为CREATE ALTER DROP)

创建一个数据库会在HDFS上创建一个目录

create database if not exists user_db

查看数据库相关信息

describe database user_db

切换数据库

use user_db

创建表

1.create table方式

2.create table as select 根据select语句查询的结果自动创建表。

3.create table like tablename1 克隆tablename1这样的表

外部表与内部表

外部表:

外部表没有被hive完全控制。

加载数据和创建表同时完成(create external table ... lacation 目录),且实际数据是
存放在location 后面指定的hdfs路径,不会移动到hive的数据仓库目录中。当删除一个外部表,仅删除该链接。

create external table animal(
name string,
id string
);

内部表:

内部表的创建过程和加载过程可以分别独立完成,也可以在一个语句中完成。而且内部表在加载数据的过程中,
实际数据会被移动到hive的数据仓库目录下。若删除内部表,这元数据和仓库的数据都会被同时删除。

分区表:

普通表和分区表的区别在于:一个Hive表在HDFS上是有一个对应的目录来存储数据,普通表的数据直接存储在这个目录下,而分区表数据存储时,是再划分子目录来存储的。一个分区一个子目录。主要作用是来优化查询性能。

--创建经销商操作日志表
create table user_action_log
(
companyId INT comment   '公司ID',
userid INT comment   '销售ID',
originalstring STRING comment   'url', 
host STRING comment   'host',
absolutepath STRING comment   '绝对路径',
query STRING comment   '参数串',
refurl STRING comment   '来源url',
clientip STRING comment   '客户端Ip',
cookiemd5 STRING comment   'cookiemd5',
timestamp STRING comment   '访问时间戳'
)
partitioned by (dt string)
row format delimited fields terminated by ','
stored as textfile;

这个例子中,这个日志表以dt字段分区,dt是个虚拟的字段,dt下并不存储数据,而是用来分区的,实际数据存储时,dt字段值相同的数据存入同一个子目录中,插入数据或者导入数据时,同一天的数据dt字段赋值一样,这样就实现了数据按dt日期分区存储。

 DML操作:是对表中的数据进行增、删、改的操作(INSERT,UPDATAE,DELETE)

 

posted @ 2020-07-13 10:24  猫七的blog  阅读(297)  评论(0编辑  收藏  举报