HIve之分区

一. 分区的意义

将表内的数据按照一定的业务进行划分,可以减少数据的冗余,同时可以提高分区数据查询的效率。

二. 创建hive分区表

1.创建分区表,分区字段为日期date

create table my_partition_table(id int, name string) partitioned by(partition_date string) row format delimited fields terminated by ",";

2.查看表详情

方式一: show create table my_partition_table;

在这里插入图片描述

方式二: desc formatted my_partition_table;

在这里插入图片描述
3. 分区插入数据

load data local inpath "/home/temp/student.txt" into table my_partition_table partition (partition_date='2020-05-19');

4.hdfs中查看数据
在这里插入图片描述
5.查看表的分区

show partitions my_partition_table;

在这里插入图片描述
4. 根据分区查数据

select * from my_partition_table where partition_date = "2020-05-19";

在这里插入图片描述

三. 动态分区和静态分区

1.Hive的静态分区,实际上就是手动指定分区的值为静态值,这种对于小批量的分区插入比较友好。也就是手动指定了分区的值。

load data local inpath "/home/temp/student.txt" into table my_partition_table partition (partition_date='2020-05-19');

2.Hive的动态分区,其实就是把静态分区中的分区值设置为动态的值,就可以了,也就是动态指定分区字段的值,对于大批量的分区插入是一个很方便的用法

insert overwrite table demo_dynamic_partition 
partition(year=year, month=month, 
day=day, hour=hour) 
select user_id, user_name, 
trade_year as year ,
trade_month as month,
trade_day as day,
trade_hour as hour  
from user_demo 

当然动态分区需要进行一些设置

- Hive默认配置值
-- 开启或关闭动态分区
hive.exec.dynamic.partition=false;
-- 设置为nonstrict模式,让所有分区都动态配置,否则至少需要指定一个分区值
hive.exec.dynamic.partition.mode=strict;
-- 能被mapper或reducer创建的最大动态分区数,超出而报错
hive.exec.max.dynamic.partitions.pernode=100;
-- 一条带有动态分区SQL语句所能创建的最大动态分区总数,超过则报错
hive.exec.max.dynamic.partitions=1000;
-- 全局能被创建文件数目的最大值,通过Hadoop计数器跟踪,若超过则报错
hive.exec.max.created.files=100000;

3.动态分区和静态分区联合使用

partition(year="2020", month="05", 
day=day, hour=hour) 
select user_id, user_name, 
trade_year as year ,
trade_month as month,
trade_day as day,
trade_hour as hour  
from user_demo 
where trade_year="2020" 
and trade_month="04" ```

三. 附加的一些表语句

1.修改分区的语句

a.把一个分区打包成一个har包
  alter table employees archive partition (country="china",state="Asia")
b.把一个分区har包还原成原来的分区
  alter table employees unarchive partition (country="china",state="Asia")
c.保护分区防止被删除
   alter table employees partition (country="china",state="Asia") enable no_drop
d.保护分区防止被查询
    alter table employees partition (country="china",state="Asia") enable offline
e.允许分区删除和查询
   alter table employees partition (country="china",state="Asia") disable no_drop
   alter table employees partition (country="china",state="Asia") disable offline

2.快速创建表

创建表,携带数据
create table employees1 as select * from employees1
创建表,携带表结构
create table employees2 like employees
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

victor-维克特

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值