更改 HIVE 表字段数据类型有哪些注意事项?

news2024/9/27 15:29:21

更改 HIVE 表字段数据类型有哪些注意事项?

1. 使用 HIVE 表的常见规范

在大数据离线分析场景中,在数据建模/表格式这一层,目前使用最多的还是 APACHE HIVE 这一数据仓库框架(湖仓一体的框架,如 Iceberg/DeltaLake/Hudi也在加速落地)。

在HIVE表的实际使用过程中,大家普遍遵循了下述相关规范:

  • 分层建模:根据业务处理逻辑,进行分层建模,其中各层的表对应不同的库,或在同一个库中通过表名前缀进行区分(各层对应的库名一般使用 ods,dwd,dws,ads等,辅助以dim和tmp层);
  • 命名规范:数据库名、表名、字段名应遵循规范,比如全部小写,只使用英文名和下划线_,禁止使用数据库关键字和保留字等;各层次表的名字和表中字段的名字,应上下呼应保持一致;
  • 列示存储:为确保数据质量,推荐使用列示存储比如 ORC/PARQUET 而不是行式存储如 txtfile/csv/tsv等,同时各层的表格式应该统一(txtfile格式在创建表时声明的列分隔符和行分隔符,可能会跟记录中某些字段本身存储的内容冲突,在读取时会造成部分字段不准确甚至部分记录丢失的数据问题);
  • 是否分区:根据业务特征,数据量和常规查询方式, 决定HIVE 表是否分区并选用合适的分区字段(比如按天分区pt_date);
  • 是否分桶:根据业务特征,数据量和常规查询方式, 决定HIVE 表是否分桶,通过分桶个数管控表或表分区底层的文件个数;
  • 内表外表:如无特殊原因,推荐全部使用内表,以充分利用 HIVE 本身对数据的管理(如 DROP/Truncate等);
  • ACID 事务表:如果业务上有记录级别的增删改的需求,可以考虑使用 ACID 事务表;
  • DDL中的location: 推荐在创建database时指定database级别的默认location,如无特殊原因,禁止在创建table时指定location;
  • 字段类型:根据业务特征,合理设计字段数据类型,为确保数据计算的准确性,对于带小数的数值型,一般建议使用Decimal(),禁止使用 FLOAT/DOUBLE,同时精度范围和上游表保持一致;
  • 表结构变更:禁止删除字段或重命名字段,禁止对字段数据类型做类型不兼容的更改,出于业务需要,可以在表的末尾增加字段;

2. 更改HIVE 表字段数据类型的注意事项

在遵循上述HIVE表使用规范的基础上,我们一般不会更改HIVE表字段的数据类型。

但有时候HIVE表的最初设计可能没有充分考虑到业务的潜在变化,此时在日后使用过程中,有时不得不更改HIVE表某些字段的数据类型,此时需要注意,不同大数据平台的不同版本,在判定字段数据类型的更改是否属于兼容性更改上略有不同,我们需要注意以下事项:

  • 对于更改 orc 表字段类型,为避免数据一致性问题,在规范上一般都是禁止做这种字段类型不兼容的更改的,比如从 String 改为 Decimal;
  • 在 CDH 上,可以配置参数 hive.metastore.disallow.incompatible.col.type.changes 为 True, 从而禁止对字段做类型不兼容的修改,比如从 String 改为 MAP<STRING, STRING>;
  • 在 CDH 上,即使配置参数 hive.metastore.disallow.incompatible.col.type.changes 为 True, 仍可以将字段从 String 更改为 Decimal, 因为 CDH 认为这种不算类型不兼容(Primitive types like INT, STRING, BIGINT, etc. are compatible with each other and are not blocked.);
  • 在 TDH 上,不可以将字段从 String 更改为 Decimal, 因为 TDH 对字段类型管控更严格,不管参数 hive.metastore.disallow.incompatible.col.type.changes 配置为 True 还是 False,都不允许对字段做类型不兼容的修改,而且 TDH 认为从 String 到 Decimal 算类型不兼容;
  • 对比多个版本的 TDH,发现部分老版本如 TDH6.0.2,可以将字段类型在低精度和高精度之间相互转换(比如从 Decimal(20,0)更改为 Decimal(10,0) 或者反过来),但新版本如 TDH 6.2.2,只允许从低精度改为高精度而不允许从高精度改为低精度(比如将字段类型从 Decimal(20,0)更改为 Decimal(10,0)),否则更改时会报错;
  • 经咨询 TDH 官方客服,TDH 对字段类型管控更严格,官方不推荐更改 ORC 表字段类型,有些早期版本更改字段类型的 DDL 语句可能可以执行成功,但后续新版本会直接报错拒绝;
  • 不管是CDH还是TDH,如果在不得已的情况下需要对字段做类型不兼容的修改,可以新建一套新格式的表,然后将旧表数据查询并插入到新表,最后删除旧表并重命名新表;
  • 测试SQL与报错信息如下:
##APACHE HIVE中关键参数:
- hive.metastore.disallow.incompatible.col.type.changes
##测试SQL:
- create table tableA (cash_amount Decimal(15,2))stored as orc; 
- alter table tableA change column cash_amount cash_amount decimal(10,2)- alter table tableA change column cash_amount cash_amount decimal(20,2)- alter table tableA change column cash_amount cash_amount map<string,string>;
- alter table tableA replace columns cash_amount cash_amount map<string,string>;
##常见报错信息
- Error: EXECUTION FAILED: Task DDL error HiveException: [Error 11488] Changing from type string to decimal(10,0) is not supported for column open_date. SerDe may be incompatible (state=08S01,code=11488)
- Error: EXECUTION FAILED: Task DDL error HiveException: [Error 11488] Changing from type decimal(20,0) to decimal(10,0) is not supported for column XXX. May cause loss of data precision. SerDe may be incompatible (state=08S01,code=11488)

3. 相关JIRA

  • https://issues.apache.org/jira/browse/HIVE-4409
  • https://issues.apache.org/jira/browse/HIVE-12320

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/56183.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深入理解 Web 协议:HTTP 2

目录 本篇将详细介绍 http2 协议的方方面面&#xff0c;知识点如下&#xff1a; HTTP 2 连接的建立 HTTP 2 中帧和流的关系 HTTP 2 中流量节省的奥秘&#xff1a;HPACK 算法 HTTP 2 协议中 Server Push 的能力 HTTP 2 为什么要实现流量控制&#xff1f; HTTP 2 协议遇到的…

记一次PDU接室外监控溶解事故

近期要新增20-30个室外监控&#xff0c;监控位于山道&#xff0c;山道长约1000米&#xff0c;根据以往惯例&#xff0c;要求从UPS接电。 室外设备箱如图&#xff1a; 施工方从UPS接电后&#xff0c;直接接接线板&#xff0c;从接线板接两个220V-24V海康监控电源&#xff0c;电…

MySQL8高级

MySQL8高级 一、Linux下MySQL的安装与使用 1、版本说明 MySQL Community Server 社区版本&#xff0c;开源免费&#xff0c;自由下载&#xff0c;但不提供官方技术支持&#xff0c;适用于大多数普通用户。MySQL Enterprise Edition 企业版本&#xff0c;需付费&#xff0c;不能…

软件测试基础-自动化测试技术

今天跟大家分享软件测试基础&#xff0c;自动化测试技术&#xff0c;主要从引入自动化测试的原因、自动化测试的定义、自动化测试的优势、自动化测试的劣势、自动化测试的工具五个方面来讲述。 01 引入自动化测试的原因 软件规模越来越大&#xff0c;用户对软件的质量要求越来…

基于PHP+MYSQL药店会员管理系统的设计与实现

药房会员管理系统是信息时代的产物,随着时代的发展,各大药店也与时俱进使用了各类现代化的系统来进行各类药品和会员信息的管理,甚至有些药店会给会员使用积分系统,根据用户的消费进行积分,然后用积分兑换一些差用的日常用品或者药品,从而增加会员的黏度。 PHP&#xff1a;MYSQ…

[SpringMVC1]简介与快速入门案例详解

文章目录 一、SpringMVC简介 1.概述 2.三大模块 二、SpringMVC快速入门 1.准备工作 &#xff08;1&#xff09;新建Maven项目&#xff0c;选择webapp模板 &#xff08;2&#xff09;新增java源文件包 2.开始配置SpringMVC (1)在pom.xml中导入相关坐标以下载需要用到的依赖…

[附源码]计算机毕业设计JAVA鞋店销售管理

[附源码]计算机毕业设计JAVA鞋店销售管理 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis M…

SpringBoot旅游网源码和论文java旅游管理系统

随着人们生活水平的不断提升&#xff0c;人们对旅游的需求越来越旺盛&#xff0c;对旅游产品 和服务的质量要求也越来越高。伴随着计算机技术、网络技术的不断普及与应用&#xff0c; 人们通过网络浏览旅游信息&#xff0c;预订旅游产品&#xff0c;交流旅游体验的活动越来越多…

AI生命科学绘图(4):质粒图谱的绘制

学习来源 &#xff1a;B站生信师兄 内容&#xff1a;质粒图谱绘制 质粒绘制思路 1.绘制俩个正圆轮廓&#xff0c;修改描边颜色和粗细 选择椭圆工具&#xff1a;按住shift绘制一个正圆&#xff0c;然后Alt拖动复制 拖动使得俩个圆重合 2.使用剪刀工具&#xff0c;修剪掉不需要…

[附源码]计算机毕业设计右脑开发教育课程管理系统Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

1 FPGA ZYBO Xilinx 按键控制LED灯 key_led

视频教程&#xff1a;第11.1讲 按键控制LED灯实验原理讲解_哔哩哔哩_bilibili 约束文件&#xff1a;digilent-xdc/Zybo-Master.xdc at master Digilent/digilent-xdc (github.com) 原理图&#xff1a;Zybo Z7 - Digilent Reference B 实验任务 使用ZYBO上的PL端按键&#…

AD域控服务器部署

AD服务器部署 一、主域控的部署&#xff08;主域控名2012DC1&#xff0c;ip192.168.15.1&#xff09;&#xff1a; 1、添加角色和功能向导 2、基于角色或基于功能的安装 3、从服务器池中选择服务器 4、选择Active Directory域服务 5、默认&#xff0c;下一步 6、默认&#xff0…

区间信息维护与查询【分块】 - 原理 分块详解

区间信息维护与查询【分块】 - 原理 分块详解 树状数组和线段树虽然非常方便&#xff0c;但维护的信息必须满足信息合并特性&#xff08;如区间可加、可减&#xff09;&#xff0c;若不满足此特性&#xff0c;则不可以使用树状数组和线段树。分块算法可以维护一些线段树维护不…

简单入门编写html登录界面

<!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>你好呀&#xff0c;登录吧</title><style&…

MySQL锁,锁的到底是什么

作者&#xff1a;蝉沐风 博客站点&#xff1a;https://www.chanmufeng.com 公众号&#xff1a;蝉沐风的码场 本文目录1. 资源的竞争方式2. 读—写/写—读下的问题2.1. 幻读2.2. 不可重复读2.3. 脏读2.4. 锁与MVCC的关系2.5. 锁与事务的关系3. 写—写情况4. 锁的粒度5. 锁的基本…

[附源码]计算机毕业设计JAVA校园失物招领管理系统

[附源码]计算机毕业设计JAVA校园失物招领管理系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM my…

[附源码]计算机毕业设计JAVA新闻发布和评论管理系统

[附源码]计算机毕业设计JAVA新闻发布和评论管理系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM …

ELK日志平台搭建

平时查看错误日志&#xff0c;都是登录到服务器&#xff0c;然后用命令进行查看&#xff0c;不是很好的定位问题&#xff0c;决定搭建一个ELK的日志查看平台。ELK是Elasticsearch、Logstash、Kibana三个的简称。Elasticsearch是一个分布式的实时搜索引擎&#xff0c;Logstash是…

室内定位:5G定位开启高精度定位新纪元

“5G定位”作为一个新的方向将会对于解决室外到室内的“最后一公里”高精度定位问题发挥更强的赋能和带动作用。 室内定位作为室外定位的技术延伸&#xff0c;弥补了传统定位技术的不足&#xff0c;而5G定位正推动信息社会数字化步入快车道的大趋势&#xff0c;赋能千行百业。 …

DNS查询流程

&#x1f468;‍&#x1f4bb;个人主页&#xff1a; 才疏学浅的木子 &#x1f647;‍♂️ 本人也在学习阶段如若发现问题&#xff0c;请告知非常感谢 &#x1f647;‍♂️ &#x1f4d2; 本文来自专栏&#xff1a; 计算机网络 ❤️ 支持我&#xff1a;&#x1f44d;点赞 &#…