栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

hive实现全自动动态分区--案例详解

hive实现全自动动态分区--案例详解

需求:删除s_ls_yijj_syjglj_yhxx中所有分区中HD_FIND_DATE字段大于当前系统日期的数据删除

1.开启动态分区,并设置参数
    #--开启动态分区,默认是false (可通过这个语句查看:set hive.exec.dynamic.partition;) 
    set hive.exec.dynamic.partition=true;

    #--开启允许所有分区都是动态的,否则必须要有静态分区才能使用,默认是strict  
    set hive.exec.dynamic.partition.mode=nonstrict;

    #--调整参数:(在这里遇到过坑,分区数太多,超出默认限制)
    set hive.exec.max.dynamic.partitions.pernode=2000;
    表示每个maper或reducer可以允许创建的最大动态分区个数,默认是100,超出则会报错,一般可以设置大一点,这里设置为2000
    set hive.exec.max.dynamic.partitions =2000;
    表示一个动态分区语句可以创建的最大动态分区个数,超出报错,默认是1000
    set hive.exec.max.created.files =2000;
    表示全局可以创建的最大文件个数,超出报错,默认是1000

2.创建一张与原表(s_ls_yijj_syjglj_yhxx)表结构一致的临时表(s_ls_yijj_syjglj_yhxx_tmp)
create table if not exists biaozhun.s_ls_yijj_syjglj_yhxx_tmp like biaozhun.s_ls_yijj_syjglj_yhxx;

3.向临时表(s_ls_yijj_syjglj_yhxx_tmp)中插入数据
INSERT INTO TABLE biaozhun.s_ls_yijj_syjglj_yhxx_tmp PARTITION (date_id)
SELECt
place_name,addres,dlname,xlname,hd_desc,level_name,hd_find_date,is_rectify_once,assign_rectify_date,rectify_desc,accept_date,accept_desc,hd_status,dj_status,dj_inserttime,dj_updatetime,dj_id,dj_flag,exchangetime,formatted_address,local_coord_x,local_coord_y,adcode,date_id
FROM biaozhun.s_ls_yijj_syjglj_yhxx
WHERe SUBSTr(REPLACe(REPLACE(REPLACE(HD_FIND_DATE, '-',''),' ',''),':',''),1,14) <= SUBSTr(REPLACE(REPLACE(REPLACE(from_unixtime(unix_timestamp(),"yyyy-MM-dd HH:mm:ss"), '-',''),' ',''),':',''),1,14);
注意:原表s_ls_yijj_syjglj_yhxx中的分区字段date_id必须放在最后一个字段的位置
这样就将date_id的值作为分区的值,分成多个分区存储,也就是在hdfs中分成了多个目录进行存储。

4.检查临时表(s_ls_yijj_syjglj_yhxx_tmp)与原表(s_ls_yijj_syjglj_yhxx)的数据量、分区、内容是否一样,如果一致,就可以用临时表替换原表了
 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/329784.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号