hive基本语法和函数

这篇博客介绍了Hive的基本命令,包括创建、显示和删除数据库,加载数据到表中,以及表的详细信息查看。重点讲解了Hive的分区功能,包括静态分区和动态分区的使用,强调了动态分区在大量分区场景下的优势。此外,还提到了Hive的分桶概念,用于提高数据关联速度。博客最后讨论了Hive的聚合函数和窗口函数的应用,以及Hive语句中的Lateral View和聚合规则等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基本命令:
1、 create database 创建数据库
2、Show databases; 显示数据库
3、desc 表明 显示表的详细情况/
4、desc formatted 显示的更详细
5、Drop database 删除
6、select current_database(); 可查看当前在哪个数据库
7、show create table 查看表结构
8、Hdfs dfs -put 文件名 /路劲 把文件上传到hdfs里,
9、load data inpath ‘/user/had/emplhr.txt’ into table emplhr; 加载数据到数据库(sql)
10、show table ‘关键字’ 相当于模糊查询
也可以通过 hdfs dfs -put ‘emp_basic’ /user/hive/warehouse/demo.db/emp_basic上传数据(hdfs)

建立外部表:需要关键字location 外部表可以保护数据,删除表的时候 数据不会被删除
当数据在内部表的时候,是完全由hive管理的,删除表的时候 数据也都会被删除
外部表第一个作用是处理元数据
当我们要做数据的内部转换或者清洗的时候,会建立内部表
共享元数据建立外部表
通过分区(partitions)查找 会提高hive的性能

用year month分区 其实就是文件夹 使用alter table
使用静态partition缺点 每次都要用alter table来增加partition
Hive是不支持动态分区的,需要设定set,默认是不打开的,会有危险性。会创建成千上万个

在这里插入图片描述
COMMENT //注释
ROW FORMAT DELIMITED //固定写法
Fields terminated by ‘|’ //按照‘|’来分隔
Collection items terminated by ‘,’ //数组是按照“,”来分隔的
Map keys terminated by “:” //map里的值是用:来分隔
Stored as textfile //存储文件文本
Location 路劲 外部表需要指定location 内部表不需要指定

创建分区表:
在这里插入图片描述

静态分区:
手动创建一个静态分区 不然是没有 分区列的
通过alter table ‘表名’add partition 来增加
在这里插入图片描述
Show partitions 查看分区
在这里插入图片描述
删除表分区
在这里插入图片描述

动态分区建立
为什么要使用动态分区呢,我们举个例子,假如中国有50个省,每个省有50个市,每个市都有100个区,那我们都要使用静态分区要使用多久才能搞完?所有我们要使用动态分区。

动态分区默认是没有开启。开启后默认是以严格模式执行的,在这种模式下需要至少一个分区字段是静态的。这有助于阻止因设计错误导致导致查询差生大量的分区。列如:用户可能错误使用时间戳作为分区表字段。然后导致每秒都对应一个分区!这样我们也可以采用相应的措施:

关闭严格分区模式
		动态分区模式时是严格模式,也就是至少有一个静态分区。
		set hive.exec.dynamic.partition.mode=nonstrict	//分区模式,默认nostrict
		set hive.exec.dynamic.partition=true			//开启动态分区,默认true
		set hive.exec.max.dynamic.partitions=1000		//最大动态分区数,默认1000

创建一个普通动态分区表:

create table if not exists  zxz_5(
 name string,
 nid int,
 phone string,
 ntime date
 ) 
 partitioned by (year int,month int) 
 row format delimited 
 fields terminated by "|"
 lines terminated by "\n"
 stored as textfile;

现在还看不出来有什么不一样

insert overwrite table  zxz_5 partition (year,month) select name,nid,phone,ntime,year(ntime) as year ,month(ntime) as month from zxz_dy;
 
zxz_5这个表里面存放着数据。
我们利用year,和month函数来获取ntime列的年和月来作为分区,这个是靠我们查询到数据来分区是不是很舒服

自动分区的格式:
在这里插入图片描述

分桶:使用分桶的时候必须要set hive.enforce.bucketing =true;
在这里插入图片描述

分区的方式是在表的后面加上分区列,实际是生成了不同的目录 (拆成了不同目录)
分桶对某一个列作为一个分桶条件 (把一个表拆成不同的文件)

把数据分成若干个子文件,重新组织,做数据关联的时候会非常快
方便抽样

分桶相当于一个动态分区,不能进行静态分区
分桶通常要考虑分成多少个子文件 ,一般都是128m

分桶和分区的区别不大,也是加关键字,关键的区别就是分桶的列和数据表里的列是一致的
Partition by 是我们凭空生成的
分桶必须用insert语句

在这里插入图片描述

Hive语句 侧视图
表达成两行 lateral view (可以让name变成多个)explode
a是lateral view的别名
在这里插入图片描述

Order by 案例
在这里插入图片描述

左连接案例
在这里插入图片描述

hive 聚合运算
在这里插入图片描述
聚合函数一定要配合group by进行使用,不然一直都是全局分组

最简单的分组查询 先聚合结果 在分组
在这里插入图片描述

Hiving 和where 有什么不同? hiving是最后执行

没有被聚合的 一定要出现在group by中
在这里插入图片描述

Row_number() over() 给行添加行号,over() 所有的行
在这里插入图片描述
窗口函数 Rank() 用来排序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值