梳理HIVE基础

一、Hive基本概念

1.1 hive是什么

hive是基于hadoop的一个数仓分析工具,hive可以将hdfs上存储的结构化的数据,映射成一张表,然后让用户写HQL(类SQL)来分析数据

   tel              up           down
1383838438         1345         1567
1383838439         5345         1567
1383838440         1241         16577
1383838441         3453         15757
1383838434         35355        1567567

按照手机号 分组,统计每个手机号的总流量

select  tel,up+down from test; 

hive的本质其实就是hadoop的一个客户端,hive底层不存储任何数据,hive表的数据存在hdfs上,hive表的元数据存在关系型数据库中

默认是derby,我们不一般不用默认的derby来存,一般都会修改为mysql。

元数据:描述数据的数据

Hive其实就是将用户写的HQL,给翻译成对应的mr模板,然后执行这些mr程序

hive底层执行引擎其实就是MapReduce,mr运行在yarn上

1.2 hive的优缺点

优点:操作简单,采用类sql的语法分析数据,门槛低,大大的降低了大数据分析的难度,通用性高

缺点:不够灵活,机翻粒度比较粗,调优困难。因为底层执行引擎还是mr,所以延迟较高,不能像关系型数据库那样,立马返回结果

并且底层存储是hdfs,不支持随机写,只能追加,所以hive不支持行级别的更新和删除(delete 和 update)

1.3 hive的架构原理

客户端:命令行客户端,jdbc客户端

数据存储:hdfs

底层执行引擎:mr

元数据库:hive将元数据默认存在derby中,我们一般在安装hive的时候,会修改成mysql

dirver四个器

解析器:将hql语句转换成AST抽象语法树,解析sql是否有误

编译器:将解析后的hql编译成逻辑执行计划,暂时不执行

优化器:对逻辑计划进行优化,调优

执行器:将优化后的逻辑计划执行,其实就是翻译成对应的mr程序,在yarn上运行

1.4 hive和关系型数据库对比

hive不是数据库,不是数据库,不是数据库

hive除了查询语言HQL跟SQL很像之外,别的跟数据库再也没有半点相似可言

数据更新 数据规模 执行延迟 底层引擎 数据存储

二、Hive安装

2.1 hive访问

1)通过hive自带的beeline客户端访问

beeline -u jdbc:hive2://hadoop102:10000 -n zjp
  1. hive脚本访问
hive

2.2 hive交互命令

交互命令使用场景:在shell脚本里面不能人为的进入hive客户端交互写sql,所以要通过hive -e或者-f两个交互参数进行写入

1)hive -e

hive -e "select * from student"

2)hive -f

hive -f stu.sql

2.3 hive参数设置方式

1 通过配置文件设置 (永久生效)

在hive的家目录下面的conf文件夹下的hive-site.xml hive-env.sh hive-log4j2.properties

2 通过命令行参数来设置 (临时生效,只针对当前客户端连接)

hive -hiveconf 参数名=参数值
beeline -u jdbc:hive2://hadoop102:10000 -n atguigu -hiveconf 参数名=参数值

3 通过set命令设置(临时生效,只针对当前客户端连接)

我们连接到hive的客户端以后,可以通过set语句来设置参数

查看所有参数设置

set;

查看单个参数的值

set 参数名;

设置单个参数的值

set 参数名=参数值;

参数设置优先级:

hive-default.xml < hive-site.xml < -hiveconf 参数名=参数值 < set 参数名=参数值

三、数据类型

3.1 基本数据类型

HIVE MySQL JAVA 长度 例子
TINYINT TINYINT byte 1byte有符号整数 2
SMALINT SMALINT short 2byte有符号整数 20
INT INT int 4byte有符号整数 20
BIGINT BIGINT long 8byte有符号整数 20
BOOLEAN boolean 布尔类型,true或者false TRUE FALSE
FLOAT FLOAT float 单精度浮点数 3.14159
DOUBLE DOUBLE double 双精度浮点数 3.14159
STRING VARCHAR string 字符系列。可以指定字符集。可以使用单引号或者双引号。 ‘now is the time’ “for all good men”
TIMESTAMP TIMESTAMP 时间类型
BINARY BINARY 字节数组

利用基本数据类型建表测试

create table test(id int,weight double,name string,money bigint);

利用insert语句按照指定的数据类型插入一条数据

insert into test values(1001,75,"zhangsan",1000000000000);

3.2 集合数据类型

数据类型 描述 语法示例
STRUCT 和c语言中的struct类似,都可以通过“点”符号访问元素内容。例如,如果某个列的数据类型是STRUCT{first STRING, last STRING},那么第1个元素可以通过字段.first来引用。2 struct() 例如 struct<street:string, city:string>
MAP MAP是一组键-值对元组集合,使用数组表示法可以访问数据。例如,如果某个列的数据类型是MAP,其中键->值对是’first’->’John’和’last’->’Doe’,那么可以通过字段名[‘last’]获取最后一个元素 map() 例如map<string, int>
ARRAY 数组是一组具有相同类型和名称的变量的集合。这些变量称为数组的元素,每个数组元素都有一个编号,编号从零开始。例如,数组值为[‘John’, ‘Doe’],那么第2个元素可以通过数组名[1]进行引用。 Array() 例如array

测试数据

songsong,bingbing_lili,xiao song:18_xiaoxiao song:19,hui long guan_beijing_10010
yangyang,caicai_susu,xiao yang:18_xiaoxiao yang:19,chao yang_beijing_10011

在hive中建表描述上述数据

create table person(
name string,
friends array<string>,
children map<string,int>,
address struct<street:string,city:string,email:int>
)
row format delimited fields terminated by ','
collection items terminated by '_'
map keys terminated by ':'
lines terminated by '\n';

加载数据

load data local inpath '/opt/module/hive/datas/person.txt' into table person;

查询数据

select * from person;

查出来songsong 这个人的姓名,第一个朋友,孩子xiaoxiao song的年龄,和他的邮编

select name, friends[0],children['xiaoxiao song'],address.email from person where name = "songsong";
select name, friends[1],children['xiao song'],address.street from person;

3.3 类型转换

1)隐式(自动)类型转换

(1)任何整数类型都可以隐式地转换为一个范围更广的类型,如TINYINT可以转换成INT,INT可以转换成BIGINT。

(2)所有整数类型、FLOAT和STRING类型都可以隐式地转换成DOUBLE。

(3)TINYINT、SMALLINT、INT都可以转换为FLOAT。

(4)BOOLEAN类型不可以转换为任何其它的类型。

2)显示(强制)类型转换

​ CAST( vlaue AS type)

例如:select * from cast('1' as int) + 2;

四、DDL数据定义语言

4.1 库的DDL

1 创建数据库

CREATE DATABASE [IF NOT EXISTS] database_name        --指定数据库名称
[COMMENT database_comment]                           --指定数据库描述
[LOCATION hdfs_path]                                 --指定创建的数据库在hdfs上存储的路径
[WITH DBPROPERTIES (property_name=property_value, ...)];   --指定库的一些属性

案例实操

create database if not exists db_hive
comment "this is my first db"
with dbproperties ("name"="db_hive","owner"="atguigu");

create database if not exists db_hive;

--创建数据库,并指定在hdfs上的路径
create database if not exists db_hive2
location '/db_hive2';


2 查询数据库

show databases

3 查看数据库详情

--简单查看
desc database 数据库名;
--详细查看 (详细查看可以看到库的属性信息,简单查看看不到)
desc database extended 数据库名;

4 切换数据库

use 数据库名;

5修改数据库

只能修改数据库的属性信息,别的都无法更改。例如:库名,库的存储位置等元数据信息无法更改

alter database db_hive set dbproperties('createtime'='20200624');

6删除数据库

注意:删除掉数据库以后,hdfs上对应的目录也会删除,谨慎操作。

drop database 数据库名 cascade;

--如果数据库不为空,可以在最后加上cascade强制删除
drop database 数据库名 cascade;

--为了更严谨,我们可以在删除之前判断数据库是否存在
drop database if exists 数据库名 cascade;

4.2表的DDL

1创建表

CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name          --指定表名  【external 外部表/内部表】
[(col_name data_type [COMMENT col_comment], ...)]           --指定表的列名,列类型 【列描述】
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值