赞
踩
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
书接上回,上回书说到六大门派(数据导出)相继树立门户在数码武林之中,门派愈多,冲突愈多。为了主持hive江湖门派之间的利益与纷争,少林派(分区表)与武当派(分桶表)应邀各大门派推举,惩恶扬善,主持公道。
Hive分区实际上是通过一个路径来标识的,而不是存储在物理数据中。比如每天的数据对应的分区是day=20230416,那么它的路径就会变成:user/hive/warehouse/test.db/dept_par1/day=20230416。通过路径来标识的好处是如果是我们需要取特定分区的数据,只需要把这个路径下的数据取出来就可以了,不用扫描全部的数据。
代码如下(示例):
创建静态分区
create table dept_par1(id int,dname string,loc int) partitioned by (day string) row format delimited fields terminated by '\t';
查看表结构
desc dept_par1;
代码如下(示例):
加载数据
load data local inpath '/root/export/data/test/dept_20230416.txt' into table dept_par partition (day='20230416');
显示分区
show partitions dept_par1;
hive创建外部表时,仅记录数据所在的路径,不对数据的位置做任何改变.
删除表的时候,外部表只删除元数据,不删除数据
所以总结起来就是 : 外部表相对安全,数据组织更加灵活,方便共享源数据
代码如下(示例):
创建外部分区表
create external table dept_par4(id int,dname string,loc int) partitioned by (day string) row format delimited fields terminated by '\t';
代码如下(示例):
首先将数据上传到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';
注意:外部分区表需要添加分区才能看见数据
注意:两分区之间用空格隔开!!!
代码如下(示例):
alter table dept_par1 add partition(day='20230419') partition(day='20230421');
注意:两分区之间用逗号隔开!!!
代码如下(示例):
alter table dept_par1 drop partition(day='20230419'),partition(day='20230421');
动态分区是分区在数据插入的时候,根据某一列的列值动态生成,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;
作为hive江湖中“泰山北斗”的名门正派,本着为天地立心,为生民立命的理念,让我们整个数码武林终于达成一个相对平衡的状态。而且分区表的增、删、改、查、函数定义十八般武艺样样精通,可谓天下武功出少林,大数据管理更是离不开我们的分区表,码农们通过分区表大大的减少了时间的花费,优化方案,重塑大数据世界的荣光。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。