当前位置: 首页 > news >正文

Hive分区表新增字段并指定位置

Hive分区表新增字段并指定位置

      • 1、Hive分区表新增字段
      • 2、CASCADE关键字
      • 3、历史分区新增列为NULL问题





1、Hive分区表新增字段


Hive分区表新增字段并指定位置主要分为两步:新增字段和移动字段

1)新增字段

ALTER TABLE table_name ADD COLUMNS (col_name data_type [COMMENT col_comment], ...) [CASCADE|RESTRICT];

该命令允许用户将新列添加到现有列的末尾但在分区列之前

ADD COLUMNS命令只修改Hive的元数据,不修改实际数据。用户应该确保表/分区的实际数据布局符合元数据定义

2)更改(移动)字段

ALTER TABLE table_name CHANGE [COLUMN] col_old_name col_new_name column_type [COMMENT col_comment] [FIRST|AFTER column_name] [CASCADE|RESTRICT];

该命令允许用户更改列的名称、数据类型、注释或位置,或它们的任意组合

CHANGE COLUMN命令只修改Hive的元数据,不修改实际数据。用户应该确保表/分区的实际数据布局符合元数据定义

以下是一些示例:

CREATE TABLE test_change (a int, b int, c int);// 将列a的名称更改为a1
ALTER TABLE test_change CHANGE a a1 INT;// 将列a1的名称更改为a2,数据类型更改为string,并将其放在列b后
ALTER TABLE test_change CHANGE a1 a2 STRING AFTER b;
// 新表的结构:b int, a2 string, c int// 将列c的名称更改为c1,并放在第一列
ALTER TABLE test_change CHANGE c c1 INT FIRST;
// 新表的结构:c1 int, b int, a2 string// 给列a1添加注释
ALTER TABLE test_change CHANGE a1 a1 INT COMMENT 'a1 comment';

2、CASCADE关键字


CASCADE中文为"级联",顾名思义就是有联系的。Hive官网对CASCADE关键字的描述如下:

CASCADE/RESTRICT子句在Hive 1.1.0中可用。CHANGE COLUMN CASCADE命令修改表元数据的列,并将相同的更改级联到所有分区元数据。RESTRICT是默认值,它只限制对表元数据的列更改

CHANGE COLUMN CASCADE子句将覆盖表分区的列元数据,而不管表或分区的保护模式如何,请谨慎使用

详情参考官网:https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=27362034#LanguageManualDDL-AlterColumn

什么意思呢?下面以一个示例演示不加CASCADE与添加CASCADE的区别

1)数据准备

create table test_cascade (id bigint, name string) partitioned by (dt string);
insert into table test_cascade partition (dt='2024-11-01') values (1, 'a');
insert into table test_cascade partition (dt='2024-12-01') values (2, 'b');
select * from test_cascade;
'''
id     name     dt
1      a        2024-11-01
2      b        2024-12-01
'''

2)不加CASCADE

alter table test_cascade add columns (age int);
insert into table test_cascade partition (dt='2024-11-01') values (1,'a',19);
insert into table test_cascade partition (dt='2024-12-01') values (2,'b',18);
insert into table test_cascade partition (dt='2025-01-01') values (3,'c',20);
select * from test_cascade;
'''
id     name     age      dt
1      a        NULL     2024-11-01
1      a        NULL     2024-11-01
2      b        NULL     2024-12-01
2      b        NULL     2024-12-01
3      c        20       2025-01-01
'''

3)添加CASCADE

alter table test_cascade add columns (age int) cascade;
insert into table test_cascade partition (dt='2024-11-01') values (1,'a',19);
insert into table test_cascade partition (dt='2024-12-01') values (2,'b',18);
insert into table test_cascade partition (dt='2025-01-01') values (3,'c',18);
select * from test_cascade;
'''
id     name     age      dt
1      a        NULL     2024-11-01
1      a        19       2024-11-01
2      b        NULL     2024-12-01
2      b        18       2024-12-01
3      c        20       2025-01-01
'''

据此,可得如下结论:

  • 不加CASCADE:插入数据时,已存在数据的分区新增字段值为NULL,无数据的分区新增字段值可以插入成功
  • 添加CASCADE:插入数据时,已存在数据的分区和无数据的分区新增字段值都可以插入成功

即就是,默认RESTRICT只变更新分区的表结构(新分区元数据),而CASCADE不仅变更新分区的表结构(新分区元数据),同时也级联变更旧分区的表结构(旧分区元数据)

3、历史分区新增列为NULL问题


实际应用中,通常会存在修改表结构的需求,例如,增加一个字段

如果使用如下语句新增列:

ALTER TABLE table_name ADD COLUMNS (col_name data_type [COMMENT col_comment]);

则可以成功添加列col_name,但如果数据表table_name中已有旧的分区,则该旧分区中的col_name将为NULL且无法更新,即使使用INSERT OVERWRITE也无效

出现这个问题的原因就是没有使用CASCADE关键字导致的。CASCADE不仅可以变更新分区的表结构(元数据),同时也会级联变更旧分区的表结构(元数据)

解决方法也很简单,只需要在原语句后面添加CASCADE关键字即可:

ALTER TABLE table_name ADD COLUMNS (col_name data_type [COMMENT col_comment]) CASCADE;

针对分区表新增字段不加CASCADE关键字时对于历史分区新插入的数据,新增的列数据都会显示为NULL,其它已有列的数据则显示正常

值得注意的是,如果还需要更改新增列的位置,也需要使用CASCADE关键字:

ALTER TABLE table_name CHANGE [COLUMN] col_name col_name data_type [COMMENT col_comment] AFTER column_name CASCADE;

另外,如果存储格式为Parquet,那么该新增列的数据都将为NULL,如果为TextFile格式,则不会出现这种情况



参考文章:https://blog.csdn.net/sx157559322/article/details/131950817


相关文章:

Hive分区表新增字段并指定位置

Hive分区表新增字段并指定位置 1、Hive分区表新增字段2、CASCADE关键字3、历史分区新增列为NULL问题 1、Hive分区表新增字段 Hive分区表新增字段并指定位置主要分为两步:新增字段和移动字段 1)新增字段 ALTER TABLE table_name ADD COLUMNS (col_name …...

关系型数据库(RDBMS)与非关系型数据库(NoSQL)应用场景

关系型数据库适用于事务性、强一致性和结构化数据场景;非关系型数据库则在高并发、大数据、非结构化数据场景中表现更优;数据量和并发量增加时,应通过分库分表、缓存、集群扩展等手段进行优化。 1. 在什么样的业务场景下,你会优先…...

浅谈CI持续集成

1.什么是持续集成 持续集成(Continuous Integration)(CI)是一种软件开发实践,团队成员频繁地将他们的工作成果集成到一起(通常每人每天至少提交一次,这样每天就会有多次集成),并且在每次提交后…...

华为新手机和支付宝碰一下 带来更便捷支付体验

支付正在变的更简单。 11月26日,华为新品发布会引起众多关注。发布会上,华为常务董事余承东专门提到,华为Mate 70和Mate X6折叠屏手机的“独门支付秘技”——“碰一下”,并且表示经过华为和支付宝的共同优化,使用“碰…...

shell编程基础笔记

目录 echo改字体颜色和字体背景颜色 bash基本功能: 运行方式:推荐使用第二种方法 变量类型 字符串处理: 条件判断:(使用echo $?来判断条件结果,0为true,1为false) 条件语句&a…...

VS Code配置Lua调试环境

我这里选用Emmylua进行Lua代码调试,调试环境配置如下: 一、安装Emmylua 在VS Code扩展里搜索emmylua,然后进行安装, 如下 二、配置launch.json 在Run and Debug里生成launch.json文件 点击以上菜单后,生成launch.json文件如下: 三、配置.e…...

FPGA(一)Quartus II 13.1及modelsim与modelsim-altera安装教程及可能遇到的相关问题

零.前言 在学习FPGA课程时,感觉学校机房电脑用起来不是很方便,想着在自己电脑上下载一个Quartus II 来进行 基于 vhdl 语言的FPGA开发。原以为是一件很简单的事情,没想到搜了全网文章发现几乎没有一个完整且详细的流程教学安装(也…...

【单片机】ESP32-S3+多TMC2209控制步进电机系列1 UART通信及无传感回零 硬件部分

目录 1. 硬件选型1.1 esp32硬件型号1.2 TMC2209 硬件型号 2 原理接线图2.1 esp32接线2.2 TMC2209接线2.2.1 单向通讯 不配置地址2.2.2 单向通讯 配置地址2.2.3 双向通讯 单UART 【本文采用】2.2.4 双向通讯 多UART 3. 成品效果 1. 硬件选型 1.1 esp32硬件型号 采用的是微雪ES…...

Django之ORM

1.ORM介绍 ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。 简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对…...

html css 图片背景透明

html css图标背景透明 css属性&#xff1a; background-color:transparent; mix-blend-mode: multiply; 完整HTML代码&#xff1a; <html><head><title>Test</title></head><body><div id"test" style"background-col…...

使用ALB实现gRPC协议的负载均衡

gRPC是一种高性能、开源的远程过程调用框架&#xff0c;当您使用gRPC进行后端服务通信时&#xff0c;您可使用应用型负载均衡ALB&#xff08;Application Load Balancer&#xff09;实现gRPC协议的负载均衡&#xff0c;统一流量入口。gRPC基于HTTP/2协议进行通信&#xff0c;目…...

解决IDEA的easycode插件生成的mapper.xml文件字段之间逗号丢失

问题 easycode插件生成的mapper.xml文件字段之间逗号丢失&#xff0c;如图 解决办法 将easycode(在settings里面的othersettings)设置里面的Template的mapper.xml.vm和Global Config的mybatisSupport.vm的所有$velocityHasNext换成$foreach.hasNext Template的mapper.xml.vm(…...

【Linux测试题】

1. 选择题 题目&#xff1a; 如果想将电脑中Windows C盘&#xff08;hd1&#xff09;安装在Linux文件系统的/winsys目录下&#xff0c;请问正确的命令是&#xff08;&#xff09;。 选项&#xff1a; A. root104.123.123.123:~# mount dev/hd1 /winsys B. root104.123.123.12…...

python使用openpyxl处理excel

文章目录 一、写在前面1、安装openpyxl2、认识excel窗口 二、基本使用1、打开excel2、获取sheet表格3、获取sheet表格 尺寸4、获取单元格数据5、获取区域单元格数据6、sheet.iter_rows()方法7、修改单元格的值8、向表格中插入行数据9、实战&#xff1a;合并多个excel 三、获取E…...

【JavaWeb后端学习笔记】Mybatis基础操作以及动态SQL(增、删、改、查)

Mybatis 0、环境准备0.1 准备数据库表emp&#xff1b;0.2 准备SpringBoot工程0.3 配置文件中引入数据库连接信息0.4 创建对应的实体类0.5 准备Mapper接口 1、MyBatis基础操作1.1 删除1.2 新增&#xff08;主键返回&#xff09;1.3 更新1.4 查询&#xff08;解决字段名与类属性名…...

基于MATLAB野外观测站生态气象数据处理分析实践应用

1.本课程基于MATLAB语言 2.以实践案例为主&#xff0c;提供所有代码 3.原理与操作结合 4.布置作业&#xff0c;答疑与拓展 示意图&#xff1a; 以野外观测站高频时序生态气象数据为例&#xff0c;基于MATLAB开展上机操作&#xff1a; 1.不同生态气象要素文件的数据读写与批处理…...

IP 地理位置定位技术原理概述

本文深入探讨 IP 地理位置定位技术的原理。介绍了 IP 地址的基本概念及其在网络中的作用&#xff0c;随后阐述了基于数据库查询、基于网络拓扑分析以及基于机器学习算法的三种主要 IP 地理位置定位技术原理中的基于IP数据库查询。 IP 地址基础 IP 地址是互联网协议&#xff0…...

C语言(分支结构)

问题引出 我们在程序设计往往会遇到如下的问题&#xff0c;比如下的函数的计算。 也就是我们是必须要通过一个条件的结果来选择下一步的操作&#xff0c;算法上属于一个分支结构&#xff0c;C语言中实现分支结构主要使用if语句。 条件判断 根据某个条件成立与否&#xff0c…...

批量将不同的工作簿合并到同一个Excel文件

批量将不同的工作簿合并到同一个Excel文件 下面是一个示例&#xff0c;展示如何批量将不同的工作簿合并到同一个Excel文件&#xff0c;并生成模拟数据。我们将使用 Python 的 pandas 库来完成这个任务。具体步骤如下&#xff1a; 步骤 1: 安装必要的库 首先确保你已安装 pan…...

详解AI网关助力配电房实现智能化管控应用

​对于一些建设年份久远的老旧配电房&#xff0c;由于配套降温散热设施设备不完善、线路设备老化等因素&#xff0c;极易出现因环境过热而影响设备正常稳定运行&#xff0c;进而导致电气故障甚至火灾等事故产生。 基于AI网关的配电房智能监控及管理 针对配电房的实时安全监测及…...

【Linux】shell脚本忽略错误继续执行

在 shell 脚本中&#xff0c;可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行&#xff0c;可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令&#xff0c;并忽略错误 rm somefile…...

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留&#xff0c;CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制&#xff08;CCA-Attention&#xff09;&#xff0c;…...

Python爬虫实战:研究feedparser库相关技术

1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

MMaDA: Multimodal Large Diffusion Language Models

CODE &#xff1a; https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA&#xff0c;它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构&#xf…...

数据链路层的主要功能是什么

数据链路层&#xff08;OSI模型第2层&#xff09;的核心功能是在相邻网络节点&#xff08;如交换机、主机&#xff09;间提供可靠的数据帧传输服务&#xff0c;主要职责包括&#xff1a; &#x1f511; 核心功能详解&#xff1a; 帧封装与解封装 封装&#xff1a; 将网络层下发…...

【C语言练习】080. 使用C语言实现简单的数据库操作

080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...

JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案

JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停​​ 1. ​​安全点(Safepoint)阻塞​​ ​​现象​​:JVM暂停但无GC日志,日志显示No GCs detected。​​原因​​:JVM等待所有线程进入安全点(如…...

是否存在路径(FIFOBB算法)

题目描述 一个具有 n 个顶点e条边的无向图&#xff0c;该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序&#xff0c;确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数&#xff0c;分别表示n 和 e 的值&#xff08;1…...

3-11单元格区域边界定位(End属性)学习笔记

返回一个Range 对象&#xff0c;只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意&#xff1a;它移动的位置必须是相连的有内容的单元格…...

基于 TAPD 进行项目管理

起因 自己写了个小工具&#xff0c;仓库用的Github。之前在用markdown进行需求管理&#xff0c;现在随着功能的增加&#xff0c;感觉有点难以管理了&#xff0c;所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD&#xff0c;需要提供一个企业名新建一个项目&#…...