• Hive修改Parquet类型表字段几种问题处理


    hive中的表数据存储类型可以使用parquet,优势在于列式存储方便压缩,加快查询速度,在实际生产环境中,往往不会有字段命名或类型修改的数仓宽表才会使用
    临时或短期需求使用parquet的缺点在于字段类型修改等重刷数据及查询有问题,往往直接使用text格式方便修改。

    本文梳理了Hive修改Parquet类型表字段几种问题及其处理方案

    建表:

    CREATE TABLE `app_test_20221019`(
      `group_id` string COMMENT '维度组合id', 
      `dimension` string COMMENT '维度组合类型',
      `uv` bigint COMMENT 'uv')
    COMMENT 'parquet测试'
    PARTITIONED BY ( 
      `dt` string COMMENT '日期分区')
    ROW FORMAT SERDE 
      'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' 
    STORED AS INPUTFORMAT 
      'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat' 
    OUTPUTFORMAT 
      'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
    ;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    当使用parquest格式建表,修改字段名时:

    alter table app_test_20221019 change column group_id id string;
    
    
    • 1
    • 2

    修改完成后查询结果只会为null,原因是hive默认的读取parquet文件是按照名称读取的(默认是按序列号读取的)

    这个参数的功能是使hive读取parquet文件时使用序列号读取,设置后可以解决null值问题

    ALTER TABLE app_test_20221019 SET TBLPROPERTIES ('parquet.column.index.access'='true');
    
    • 1

    当使用parquest格式,修改字段类型时:

    alter table app_test_20221019 change column group_id group_id bigint;
    
    • 1

    如果只查询历史数据,不重写数据没有问题,但如果重写历史数据后查询报以下错误

    Failed with exception java.io.IOException:java.lang.UnsupportedOperationException: Cannot inspect org.apache.hadoop.io.IntWritable
    
    
    • 1
    • 2

    解决方案:
    方案1.删除历史数据并重写,注意先删除路径下的文件,不可以直接overwrite;
    方案2.将字段类型改回原类型;

    延伸:如果在新的分区中写入新的数据也是可以的,即parquest修改字段类型后如果涉及到重写数据一定要先删除文件再写入。

    参考:
    1.https://blog.csdn.net/skyupward/article/details/107999323
    2.https://blog.csdn.net/Fread325/article/details/126290070

  • 相关阅读:
    Feign的调用报错时,降级处理方式,fallBackFactory
    Three.js相机简明教程
    工程建设行业智能供应链系统:优化产业链运作效率,实现全链路数字化建设
    2.旋转的骰子(1)
    莫队算法学习笔记
    springBoot配置多数据源
    Xcode14 正式版编译报错‘ does not contain bitcode.解决方案
    【数据结构与算法】ArrayList与顺序表
    JVM内存模型之Volatile关键字
    面试经典150题——Day14
  • 原文地址:https://blog.csdn.net/DaDiNiWangGe/article/details/127402902