HQL 静态分区

9 篇文章 0 订阅
8 篇文章 0 订阅
1. 什么是分区

直白一点来说,分区就是在表目录下建立子目录。

2. 为什么要使用分区

随着系统运行时间的增长,数据文件就会越来越大,当Hive对文件进行搜索时,会对全表进行搜索,导致效率降低。而分区的作用就是将表目录下的文件进行分类,将数据分类后进行存储,这样就会避免全表搜索,提高查询效率。

3.什么是静态分区

静态分区就是添加数据时需要手动指定分区

4. 创建静态分区
4.1 语法
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]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]
4.2 案例
# 1. 创建一级分区
CREATE TABLE IF NOT EXISTS t_part (
uid int,
uname string,
sex string,
age int
)
PARTITIONED BY(country string)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t';

# 导入数据
load data local inpath '/home/user_china.txt' into table t_part
partition(country='china');

# 2. 创建二级分区
create table if not exists t_part(
uid int,
uname string,
sex string,
age int)
partitioned by(year string, month string)
row format delimited
fields terminated by '\t';

# 添加数据
load data local inpath '/home/user-2019-11-11.txt' into table t_part
partition(year='2019', month='11');
load data local inpath '/home/user-2019-12-12.txt' into table t_part
partition(year='2019', month='12');
load data local inpath '/home/user-2019-01-12.txt' into table t_part
partition(year='2019', month='01');
4.3 注意事项
1.  hive的分区名称区分大小写
2. hive分区的本质是在表下创建子目录,但是该分区字段是一个伪列(在数据中不存在,但是却可以查询)
e.g.
分区目录名:province='杭州'
- hive的分区和mysql分区的区别:
	* hive的分区使用表外字段,是一个伪列
	* mysql使用的是表内字段,即不用分区也可以直接查询
3. 一张表中可以存在一个或多个分区;分区之下又可以存在一个或多个分区。
4. 在分区的时候分区值是有区别的,比如day=1和day=01是两个不同的参数值,申明一定请注意。
5 显示分区
show partitions tablename;
6 修改分区
6.1 修改分区名称
ALTER TABLE table_name PARTITION partition_spec RENAME TO PARTITION partition_spec;

e.g.
alter table t_2 partition(country='japon') rename to partition(country='usa'); 
6.2 增加分区
ALTER TABLE t_part ADD PARTITION(country='korea');
ALTER TABLE t_part ADD PARTITION(country='france') PARTITION(country='italy');
6.3 添加分区并设置数据
ALTER TABLE t_part ADD PARTITION(country='korea')
LOCATION '/user/hive/warehourse/hive.db/t_part/country=china';
6.4 修改分区在hdfs中存储路径
ALTER TABLE t_part PARTITION(country='korea')
SET LOCATION 'hdfs://hbase1:9000/user/hive/warehourse/hive.db/t_part/country=spain';
6.5 删除分区
ALTER TABLE t_part DROP PARTITION(country='korea');
ALTER TABLE t_part DROP PARTITION(country='france'),PARTITION(country='italy');
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值