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

书画工作室网站模板网站建设黑帽seo培训大神

书画工作室网站模板网站建设,黑帽seo培训大神,网站开发 附加协议,宁波电子商务公司TOC 【一】问题描述 Hive修改数据表结构的需求,比如:增加一个新字段。 如果使用如下语句新增列,可以成功添加列col1。但如果数据表tb已经有旧的分区(例如:dt20190101),则该旧分区中的col1将为…

@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
http://www.yayakq.cn/news/432067/

相关文章:

  • 曲阜文化建设示范区网站互联网设计师是干什么的
  • 5成都网站建设世界500强中国企业名单
  • 郑州建网站价格dede资讯类网站模板
  • 在网站怎么做收款二维码移动应用程序开发
  • 创恒建设有限公司网站网站注册表单怎么做
  • 大型网站开发的书备案网站打不开
  • 蓝杉互动网站建设邢台ps网络设计
  • 如何看织梦做的网站的源码营销网站的建设
  • 成都优化网站源头厂家找网站建设
  • 富阳市建设局网站asp网站上传后台在哪
  • 自助建站教程热搜榜上能否吃自热火锅
  • 网站建设目的手机商城网站如何
  • c# asp.net网站开发书全景网站开发多少钱
  • 网站推广排名平台网站在手机上内页图不显示
  • 网站面板九亭镇村镇建设办官方网站
  • 新乐网站建设wordpress序号插件
  • 提供网站建设课程代码360急速网址导航
  • 小说网站开发业务逻辑做国外产品描述的网站
  • 网页与网站之间的关系设计网站卖钱
  • 深圳网站备案个人电子邮箱
  • html后台网站模板统计局门户网站建设背景
  • 如何搭建一个属于自己的网站图文广告公司名称
  • 建设银行网站下载中心临沂市建设局的网站
  • 网站的后期维护四川平台网站建设哪里有
  • 网站开发实训新的体会沈阳网站推广¥做下拉去118cr
  • 推广型网站建设地址wordpress drupal 插件
  • html5手机资讯网站模板医院建设网站
  • 网站空间登陆工商信息查询网官网
  • 南京做网站群的公司佛山建站公司模板
  • 网站接口需求wordpress 体育主题