hive分区表新增字段并且新增字段的数据要写入当前和历史分区三种方法

Hive 分区表增加字段并赋值 Hive 分区表增加字段并赋值前言背景解决方案具体操作注意事项总结 前言 最近工作上需要用到大数据平台,之前没用过大数据相关的工具,所以踩了不少坑。今天就把在分区表中添加字段的坑分享出来,避免再次踩坑。 背景 今天接到一个需求,在原有的 hive 分区表中需要添加一个字段,并且原来的数据中这个字段还是需要赋值。后续这个值是由 ETL 任务去拉取的,所以只需要解决好原来的数据。 解决方案 为了数据不丢失,先把原表备份,备份表名叫 xxx_temp(备份表这里不给出语句)。 备份完了之后,开始把原表结算复制 阅读详情

由于之前的工作中就算是分区表中插入字段,也是只对当前数据负责,不需要管历史数据,所以没考虑过如果加字段之后,对历史分区如何插入数据的问题,直到一次面试,面试官问了这个问题,我决定用博客的形式记录下来,下面是加字段加不加cascade关键字的区别

-- 内容准备
test_partition.txt  -- 历史分区没有新增字段
1 zhangsan 1000 20210101
2 lisi 500 20210101
3 wangwu 6000 20210101
4 zhaoliu 4600 20210101

test_partition2.txt  -- 新增字段后插入新的分区
5 hanli 8000 mail 20210102
6 wusun 3500 femail 20210102
7 yezi 9000 mail 20210102
8 xaingjiao 7600 femail 20210102

test_partition3.txt  -- 历史分区数据加上新的字段
1 zhangsan 1000 mail 20210101
2 lisi 500 mail 20210101
3 wangwu 6000 femail 20210101
4 zhaoliu 4600 mail 20210101

-- 创建表  分区表
create table test(
    id int,
    name string,
    salary string
)
partitioned by (bbq_d_p string)
row format delimited fields terminated by ' ';

-- 第一次加载数据
load data local inpath '/usr/local/temp/test_partition.txt' overwrite into table test partition(bbq_d_p='20210101');

select * from test;  -
==>
test.id test.name       test.salary     test.bbq_d_p
1       zhangsan        1000    20210101
2       lisi            500     20210101
3       wangwu          6000    20210101
4       zhaoliu         4600    20210101

alter table test add columns(sex string);   -- 新增字段,没有使用cascade关键字,历史分区表中实际上没有插入这个字段,新增字段设置Null
select * from test;
==>
test.id test.name       test.salary     test.sex        test.bbq_d_p
1       zhangsan        1000              NULL    20210101
2       lisi            500               NULL    20210101
3       wangwu          6000              NULL    20210101
4       zhaoliu         4600              NULL    20210101


load data local inpath '/usr/local/temp/test_partition2.txt' overwrite into table test partition(bbq_d_p='20210102');

select * from test;  --发现新建的分区新增的字段成功写入了,那我们试一试历史分区的新增字段数据是否能写入成功
==>  新增字段后,创建的分区是可以写入新增字段数据的
test.id test.name       test.salary     test.sex        test.bbq_d_p
1       zhangsan        1000            NULL            20210101
2       lisi            500             NULL            20210101
3       wangwu          6000            NULL            20210101
4       zhaoliu         4600            NULL            20210101
5       hanli           8000            mail            20210102
6       wusun           3500            femail          20210102
7       yezi            9000            mail            20210102
8       xaingjiao       7600            femail          20210102

-- 写入历史分区,看效果
load data local inpath '/usr/local/temp/test_partition3.txt' overwrite into table test partition(bbq_d_p='20210101');

select * from test; -- 在历史分区中新增的字段都会置为null  没有成功插入数据
==>
test.id test.name       test.salary     test.sex        test.bbq_d_p
1       zhangsan        1000            NULL            20210101
2       lisi            500             NULL            20210101
3       wangwu          6000            NULL            20210101
4       zhaoliu         4600            NULL            20210101
5       hanli           8000            mail            20210102
6       wusun           3500            femail          20210102
7       yezi            9000            mail            20210102
8       xaingjiao       7600            femail          20210102

-- 重头再来
drop table if exists test;

create table test(
    id int,
    name string,
    salary string
)
partitioned by (bbq_d_p string)
row format delimited fields terminated by ' ';

-- 第一次加载数据
load data local inpath '/usr/local/temp/test_partition.txt' overwrite into table test partition(bbq_d_p='20210101');


alter table test add columns(sex string) cascade;

-- 重新载入历史分区数据
load data local inpath '/usr/local/temp/test_partition3.txt' overwrite into table test partition(bbq_d_p='20210101');

select * from test;  -- 发现这样历史分区中新插入的字段也成功写入了数据
==>
test.id test.name       test.salary     test.sex        test.bbq_d_p
1       zhangsan        1000            mail            20210101
2       lisi            500             mail            20210101
3       wangwu          6000            femail          20210101
4       zhaoliu         4600            mail            20210101

cascade关键字作用:强制刷新表和所有分区的元数据信息(包括历史数据分区的)

总结起来,想让所有分区都能重新插入数据
①增加字段时使用cascade关键字,强制刷新表和分区元数据信息
②不使用cascade关键字增加字段后,使用下面的语句刷新指定分区的元数据信息,该历史分区就可以重新插入数据

alter table tableName add columns(columnName columnType);
alter table tableName partition(partitionColumnName='partitionValue') add columns(columnName columnType);

③有些hive版本比较低不支持cascade,则需要备份数据,删除该分区后再insert overwrite。

Hive 分区表新增字段 cascade 阅读详情

相关推荐

hive创建表后怎么新增分区结构(创建表时没有创建分区)

hive在创建表时没有添加分区结构(希望大家不要杠,硬说是字段,只要您高兴,您怎么说都行),增加分区结构的方法

qq_38780623的博客 6523

hive中如何新增字段

1、方法1 alter table 表名 add columns (列名 string COMMENT '新添加的列') CASCADE; 与alter table 表名 add columns (列名 string COMMENT '新添加的列'); CASCADE会刷历史分区字段 2、方法2 (适用于外部表) 当分区过多的情况下,直接适用 .........

qq_42456324的博客 4万+

Hive分区表实战 - 单分区字段

在本Hive分区表管理实战中,我们通过一系列实际操作演示了如何有效地利用分区功能来组织和查询大规模数据。首先,创建了一个名为book的内部分区表,其结构包含id与name字段,并根据country字段进行分区。接下来,准备并加载了不同国家(中国和英国)书籍的数据文件到对应的分区目录中。为了展示分区灵活性,我们还模拟了手动创建新分区(日本),上传数据文件并通过命令将新分区纳入表的元数据管理中。此外,实战还涉及分区的删除、重命名等操作,直观展示了Hive如何同步更新分区状态至HDFS存储及元数据层面。

m0_75130002的博客 1501

1.Hive表新增字段,一次讲明白

Hive表新增字段可以说是Hive中最常见的操作,但有些开发人员在新增字段的时候总会遇到问题,这里进行详细的讲解和演示。

每天进步一点点 1万+

Hive分区表新增字段后插入数据显示为null

对Hive分区表进行新增字段后,会出现一个奇怪的情况,就是往 已经存在的 分区中装载数据后,某些字段的值显示为null,但实际情况是数据文件中对应的字段值其实是有值的。 下面我们重现该问题: 创建一个分区表 往表中装载数据 给表新增分区 再往表中装载数据并查询 数据装载成功后,通过查询可以看出,新创建的分区中数据显示正常,但是已经存在的time=20171010分区中新增数...

gxd520的专栏 3491

Hive分区表新增字段注意事项

分区表新增字段注意事项 对Hive表新增字段时,官方给出语法结构如下 ALTER TABLE table_name [PARTITION partition_spec] ADD|REPLACE COLUMNS (col_name data_type [COMMENT col_comment], ...) [CASCADE|RESTRICT] 其中CAS...

大熊的大数据 1万+

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

即就是,默认RESTRICT只变更新分区的表结构(新分区元数据),而CASCADE不仅变更新分区的表结构(新分区元数据),同时也级联变更旧分区的表结构(旧分区元数据)CHANGE COLUMN CASCADE命令修改表元数据的列,并将相同的更改级联到所有分区元数据。CASCADE不仅可以变更新分区的表结构(元数据),同时也会级联变更旧分区的表结构(元数据)针对分区表新增字段不加CASCADE关键字时对于历史分区新插入的数据,新增的列数据都会显示为NULL,其它已有列的数据则显示正常。

Java/Python大数据随笔 2773

PX4实战指南:通过遥控器通道直连实现舵机PWM控制

本文详细介绍了如何通过PX4飞控实现遥控器通道直连控制舵机PWM输出的完整流程。从硬件准备、遥控器配对到PX4参数配置和硬件连接,提供了实战技巧和常见问题解决方案,帮助无人机爱好者快速掌握舵机控制技术。重点讲解了AUX Passthrough模式设置和PWM参数调整等关键步骤。

weixin_29195217的博客 153

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

新增字段语句最后的[CASCADE|RESTRICT]关键字是可以选的,不指定时默认值是RESTRICT,表示新增字段只作用在表上;但如果数据表tb已经有旧的分区(例如:dt=20190101),则该旧分区中的col1将为空且无法更新,即便insert overwrite该分区也不会生效。CASCADE的作用是级联的意思,修改表字段的同时级联修改历史分区的字段信息。从查询结果可以看出,新增字段后,新的分区插入数据,以及重新刷新数据的历史分区,数据都可以正常查询。增加col1时加上cascade关键字。

weixin_44823875的博客 1796

STM32F4三重ADC+DMA双缓冲实战:用CubeMX搞定同步采样,告别数据覆盖烦恼

本文详细介绍了STM32F4三重ADC与DMA双缓冲技术的实战应用,通过CubeMX配置实现同步采样,解决数据覆盖问题。内容涵盖硬件架构解析、CubeMX工程配置、双缓冲实现技巧及调试优化方法,适用于电机控制、电力监测等需要高精度多通道信号采集的场景。

weixin_30627341的博客 357

OpenCV函数用法之calibrateCamera

参考链接:opencv中标定函数calibrateCamera_ychl87的专栏-优快云博客 世界坐标系的三维点投影到成像坐标系中的二维点的投影公式如下: 其中(X,Y,Z)为世界坐标系中的三维点; (u,v)为成像面坐标系中的二维点; A为相机的内参数矩阵:(cx,cy)为主光轴点,一般为图像的中心;fx和fy为焦距; [R|t]为相机的外参数矩阵:R为旋转矩阵,t为位移矩阵; 上述公式的简单推理过程如下 考虑到镜头畸变 其中,k1,k2,k3,k4,k5和k6为径向畸变,p1和.

tiger&sheep的博客 3万+

【HIVE笔记】HIVE分区表新增字段并写入数据

向HIVE分区表新增字段 alter table table_name add columns(column_name string comment '字段描述'); 此时新增的字段会插入在分区键之前。 将新增的字段插入到指定位置 ...

ToBeACodingMachine 3454

海康H304NAS 刷机飞牛

本文旨在分享如何将闲置的海康威视H304 NAS刷入飞牛NAS系统,并利用iStoreOS作为安装媒介。之前因为使用极空间NAS,这台H304闲置已久。最近尝试了飞牛NAS,在虚拟机上安装后挂载极空间的电影资源,体验不错,于是决定重新折腾这台H304。我个人喜欢尝试新系统,之前经常更新H304的固件,但设备总在使用一两年后出现故障,需要联系技术清理日志才能恢复。最后一次设备“变砖”后,连技术人员也联系不上了,自己尝试修复未果,设备就此闲置两三年。

u012985257的博客 2743

【HIVE SQL】HIVE分区表和非分区的建立、删除、覆盖写入等操作

一、非分区表 1. 建表和数据写入 -- 表的建立 无备注 create table table db_name.table_name2as select * fromtable db_name.table_name1 --整张表的覆盖写入 非分区表 INSERT OVERWRITE TABLE db_name.table_name1 select * from db_name.table_name2 (会保留表的字段备注) 2.表的删除和数据清空 -- 删除整张...

sunflower_sara的机器学习园地 1万+

NumPy包(下) python笔记扩展

nditer 是 NumPy 中的一个强大的迭代器对象,用于高效地遍历多维数组。nditer 提供了多种选项和控制参数,使得数组的迭代更加灵活和高效。nditer 提供了多种控制参数,用于控制迭代的行为。1.order 参数order 参数用于指定数组的遍历顺序。默认情况下,nditer 按照 C 风格(行优先)遍历数组。# 创建一个二维数组​# 使用 C 风格遍历数组print(x)# 输出:# 1# 2# 3# 4# 5# 6​# 使用 Fortran 风格遍历数组。

正在学习中ing...... 1353

复制幻灯片到另一个PPT编程

请确保将源PPT文件和目标PPT文件的文件名修改为你实际使用的文件名。运行上述代码后,目标PPT将包含源PPT中的所有幻灯片和形状。这里假设源PPT文件名为"source.pptx",目标PPT文件名为"target.pptx"。方法将每个幻灯片的布局添加到目标PPT中。是一个强大的库,可以用于创建、修改和操作PPT文件。要将一个PPT中的幻灯片复制到另一个PPT,可以使用Python的。这段代码遍历源PPT的每个幻灯片,并使用。步骤 3: 打开源PPT和目标PPT。这将保存修改后的目标PPT文件。

ByteSparkX的博客 1322

Hive分区表新增字段+重刷历史方法(避免旧分区新增字段为NULL)

1-1.建立测试表 hive> CREATE EXTERNAL TABLE table_for_test_add_column( > original_column string COMMENT '原始数据' > ) > COMMENT 'add_column的测试表' > PARTITIONED BY ( ...

hjw199089的博客 1万+

计算电磁学(三)有限差分方法

有限差分方法(FDM)是一种数值处理方法,通过将偏微分方程变换为一组代数方程,通过求解代数方程组来得到原边值问题的近似值。由于有限差分法非常简单,所以也特别的稳定高效。其中时域有限差分方法(FDTD)是电磁分析中的常用方法。在计算电磁学中,常用有限差分方法(finite difference equations)来替代微分方程。一个有限差分法通常包括三个步骤将求解域划分网格用有限差分方程逼近给定的微分方程求解在给定边界条件和初始状态下的方程常用的网格模型方阵斜方阵三角阵圆形阵。

CCC_B的博客 1639

如何在hive分区表插入数据

手动在hive表插入数据时,需特别注意两点: 1、hive表不可以指定字段插入 2、如果hive表是分区表,插入数据时,需指定分区 下面以分区表为例,插入数据: 查看表结构 hive> show create table acct_wt_user_avg_stock_hold_days; OK CREATE EXTERNAL TABLE `acct_wt_user_avg_stock_hol...

ck3207的博客 4万+

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

hive表新增字段,指定新增字段位置,删除字段

经验证,hive中修改字段顺序并没有将字段对应的值移动,只是单纯的修改字段名,如果是空表(没有数据),可以使用以上两步;其中CASCADE选项为选填的字段,但是对于分区表,一定要加上,否则其历史分区的元数据信息(metadata)将无法正常更新,导致访问历史分区时会报莫名的错误。背景:项目中,客户使用hive内表,由于逻辑变更,原hive表结构需要调整,新增字段。如果已经添加了字段,可以修改字段时,在修改字段名时带上,在修改回来。实际上,使用alter语句,把保留的字段全部列出来,删除的字段不要列出来。

Allenzyg的博客 7817

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

hive分区表添加字段出现新增字段null的bug

hive分区表添加字段出现新增字段null的bug 对于hive分区表,我们使用alter语句新增字段后(如alter table table_name add columns(age int)),再重写之前已经存在的分区,会出现使用查询语句查出来的新增字段显示null值。 例如:表a ,分区dt,已有分区dt=’a’,由于需求新增了一个字段,然后重新写a 分区数据,写完后使用select发...

anti 5672

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Hive 分区表 & 数据加载

1. Hive表数据的导入方式 1.1 本地上传至hdfs 命令: hdfs dfs -put [文件名] [hdfs绝对路径] 例如:测试文件 test_001.txt 内容如下 在 hdfs 绝对路径:/user/hive/warehouse/mytest.db/ 下有一张表 test_001,建表语句如下: create table test_001(id string, name string) row format delimited fields terminated

Python+大数据+数据分析+自动化+Vue组件开发 5973

hive分区表增加字段会导致新增字段为NULL

hive分区表增加字段会导致新增字段无法显示值的BUG 问题: 创建了hive表: create table default.temp (id int,name string) partitioned by (logdate string); 插入数据: insert into table default.temp partition (logdate='2019-03-01') v...

小丑鱼1127的博客 1683

hive 分区表_Spark将Dataframe数据写入Hive分区表的方案

DataFrame 将数据写入hive中时,默认的是hive默认数据库,insert into没有指定数据库的参数,数据写入hive表或者hive表分区中:1、将DataFrame数据写入到hive表中从DataFrame类中可以看到与hive表有关的写入API有一下几个:registerTempTable(tableName:String):Unit,inserInto(tableNa...

weixin_39734987的博客 1313
上一篇: hivesql面试题-两个List转多行并一一匹配(posexplode函数)
下一篇: 戴尔笔记本电脑耳机插入声音外放问题
programmer_trip
博客等级 码龄7年 3187粉丝 81原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值