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

【Hive】新增字段(column)后,旧分区无法更新数据问题

@TOC

【一】问题描述

Hive修改数据表结构的需求,比如:增加一个新字段。

如果使用如下语句新增列,可以成功添加列col1。但如果数据表tb已经有旧的分区(例如:dt=20190101),则该旧分区中的col1将为空且无法更新,即便insert overwrite该分区也不会生效。

alter table tb add columns(col1 string);

【二】解决方法

增加col1时加上cascade关键字。示例如下:

alter table tb add columns(col1 string) cascade;

对于分区表,一定要加上cascade,否则其历史分区的元数据信息(metadata)将无法正常更新

【三】原理分析

新增字段操作只更改元数据信息,对存储的数据无影响。新增字段语句最后的[CASCADE|RESTRICT]关键字是可以选的,不指定时默认值是RESTRICT,表示新增字段只作用在表上;加上CASCADE表示新增字段同样作用在历史分区上。

CASCADE的作用是级联的意思,修改表字段的同时级联修改历史分区的字段信息。执行过新增的字段的语句后即可正常刷数据,对于历史版本的Hive也适用。

【1】建一张公共表并插入数据(数据源)

# 建表,id和name字段,并且有pt_day分区字段
CREATE EXTERNAL TABLE IF NOT EXISTS bi.test_common_1
(id          INT    COMMENT '编号',name        STRING COMMENT '姓名'
) COMMENT '修改Location测试'
PARTITIONED BY (pt_day STRING COMMENT '天分区')
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\001'
LINES TERMINATED BY '\n'
STORED AS ORC
LOCATION 'hdfs://hadoop102:8020/user/hive/warehouse/bi.db/test_common_1'
TBLPROPERTIES ("orc.compress"="ZLIB")
;# 往20240209分区插入两条数据
INSERT OVERWRITE TABLE bi.test_common_1
PARTITION (pt_day = '20240209')
VALUES(1, 'jack')
,(2, 'rose')
;# 往20240210分区插入两条数据
INSERT OVERWRITE TABLE bi.test_common_1
PARTITION (pt_day = '20240210')
VALUES(3, 'john')
,(4, 'mary')
;# 查询两个分区的数据
SELECTpt_day,id,name
FROM bi.test_common_1
WHERE pt_day IN ('20240209', '20240210')
ORDER BY pt_day,id
;

【2】建一张测试更新字段表并往一个分区插入数据

创建新表,只有id字段和pt_day分区字段,并且往20240209分区插入两条数据

CREATE EXTERNAL TABLE IF NOT EXISTS bi.test_add_column_1
(id        INT COMMENT '编号'
) COMMENT '修改Location测试表1'
PARTITIONED BY (pt_day STRING COMMENT '天分区')
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\001'
LINES TERMINATED BY '\n'
STORED AS ORC
LOCATION 'hdfs://hadoop102:8020/user/hive/warehouse/bi.db/test_add_column_1'
TBLPROPERTIES ("orc.compress"="ZLIB")
;INSERT OVERWRITE TABLE bi.test_add_column_1
PARTITION (pt_day = '20240209')
SELECTid
FROM bi.test_common_1
WHERE pt_day = '20240209'
;SELECTid
FROM bi.test_common_1
WHERE pt_day = '20240209'
;

【3】测试表新增字段并往新分区插入数据

新增一个字段,并且往新增字段后的新分区里插入数据

ALTER TABLE bi.test_add_column_1 ADD COLUMNS (name STRING COMMENT '姓名');INSERT OVERWRITE TABLE bi.test_add_column_1
PARTITION (pt_day = '20240210')
SELECTid,name
FROM bi.test_common_1
WHERE pt_day = '20240210'
;

【4】刷新历史分区20240209,历史分区插入数据,查看新字段能不能刷新数据

INSERT OVERWRITE TABLE bi.test_add_column_1
PARTITION (pt_day = '20240209')
SELECTid,name
FROM bi.test_common_1
WHERE pt_day = '20240209'
;SELECTpt_day,id,name
FROM bi.test_common_1
WHERE pt_day IN ('20240209', '20240210')
ORDER BY pt_day,id
;

在这里插入图片描述

从查询结果可以看出,新增字段后,新的分区插入数据,以及重新刷新数据的历史分区,数据都可以正常查询。

这应该是这个版本的Hive做过优化,历史版本的Hive可能会出现pt_day = '20240209’查询结果为NULL的情况。

【5】查看表及分区的字段信息

DESC bi.test_add_column_1 PARTITION(pt_day = '20240209');DESC bi.test_add_column_1 PARTITION(pt_day = '20240210');

在这里插入图片描述
从上面的查询结果可以看出,pt_day = '20240209’和pt_day = '20240210’的分区字段信息不一致。

【四】注意事项

如果不是分区表,不可以加cascade,否则会报错

可以通过以下语句判断是否是分区表

show partitions bi.test_common_1

相关文章:

【Hive】新增字段(column)后,旧分区无法更新数据问题

TOC 【一】问题描述 Hive修改数据表结构的需求,比如:增加一个新字段。 如果使用如下语句新增列,可以成功添加列col1。但如果数据表tb已经有旧的分区(例如:dt20190101),则该旧分区中的col1将为…...

C# (图文教学)在C#的编译工具Visual Studio中使用SQLServer并对数据库中的表进行简单的增删改查--14

目录 一.安装SQLServer 二.在SQLServer中创建一个数据库 1.打开SQL Server Manager Studio(SSMS)连接服务器 2.创建新的数据库 3.创建表 三.Visual Studio 配置 1.创建一个简单的VS项目(本文创建为一个简单的控制台项目) 2.添加数据库连接 四.简单连通代码示例 简单连…...

4G DTU赋能智能配电环网柜通信运维管理

在智能电网建设持续推进下,智能配电环网柜作为配电网的关键节点设备,其稳定、高效运行对保障电力可靠供应是品质生活的基本保障。通信系统是实现智能配电环网柜远程监控与管理的核心纽带,而4G DTU(数据传输单元)凭借其…...

快速上手 HarmonyOS 应用开发

一、DevEco Studio 安装与配置 1. DevEco Studio 简介 DevEco Studio 是 HarmonyOS 的一站式集成开发环境(IDE),提供了丰富的工具和功能,支持 HarmonyOS 应用开发的全流程。 2. DevEco Studio 下载与安装 下载地址&#xff1a…...

解决nginx: [emerg] unknown directive “stream“ in /etc/nginx/nginx.conf问题 --九五小庞

参考链接:https://blog.csdn.net/User_bie/article/details/128102168 Nginx在编译安装时,需指定安装的模块...

Object类和hashcode方法

一.Object类. 1.所有类的父类,如果一个类没有继承那个类,那么都是默认继承于Object这个类。 2.object中存在的方法:(画横线的方法代表过时了,但是能用) 3.这里能用equals的方法是因为默认继承了Object这个…...

速通Docker === 介绍与安装

目录 Docker介绍 Docker优势 Docker组件 Docker CLI (命令行接口) Docker Host (Docker 守护进程) 容器 (Container) 镜像 (Image) 仓库 (Registry) 关系总结 应用程序部署方式 传统部署 (Traditional Deployment) 虚拟化部署 (Virtualization Deployment) 容器部署…...

OpenStack 网络服务的插件架构

OpenStack 的网络服务具有灵活的插件架构,可支持多种不同类型的插件以满足不同的网络需求。以下是对 OpenStack 网络服务插件架构中一些常见插件类型的介绍: 一、SDN 插件 Neutron 与 SDN 的集成:在 OpenStack 网络服务里,SDN 插…...

SAP SD销售模块组织架构介绍(销售组织、分销渠道等)

【SAP系统研究】 #SAP #SD #销售管理 #销售组织 一、销售组织 Sales Organization,是为企业销售而建立的组织单元,用于物料和服务的销售。销售组织下又可以分为若干个分销渠道,用于不同的市场服务;分销渠道又可以按产品组的不同…...

CMake学习笔记(2)

1. 嵌套的CMake 如果项目很大,或者项目中有很多的源码目录,在通过CMake管理项目的时候如果只使用一个CMakeLists.txt,那么这个文件相对会比较复杂,有一种化繁为简的方式就是给每个源码目录都添加一个CMakeLists.txt文件&#xff…...

Linux下源码编译安装Nginx1.24及服务脚本实战

1、下载Nginx [rootlocalhost ~]# wget -c https://nginx.org/download/nginx-1.24.0.tar.gz2、解压 [rootlocalhost ~]# tar xf nginx-1.24.0.tar.gz -C /usr/local/src/3、安装依赖 [rootlocalhost ~]# yum install gcc gcc-c make pcre-devel openssl-devel -y4、 准备 N…...

4、dockerfile实现lnmp和elk

dockerfile实现lnmp 使用dockerfile n:nginx,172.111.0.10 m:mysql,172.111.0.20 p:php,172.111.0.30 安装配置nginx 1、准备好nginx和wordpress安装包 2、配置dockerfile 3、配置nginx主配置文件ngin…...

Portainer.io安装并配置Docker远程访问及CA证书

Portainer.io安装并配置Docker远程访问及CA证书 文章目录 Portainer.io安装并配置Docker远程访问及CA证书一.安装 Portainer.io2.启动容器 二.docker API远程访问并配置CA安全认证1.配置安全(密钥)访问2.补全CA证书信息3.生成server-key.pem4.创建服务端签名请求证书文件5.创建…...

探索 Transformer²:大语言模型自适应的新突破

目录 一、来源: 论文链接:https://arxiv.org/pdf/2501.06252 代码链接:SakanaAI/self-adaptive-llms 论文发布时间:2025年1月14日 二、论文概述: 图1 Transformer 概述 图2 训练及推理方法概述 图3 基于提示的…...

Flutter 多终端测试 自定义启动画面​​​​​​​ 更换小图标和应用名称

多终端测试 flutter devices flutter run -d emulator-5554 flutter run -d emulator-5556 自定义启动画面 之前: 进入assert 3x 生成 1x 2x dart run flutter_native_splash:create dart run flutter_native_splash:remove 现在(flutter_nativ…...

rsarsa-给定pqe求私钥对密文解密

题目: Math is cool! Use the RSA algorithm to decode the secret message, c, p, q, and e are parameters for the RSA algorithm.p 96484230290105156765905517400104265349457376392357398006439893520398525072984913995610350091634270503701075707336333…...

flutter开发-figma交互设计图可以转换为flutter源代码-如何将设计图转换为flutter源代码-优雅草央千澈

flutter开发-figma交互设计图可以转换为flutter源代码-如何将设计图转换为flutter源代码-优雅草央千澈 开发背景 可能大家听过过蓝湖可以转ui设计图为vue.js,react native代码,那么请问听说过将figma的设计图转换为flutter源代码吗?本文优雅草央千澈带…...

Deep4SNet: deep learning for fake speech classification

Deep4SNet:用于虚假语音分类的深度学习 摘要: 虚假语音是指即使通过人工智能或信号处理技术产生的语音记录。生成虚假录音的方法有"深度语音"和"模仿"。在《深沉的声音》中,录音听起来有点合成,而在《模仿》中…...

3 前端: Web开发相关概念 、HTML语法、CSS语法

文章目录 前言:导学1 Web开发相关概念2 Web标准(网页标准)3 软件架构(CS/BS)(1)C/S: Client/Server 客户端 / 服务器端(2)B/S: Browser/Server 浏览器 / 服务器端VSCode配置前段开发环境一、HTML概念1 概念2 HTML快速入门(1)语法快速入门(2)VSCode一个 !(快捷键…...

SpringBoot工程快速启动

1.问题导入 以后我们和前端开发人员协同开发,而前端开发人员需要测试前端程序就需要后端开启服务器,这就受制于后端开发人员。 为了摆脱这个受制,前端开发人员尝试着在自己电脑上安装 Tomcat 和 Idea ,在自己电脑上启动后端程序&a…...

ESP32读取DHT11温湿度数据

芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...

HBuilderX安装(uni-app和小程序开发)

下载HBuilderX 访问官方网站:https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本: Windows版(推荐下载标准版) Windows系统安装步骤 运行安装程序: 双击下载的.exe安装文件 如果出现安全提示&…...

【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分

一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...

大数据学习(132)-HIve数据分析

​​​​🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言&#x1f4…...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合

在汽车智能化的汹涌浪潮中,车辆不再仅仅是传统的交通工具,而是逐步演变为高度智能的移动终端。这一转变的核心支撑,来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒(T-Box)方案:NXP S32K146 与…...

面向无人机海岸带生态系统监测的语义分割基准数据集

描述:海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而,目前该领域仍面临一个挑战,即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...

解决:Android studio 编译后报错\app\src\main\cpp\CMakeLists.txt‘ to exist

现象: android studio报错: [CXX1409] D:\GitLab\xxxxx\app.cxx\Debug\3f3w4y1i\arm64-v8a\android_gradle_build.json : expected buildFiles file ‘D:\GitLab\xxxxx\app\src\main\cpp\CMakeLists.txt’ to exist 解决: 不要动CMakeLists.…...

什么是VR全景技术

VR全景技术,全称为虚拟现实全景技术,是通过计算机图像模拟生成三维空间中的虚拟世界,使用户能够在该虚拟世界中进行全方位、无死角的观察和交互的技术。VR全景技术模拟人在真实空间中的视觉体验,结合图文、3D、音视频等多媒体元素…...

数学建模-滑翔伞伞翼面积的设计,运动状态计算和优化 !

我们考虑滑翔伞的伞翼面积设计问题以及运动状态描述。滑翔伞的性能主要取决于伞翼面积、气动特性以及飞行员的重量。我们的目标是建立数学模型来描述滑翔伞的运动状态,并优化伞翼面积的设计。 一、问题分析 滑翔伞在飞行过程中受到重力、升力和阻力的作用。升力和阻力与伞翼面…...

uniapp 集成腾讯云 IM 富媒体消息(地理位置/文件)

UniApp 集成腾讯云 IM 富媒体消息全攻略(地理位置/文件) 一、功能实现原理 腾讯云 IM 通过 消息扩展机制 支持富媒体类型,核心实现方式: 标准消息类型:直接使用 SDK 内置类型(文件、图片等)自…...