Hive----分区

简介: 分区

创建分区表:

create table dept_partition(

deptno string,

dname string,

loc string

)

partitioned by(udate string comment 'this table is partitioned by day')      注:分区字段名为自定义字段,尽量与数据字段不一样!

row format delimited fields terminated by '\t';

 

注意:分区字段要注明数据类型,且分区字段不在字段列表中,在Hdfs中,分区字段是以分区字段名=分区字段值的形式作为表目录下的子目录存在的

 

load data local inpath '/opt/module/datas/20211030.log' into table dept_partition partition(udate='10_30');

load data local inpath '/opt/module/datas/20211031.log' into table dept_partition partition(udate='10_31');

load data local inpath '/opt/module/datas/20211101.log' into table dept_partition partition(udate='11_01');

 

select * from dept_partition where udate='11_01';

 

select * from dept_partition where udate='10_30'

union

select * from dept_partition where udate='10_31';

 

select * from dept_partition where udate='10_30' or udate='10_31';

 

增加分区:

alter table dept_partition add partition(udate='11_02');

alter table dept_partition add partition(udate='11_03') partition(udate='11_04');

删除分区:

alter table dept_partition drop partition(udate='11_04');

alter table dept_partition drop partition(udate='11_02'),partition(udate='11_03');

注意:增加多个分区时,partition之间没有逗号,删除多个分区时,partition之间有逗号!

 

查看分区:

show partitions dept_partition;

 

当所有数据混杂在一个文件中,如何分区?

可以先将所有数据存入临时表,再从临时表中select insert

 

create table dept_partition2(

name string,

cost int,

yue double

)

partitioned by(udate string);

 

create table tmp(

utime string,

name string,

cost int,

yue double

)

row format delimited fields terminated by '\t';

 

load data local inpath '/opt/module/datas/class.txt' into table tmp;

 

insert into table dept_partition2 partition(udate='2019-02-03') select name,cost,yue from tmp where substring(utime,1,10)='2019-02-03';

 

动态分区:让程序自动识别分区字段值,将数据分别放入对应的分区中

设置:

set hive.exec.dynamic.partition=true;

--打开动态分区功能

set hive.exec.dynamic.partition.mode=nonstrict;

--将动态分区设为非严格模式

set hive.exec.max.dynamic.partitions=1000;

--设置最大分区个数

严格模式:在所有的分区字段中,至少有一个分区字段为静态分区

非严格模式:所有的分区字段都是动态分区

静态分区:手动指定分区字段值

 

insert into table dept_partition2 partition(udate) select name,cost,yue,substring(utime,1,10) udate from tmp;

注意:在从临时表中select数据时,分区字段必须按顺序放在最后

 

二级/多级分区:

create table class_par(

name string,

cost int,

yue double

)

partitioned by(uyear string,umonth string,uday string)

row format delimited fields terminated by '\t';

 

将一份数据导入到 2021-10-02 分区中

load data local inpath '/opt/module/datas/class.txt' into table class_par partition(uyear='2021',umonth='10',uday='02');

 

 

insert into table class_par partition(uyear,umonth,uday) select name,cost,yue,substring(utime,1,4) uyear,month(utime) umonth,day(utime) uday from tmp;

 

动静结合插入数据:

insert into table class_par partition(uyear='2019',umonth,uday) select name,cost,yue,month(utime) umonth,day(utime) uday from tmp where year(utime) = '2019';

 

select * from class_par where uyear='2020' and umonth='10' and uday='10';

 

修复指令:如果刚上传的数据查不到,可以执行此命令。

msck repair table class_par;

目录
相关文章
|
SQL HIVE
Hive分区+根据分区查询
Hive分区+根据分区查询
|
4月前
|
SQL 存储 HIVE
hive分区与分桶
hive分区与分桶
55 1
|
5月前
|
SQL DataWorks 监控
DataWorks产品使用合集之同步数据到Hive时,如何使用业务字段作为分区键
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
6月前
|
SQL 分布式计算 DataWorks
DataWorks操作报错合集之在进行Hive分区truncate操作时遇到权限不足,怎么解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
79 0
|
7月前
|
SQL 存储 HIVE
Hive中的动态分区是什么?请解释其作用和使用场景。
Hive中的动态分区是什么?请解释其作用和使用场景。
135 0
|
SQL 分布式计算 大数据
Hive动态分区
Hive动态分区
131 0
|
SQL 存储 分布式计算
大数据技术基础实验十一:Hive实验——Hive分区
大数据基础实验十一,学习有关Hive分区的相关知识。
300 0
大数据技术基础实验十一:Hive实验——Hive分区
|
SQL 存储 大数据
大数据开发笔记(四):Hive分区详解
在Hive Select查询中一般会扫描整个表内容,会消耗很多时间做没必要的工作。有时候只需要扫描表中关心的一部分数据,因此建表时引入了partition概念。
305 0
大数据开发笔记(四):Hive分区详解
|
SQL 存储 数据库
hive 删除某个分区中部分数据
hive 删除某个分区中部分数据
|
SQL HIVE
hive清空表删除分区
hive清空表删除分区