美文网首页
hive修复分区表分区

hive修复分区表分区

作者: jhonshonjs | 来源:发表于2018-07-13 11:59 被阅读0次

    应用场景

    如果事先建立了一张分区表,然后手动(比如使用 cp 或者 mv )将分区数据拷贝到刚刚新建的表进行数据初始化;但是对于分区表,需要在hive里面手动将刚刚初始化的数据分区加入到hive里面,这样才能够查询使用。通常的做法是使用 alter table add partition命令手动添加分区;但是如果初始化的分区太多,这样一条一条地手动添加分区不免过于麻烦(虽然可以写个脚本生成添加分区的命令),其实另一个场景类似,就是假如有分析人员误删除了分区表(发现的很及时,还没有被hdfs的垃圾回收),这时候就可通过重新创建分区表,然后把数据从Trash中mv到新表的位置。;

    命令

    msck repair table + tableName
    

    执行后,Hive会检测如果HDFS目录下存在但表的metastore中不存在的partition元信息,更新到metastore中。

    样例说明

    1. 建表
    CREATE TABLE `test_partition`(
      `datehour` string, 
      `halfhourtype` string, 
      `uid` string, 
      `roomid` string, 
      `roomcreatoruid` string, 
      `staytime` string)
    PARTITIONED BY ( 
      `pt_day` string)
    ROW FORMAT SERDE 
      'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe' 
    STORED AS INPUTFORMAT 
      'org.apache.hadoop.mapred.TextInputFormat' 
    OUTPUTFORMAT 
      'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
    LOCATION
      'hdfs://nameservice1/user/hive/warehouse/test_partition'
    
    1. 查看表分区信息
    hive> show partitions test_partition;
    OK
    Time taken: 0.048 seconds
    
    1. 从其他地方复制数据到指定的目录
    hadoop fs -cp /user/hive/.Trash/Current/user/hive/warehouse/test_partition/pt_day=2018-07-10 /user/hive/warehouse/test_partition/
    hadoop fs -cp /user/hive/.Trash/Current/user/hive/warehouse/test_partition/pt_day=2018-07-11 /user/hive/warehouse/test_partition/
    hadoop fs -cp /user/hive/.Trash/Current/user/hive/warehouse/test_partition/pt_day=2018-07-12 /user/hive/warehouse/test_partition/
    
    1. 执行修复命令
    hive> MSCK REPAIR TABLE test_partition;  
    OK
    Partitions not in metastore:    test_partition:pt_day=2018-07-10     test_partition:pt_day=2018-07-11     test_partition:pt_day=2018-07-12     
    Repair: Added partition to metastore test_partition:pt_day=2018-07-10
    Repair: Added partition to metastore test_partition:pt_day=2018-07-11
    Repair: Added partition to metastore test_partition:pt_day=2018-07-12
    Time taken: 0.133 seconds, Fetched: 3 row(s)
    
    1. 查看分区信息
    hive> show partitions test_partition;
    OK
    pt_day=2018-07-10
    pt_day=2018-07-11
    pt_day=2018-07-12
    Time taken: 0.039 seconds, Fetched: 3 row(s)
    

    重点注意

    1. 如果复制过去的数据的目录格式不对,将不能完成分区修复,会报出code1错误;
    hive> MSCK REPAIR TABLE test_portition;  
    FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask
    
    1. 为了让MSCK命令工作,分区的目录名必须是【/partition_name=partition_value/】结构的(且表级目录中不得存在非此种格式的目录名),否则将无法添加分区。这时候就必须使用add partition命令了。

    相关文章

      网友评论

          本文标题:hive修复分区表分区

          本文链接:https://www.haomeiwen.com/subject/rpejpftx.html