Hive学习笔记


由于工作需求,学习了 尚硅谷Hive教程1-41集,并根据课程内容整理以下笔记

1.基础知识

1.1概念

Hive:由Facebook开源用于解决海量结构化日志的数据统计。
Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类SQL查询功能。
本质是:将HQL转化成MapReduce程序

 
 
  • 1
  • 2
  • 3

1.2架构原理

在这里插入图片描述

1.3Hive和数据库比较

由于 Hive 采用了类似SQL 的查询语言 HQL(Hive Query Language),因此很容易将 Hive 理解为数据库。
其实从结构上来看,Hive 和数据库除了拥有类似的查询语言,再无类似之处。

 
 
  • 1
  • 2

2.基本操作

2.1常用交互命令

hive -e "sql语句"	# 不进入hive交互窗口执行sql语句
hive -f xxx.sql		# 不进入hive交互窗口执行脚本中的sql语句

 
 
  • 1
  • 2

2.2其他命令操作

hive>exit;	# 退出hive窗口
hive>quit;	# 退出hive窗口
hive>dfs -ls /;	# 查看hdfs文件系统
hive>! ls /opt/module/datas;	# 查看本地文件系统
cat .hivehistory	# 查看在hive中输入的所有历史命令

 
 
  • 1
  • 2
  • 3
  • 4
  • 5

3.数据类型

3.1基本数据类型

在这里插入图片描述

3.2集合数据类型

在这里插入图片描述

4.DDL数据定义

4.1CRUD操作

create database db1 if not exists;
show databases;
desc database db1;	# 显示数据库信息
use db1;
alter database db1 set dbproperties('createtime'='20170830');	# 修改数据库
drop database db1 if exists db1;	# 删除空数据库
drop database db1 cascade;	# 强制删除非空数据库

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

4.2表

4.2.1建表

# 语法
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name 
[(col_name data_type [COMMENT col_comment], ...)] 
[COMMENT table_comment] 
[PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)] 
[CLUSTERED BY (col_name, col_name, ...) 
[SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS] 
[ROW FORMAT row_format] 
[STORED AS file_format] 
[LOCATION hdfs_path]
# 实例
create table if not exists student2(
id int, name string
)
row format delimited fields terminated by '\t'
stored as textfile
location '/user/hive/warehouse/student2';

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

4.2.2表的分类

  1. 管理表
    默认创建的表都是管理表,有时也被称为内部表。Hive默认情况下会将这些表的数据存储在由配置项所定义的目录的子目录下。 当删除一个管理表时,Hive也会删除这个表中数据。管理表不适合和其他工具共享数据。
  2. 外部表 EXTERNAL
    删除该表并不会删除掉这份数据,不过描述表的元数据信息会被删除掉。
  3. 分区表
    分区表实际上就是对应一个HDFS文件系统上的独立的文件夹,该文件夹下是该分区所有的数据文件。Hive中的分区就是分目录,把一个大的数据集根据业务需要分割成小的数据集。在查询时通过WHERE子句中的表达式选择查询所需要的指定的分区,这样的查询效率会提高很多。
# 创建分区表
create table dept_partition(
deptno int, dname string, loc string
)
partitioned by (month string)
row format delimited fields terminated by '\t';

# 单分区查询
select * from dept_partition where month='201709';
# 多分区联合查询
select * from dept_partition where month='201709'
  union
select * from dept_partition where month='201707';
# 创建单个分区
alter table dept_partition add partition(month='201706') ;
# 同时创建多个分区
alter table dept_partition add partition(month='201705') partition(month='201704');

# 删除单个分区
alter table dept_partition drop partition (month='201704');
# 同时删除多个分区
alter table dept_partition drop partition (month='201705'), partition (month='201706');

# 查看分区表有多少分区

show partitions dept_partition;
# 查看分区表结构

desc formatted dept_partition;
# 查询表结构

desc dept_partition;

# 添加列
alter table dept_partition add columns(deptdesc string);

# 替换列
alter table dept_partition replace columns(deptno string, dname string, loc string);

# 删除表
drop table dept_partition;

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41

:alter只修改元数据,不修改实际数据

5.DML数据操作

load data [local] inpath '/opt/module/datas/student.txt' overwrite | into table student [partition (partcol1=val1,…)];

 
 
  • 1

(1)load data:表示加载数据
(2)local:表示从本地加载数据到hive表;否则从HDFS加载数据到hive表
(3)inpath:表示加载数据的路径
(4)overwrite:表示覆盖表中已有数据,否则表示追加
(5)into table:表示加载到哪张表
(6)student:表示具体的表
(7)partition:表示上传到指定分区

6.查询

方法同Mysql语法

  • 全局排序(Order By)
  • 每个MapReduce内部排序(Sort By)
  • 分区排序(Distribute By)
  • Cluster By(当distribute by和sorts by字段相同时可以使用cluster by)

7.其他

可参考博客:

Hive入门及常用指令
数据仓库中的拉链表(hive实现)
谓词下推

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值