当前位置:   article > 正文

Hive分区表—hive江湖

Hive分区表—hive江湖

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

书接上回,上回书说到六大门派(数据导出)相继树立门户在数码武林之中,门派愈多,冲突愈多。为了主持hive江湖门派之间的利益与纷争,少林派(分区表)与武当派(分桶表)应邀各大门派推举,惩恶扬善,主持公道。


一、分区表是什么?

Hive分区实际上是通过一个路径来标识的,而不是存储在物理数据中。比如每天的数据对应的分区是day=20230416,那么它的路径就会变成:user/hive/warehouse/test.db/dept_par1/day=20230416。通过路径来标识的好处是如果是我们需要取特定分区的数据,只需要把这个路径下的数据取出来就可以了,不用扫描全部的数据。

二、分区表创建及数据插入

1.创建静态分区

代码如下(示例):

创建静态分区
create table dept_par1(id int,dname string,loc int) partitioned by (day string) row format delimited fields terminated by '\t';

查看表结构
desc dept_par1;


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

查看表结构

2.本地数据加载(内功)

代码如下(示例):

加载数据
load data local inpath '/root/export/data/test/dept_20230416.txt' into table dept_par partition (day='20230416');

显示分区
show partitions dept_par1;
  • 1
  • 2
  • 3
  • 4
  • 5

显示分区


3.创建外部分区

hive创建外部表时,仅记录数据所在的路径,不对数据的位置做任何改变.
删除表的时候,外部表只删除元数据,不删除数据

所以总结起来就是 : 外部表相对安全,数据组织更加灵活,方便共享源数据

代码如下(示例):

创建外部分区表
create external table dept_par4(id int,dname string,loc int) partitioned by (day string) row format delimited fields terminated by '\t';


  • 1
  • 2
  • 3
  • 4

4.数据加载(外功)

代码如下(示例):

首先将数据上传到hdfs上
hadoop fs -put /root/export/data/test/dept_20230420.txt /user/hive/warehouse/test.db/dept_par4/day=20230420

添加分区
alter table dept_par4 add partition(day=20230420) location '/user/hive/warehouse/test.db/dept_par4';

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

注意:外部分区表需要添加分区才能看见数据


5.添加分区

注意:两分区之间用空格隔开!!!

代码如下(示例):


alter table dept_par1 add partition(day='20230419') partition(day='20230421');


  • 1
  • 2
  • 3
  • 4

添加分区

6.删除分区

注意:两分区之间用逗号隔开!!!

代码如下(示例):

alter table dept_par1 drop partition(day='20230419'),partition(day='20230421');


  • 1
  • 2
  • 3

删除分区

7.动态分区

动态分区是分区在数据插入的时候,根据某一列的列值动态生成,hive具有批处理功能。静态分区的列是在编译时通过用户传递来决定的;动态分区只有在SQL执行时才能决定。

代码如下(示例):

使用动态分区必须设置非严格模式
 set hive.exec.dynamic.partition.mode=nostrick;

创建动态分区表(分区字段与普通字段分开写)
create table dept_par5(dname string,loc int) partitioned by (id int) row format delimited fields terminated by '\t';

动态分区插入数据(分区字段必须写到最后面)!!!!!
insert overwrite table dept_par5 partition(id) select dname,loc,id from dept_par1;

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

总结

作为hive江湖中“泰山北斗”的名门正派,本着为天地立心,为生民立命的理念,让我们整个数码武林终于达成一个相对平衡的状态。而且分区表的增、删、改、查、函数定义十八般武艺样样精通,可谓天下武功出少林,大数据管理更是离不开我们的分区表,码农们通过分区表大大的减少了时间的花费,优化方案,重塑大数据世界的荣光。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/代码探险家/article/detail/1005173
推荐阅读
相关标签
  

闽ICP备14008679号