【hive】—原有分区表新增加列(alter table xxx add columns (xxx string) cascade;)

项目场景:

需求:需要在之前上线的分区报表中新增加一列。


实现方案:

1、创建分区测试表并插入测试数据

drop table test_1;
create table test_1
(id string,
score int,
name string
)
partitioned by (class string)
row format delimited fields terminated by ',';insert overwrite table test_1
partition (class='A')
values('a',92,'lily'),('b',102,'mike');

查看原有分区表test_1的表结构

 desc test_1;

在这里插入图片描述

2、新增加一列 grade,数据类型为strIng

alter table test_1 add columns(grade string);

查看添加列之后的数据结构

desc test_1;

在这里插入图片描述

3、新增加列grade有数据后,插入新的分区B数据正常显示,原来A区grade列为NULL。

insert overwrite table test_1
partition (class='B')
values('a',92,'John','良好'),('b',112,'Jeff','优秀');select * from test_1;

在这里插入图片描述

原因是: hive使用新增加列语句,只修改了hive的元数据, 并没有改变hdfs的数据文件。

显示Table和Partition的详细信息,及表数据存放的hdfs的数据文件路径。

desc formatted test_1;

在这里插入图片描述

查看具体分区的hdfs的数据文件路径

hadoop fs -lsr hdfs://b1/apps/database/hive/database/test_1

在这里插入图片描述

查看A、B两个分区下的hdfs的数据文件的内容,发现A区并没有grade的内容。

A区:

hadoop fs -cat hdfs://b1/apps/database/hive/database/test_1/class=A/000000_0

在这里插入图片描述

B区:

hadoop fs -cat hdfs://b1/apps/database/hive/database/test_1/class=B/000000_0

在这里插入图片描述


问题描述:

为了表的旧分区新增加列有数据,尝试重新写入A区的数据,发现A区新增列还是为NULL,重写分区后只有最新分区(B区)的新增列有数据。

insert overwrite table test_1
partition (class='A')
values('a',92,'lily','良好'),('b',102,'mike','良好');select * from test_1;

在这里插入图片描述


原因分析:

“alter table test_1 add columns(grade string);”,hive新增加列只修改了更新分区的表结构(metadata),没有变更旧分区的表结构。

表的表结构

在这里插入图片描述

A分区的表结构

desc formatted test_1 partition(class='A');

在这里插入图片描述
B分区的表结构

desc formatted test_1 partition(class='B');

在这里插入图片描述

查看表的表结构和新增分区的表结构(B区)是一致,与旧分区的表结构(A区)不一致。


解决方案:

  • 方法一:删除原来的分区数据重新插入
alter table test_1 drop partition (class='A');insert overwrite table test_1
partition (class='A')
values('a',92,'lily','良好'),('b',102,'mike','良好');select * from test_1;

在这里插入图片描述

  • 方法二: 最初,需要在增加grade时加上cascade关键字,cascade的中文翻译为“级联”,也就是不仅变更新分区的表结构(metadata),同时也变更旧分区的表结构。

添加列的语法

ALTER TABLE table_name [PARTITION partition_spec]                 -- (Note: Hive 0.14.0 and later)ADD|REPLACE COLUMNS (col_name data_type [COMMENT col_comment], ...)[CASCADE|RESTRICT]  

注意:ALTER TABLE ADD|REPLACE COLUMNS with CASCADE command changes the columns of a table’s metadata, and cascades the same change to all the partition metadata. RESTRICT is the default, limiting column changes only to table metadata.

drop table test_1;
create table test_1
(id string,
score int,
name string
)
partitioned by (class string)
row format delimited fields terminated by ',';insert overwrite table test_1
partition (class='A')
values('a',92,'lily'),('b',102,'mike');alter table test_1 add columns(grade string) cascade;insert overwrite table test_1
partition (class='A')
values('a',92,'lily','良好'),('b',102,'mike','良好');

在这里插入图片描述

如果已经执行添加操作,并且没有带cascade,可以尝试下面的方法:

alter table test_1 replace columns(id string ,score int,name string);

再重新带上cascade进行添加列的操作。


扩展

需求:增加一列,指定增加到原始的两列中间

1、新增加列grade

alter table test_1 add columns (grade string comment '新添加的列') cascade;

在这里插入图片描述

2、再对grade列进行排序(注意:必须添加cascade关键字,不然不会刷新旧分区数据,关键字cascade能修改元数据)

更新列的语法

ALTER TABLE table_name CHANGE [COLUMN] col_old_name col_new_name column_type [COMMENT col_comment] [FIRST|AFTER column_name]
--将grade增加到score列与name中间
alter table test_1 change column grade grade string after score cascade;

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

工作游戏时mfc140u.dll丢失的解决方法,哪个方法可快速修复mfc140u.dll问题

在 Windows 操作系统中,mfc140u.dll 文件是非常重要的一个组件,许多基于 MFC(Microsoft Foundation Classes)的程序都需要依赖这个文件。然而,有些用户在运行这些程序时可能会遇到mfc140u.dll丢失的问题,导…

12个微服务架构模式最佳实践

微服务架构是一种软件开发技术,它将大型应用程序分解为更小的、可管理的、独立的服务。每个服务负责特定的功能,并通过明确定义的 API 与其他服务进行通信。微服务架构有助于实现软件系统更好的可扩展性、可维护性和灵活性。 接下来,我们将介…

机器学习(9)---线性回归中的公式推导(手推)、闭式解和数值解

文章目录 一、闭式解(解析解)二、数值解三、一元线性回归中w和b的推导四、多元线性回归中w的推导 一、闭式解(解析解) 1. 在机器学习中,闭式解也被称为解析解(analytical solution),…

【LeetCode-面试经典150题-day23】

目录 108. 将有序数组转换为二叉搜索树 148.排序链表 427.建立四叉树 23.合并K个升序链表 108. 将有序数组转换为二叉搜索树 题意: 给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。 高度平衡 二…

R语言统计学DOE实验设计:用平衡不完全区组设计(BIBD)分析纸飞机飞行时间实验数据...

全文链接:http://tecdat.cn/?p31010 平衡不完全区组设计(BIBD)是一个很好的研究实验设计,可以从统计的角度看各种所需的特征(点击文末“阅读原文”获取完整代码数据)。 最近我们被客户要求撰写关于BIBD的研…

【C++进阶】二叉树进阶之二叉搜索树

👦个人主页:Weraphael ✍🏻作者简介:目前学习C和算法 ✈️专栏:C航路 🐋 希望大家多多支持,咱一起进步!😁 如果文章对你有帮助的话 欢迎 评论💬 点赞&#x1…

北斗高精度定位,破解共享单车停车乱象

如今,共享单车已经成为了许多人出行的首选方式,方便了市民们的“最后一公里”,给大家的生活带来了很多便利。然而,乱停乱放的单车也给城市治理带来了难题。在这种情况下,相关企业尝试将北斗导航定位芯片装载到共享单车…

SpringMVC综合案例

目录 一、SpringMVC常用注解 二、传递参数 2.1 基础类型String 2.2 复杂类型 2.3 RequestParam 2.4 PathVariable 2.5 RequestBody 2.6 RequestHeader 2.7 请求方法 三、返回值 3.1 void 3.2 String 3.3 StringModel 3.4 ModelAndView 四、页面跳转 4.1 转发 4…

蓝桥杯打卡Day6

文章目录 N的阶乘基本算术整数查询 一、N的阶乘OI链接 本题思路&#xff1a;本题是关于高精度的模板题。 #pragma GCC optimize(3) #include <bits/stdc.h>constexpr int N1010;std::vector<int> a; std::vector<int> f[N];std::vector<int> mul(in…

如何用 Java 找到字符串中的元音

这个题目其实不难&#xff0c;这是一个公司面试的时候要求的题目。 这个公司的面试有点意思&#xff0c;他们希望 Zoom 看我的电脑&#xff0c;然后让我解决问题。 题目 题目就非常简单了&#xff0c;他们给了我 2 个字符串。 其中一个是测试字符串&#xff0c;另外一个是元…

《热题100》字符串、双指针、贪心算法篇

思路&#xff1a;对于输入的的字符串&#xff0c;只有三种可能&#xff0c;ipv4,ipv6,和neither ipv4:四位&#xff0c;十进制&#xff0c;无前导0&#xff0c;小于256 ipv6:八位&#xff0c;十六进制&#xff0c;无多余0&#xff08;00情况不允许&#xff09;&#xff0c;不…

Lua02——应用场景及环境安装

应用场景 是当今游戏领域使用最广泛的脚本语言之一。 搭配 OpenResty 使用&#xff0c;可以扩展Nginx服务器的功能&#xff0c;使用者仅需要编写Lua代码就能轻松完成业务逻辑。 与 Redis 结合。 Adobe Photoshop Lightroom 搭配 Lua 编写插件。 与游戏结合&#xff1a; C/…

3.4 栈与递归

3.4.1 采用递归算法解决问题 3.4 栈与递归的关系 栈和递归之间有着紧密的关系&#xff0c;特别是在算法和程序设计中。栈作为一种数据结构&#xff0c;可以有效地支持递归算法的实现。本节我们将详细讨论栈在递归算法中的作用及其在程序设计中的重要性。 1. 递归算法的基本概…

Swift学习内容精选(一)

Swift 可选(Optionals)类型 Swift 的可选&#xff08;Optional&#xff09;类型&#xff0c;用于处理值缺失的情况。可选表示"那儿有一个值&#xff0c;并且它等于 x "或者"那儿没有值"。 Swfit语言定义后缀&#xff1f;作为命名类型Optional的简写&…

uni-app--》基于小程序开发的电商平台项目实战(一)

&#x1f3cd;️作者简介&#xff1a;大家好&#xff0c;我是亦世凡华、渴望知识储备自己的一名在校大学生 &#x1f6f5;个人主页&#xff1a;亦世凡华、 &#x1f6fa;系列专栏&#xff1a;uni-app &#x1f6b2;座右铭&#xff1a;人生亦可燃烧&#xff0c;亦可腐败&#xf…

vue响应式详解

1. 响应式的定义 我们都知道&#xff0c;vue是基于javascript的&#xff0c;那我们使用一段javascript代码来描述响应式 let a 1,b 1,c; c a b; console.log(c) // 输出 2 // 改变 a的值 a 3; // 重新给c赋值 即把 c a b; 再执行一遍c的值才能变为 4 // c a b; // …

小白也可以玩转CMake之常用必备

目录 1.设置编译器flags2.设置源文件属性3.链接器标志4.Debug与Release包 今天&#xff0c;分享一篇工作中经常用到的一些CMake命令&#xff0c;看完就学会了哦&#xff0c;更多CMake与C内容也期待加入星球与我一起学习呀~ 1.设置编译器flags 例如&#xff1a;设置C标准&#x…

C高级shell脚本

#!/bin/bash function fun() {sum0i0b($*)while [ $i -lt ${#b[*]} ]do((sum ${b[i]}))((i))doneecho $sum }read -p "请输入数组" -a a fun ${a[*]}function fun2() {aid -ubid -gecho $a $b } p(fun2) uid${p[0]} pid${p[1]} echo $uid $pidXMind

飞行动力学 - 第20节-横向静稳定性 之 基础点摘要

飞行动力学 - 第20节-横向静稳定性 之 基础点摘要 1. 横向静稳定性2. 横向静稳定准则3. 横向静稳定性的组成4. 参考资料 1. 横向静稳定性 2. 横向静稳定准则 对于横向静稳定性飞机&#xff0c;右滚转扰动会产生正侧滑&#xff0c;飞机产生左滚恢复力矩(负)&#xff0c;即 Δ …

java 身份证号码验证

需要编号文件 编号文件部分内容如下 11:北京市 1101:市辖区 110101:东城区 110102:西城区 110105:朝阳区 110106:丰台区 110107:石景山区 110108:海淀区 ...... 编号文件内容比较多 csdn点击 下载地址 java代码如下 import java.io.*; import java.text.ParseException; im…