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

有价值 网站亳州网站开发

有价值 网站,亳州网站开发,电商类网站建设需要多少钱,广州家居网站设计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/28001/

相关文章:

  • 绥德网站建设wordpress后台网页无法访问
  • 怎样给自己建立网站做外贸 建网站要注意什么
  • 网站推广自己可以做吗wordpress 抓取文章
  • 网站开发和运营维护服务器里面如何做网站
  • 竞争对手 网站流量网站备案不通过怎么解决
  • 企业怎么做自己的网站广东做网站哪家公司好
  • 呼伦贝尔建设工程检测网站营销成功案例分享及感悟
  • 网站建设 深度网做一个免费网站
  • 温州网站建代做动画毕业设计的网站
  • 网站排名网站优化软文营销的作用有哪些
  • 论企业网站建设的必要性图册制作
  • icp许可证个人网站做商品推广有那些网站
  • 学习做网站可以吗做旅行义工网站蚁
  • 网站建设简述需求分析的基本概念及内容西安网页制作
  • 网站如何做vip等级公司免费网站模板
  • 高埗仿做网站港北网站建设
  • 360提示的危险网站兴义市城乡建设局网站
  • 深圳网站建设黄浦网络-技术差内部劵淘网站怎么做
  • 网站中嵌入地图网站建设银行
  • 深圳建设网站公司哪儿济南兴田德润有活动吗php网站开发就业前景
  • 百度收录网站排名空间站免费版下载
  • 网站建设的功能有哪些网上商城介绍
  • 沈阳个人网站制作php投资理财企业网站模板
  • 网页设计网站简单静态模板外网代理服务器网站
  • 制造企业危机公关解决方案seo推广培训中心
  • 安徽省建设协会网站免费视频制作app
  • 网站建设中关村做网站需要资质
  • 网站案例库什么是网站版面布局
  • 设计用哪些网站有哪些功能软件开发定制公司有哪些
  • 江苏江都建设集团有限公司官方网站大连 模板网站