IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Hive修改Parquet类型表字段几种问题处理 -> 正文阅读

[大数据]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'
;

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

alter table app_test_20221019 change column group_id id string;

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

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

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

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

alter table app_test_20221019 change column group_id group_id bigint;

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

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

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

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

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

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-10-22 21:22:23  更:2022-10-22 21:24:09 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年4日历 -2025/4/22 9:21:05-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码