4.Hive表更新字段信息,一次讲明白

Hive表更新字段信息

  • 一、更新表字段语句
    • 1、修改字段名称
    • 2、修改字段类型
    • 3、修改字段备注
  • 二、总结

一、更新表字段语句

ALTER TABLE table_name [PARTITION partition_spec] CHANGE [COLUMN] col_old_name col_new_name column_type
  [COMMENT col_comment] [FIRST|AFTER column_name] [CASCADE|RESTRICT];

修改Hive表字段的语句如上所示,从中可以看出该语句可以修改表或者分区的字段信息,修改内容包括字段的名称、数据类型、注释信息以及在表中的位置。工作中修改字段的名称、数据类型和注释信息比较常见,而修改字段在表中的顺序基本不会使用。因此,这里只演示字段的名称、数据类型和注释信息修改。
修改字段的语句只是更新元数据信息,而实际数据没有任何变化。
注意最后的可选参数[CASCADE|RESTRICT],默认是RESTRICT,表示修改语句只作用在表上,历史分区的字段信息不会同步更新(新分区的的字段信息和修改后表的字段信息保持一致,历史分区的字段据信息和修改前的表字段信息保持一致)。使用CASCADE会级联修改所有历史分区的字段信息。

1、修改字段名称

在修改字段名这一小节,演示了修改字段名时,加不加CASCADE的区别,修改字段类型和字段备注是同样的道理。在修改字段类型和字段备注时仅以不加CASCADE做演示。

  1. 创建数据库
CREATE DATABASE IF NOT EXISTS bi;

创建一个数据库
2.创建分区表

CREATE EXTERNAL TABLE IF NOT EXISTS bi.students
(
     name      STRING COMMENT '姓名'
) COMMENT '学生姓名'
PARTITIONED BY (pt VARCHAR(8) COMMENT '天分区')
;

创建一个分区表,方便演示CASCADE和RESTRICT的区别
3. 插入数据

INSERT OVERWRITE TABLE bi.students
PARTITION (pt = '20240123')
VALUES
('jack')
;

INSERT OVERWRITE TABLE bi.students
PARTITION (pt = '20240124')
VALUES
('rose')
;
  1. 查询数据
SELECT
     pt
    ,name
FROM bi.students
ORDER BY pt
;

表分区和数据

  1. 查看表结构
DESC bi.students;

表字段名
6. 查看pt = '20240123’分区字段名,可以看出此时表字段名和分区字段名是一致的。

DESC bi.students PARTITION(pt = '20240123');

分区字段名

  1. 修改字段名称(不加CASCADE)并查看表字段名和分区字段名,注意修改字段名称时需要指定字段类型
ALTER TABLE bi.students CHANGE COLUMN name user_name STRING;
DESC bi.students;

表的字段名已修改

DESC bi.students PARTITION(pt = '20240123');

历史分区的的字段名未修改
从上面的查询结果可以看出,不加CASCADE,历史分区字段名不会修改。
8. 往新分区插入数据,并查询新分区字段名

INSERT OVERWRITE TABLE bi.students
PARTITION (pt = '20240125')
VALUES
('mary')
;
DESC bi.students PARTITION(pt = '20240125');

新插入的分区和修改后的表字段名一致
从上面的结果可以看出,新建的分区字段名和修改后的字段名一致。
9. 这里再做一个试验,更新一次历史分区的数据,看历史分区的字段名是否改变

INSERT OVERWRITE TABLE bi.students
PARTITION (pt = '20240123')
VALUES
('jack')
;
DESC bi.students PARTITION(pt = '20240123');

重新插入数据,不会更新历史分区的字段名

从上的执行结果可以看出,重新插入数据,也不会更新历史分区的字段名。
10. 字段名修改回去,并查询表结构

ALTER TABLE bi.students CHANGE COLUMN user_name name STRING;
DESC bi.students;

将表字段名称修改回去

  1. 修改字段名称时加CASCADE,并查询表及历史分区字段名
ALTER TABLE bi.students CHANGE COLUMN name user_name STRING CASCADE;
DESC bi.students;

表字段名被修改

DESC bi.students PARTITION(pt = '20240123');

历史分区字段名也被修改
从上面的执行结果可以看出,修改字段名称时,加上CASCADE,可以修改表字段名和历史分区字段名。
12. 添加新分区,并查看字段名

INSERT OVERWRITE TABLE bi.students
PARTITION (pt = '20240126')
VALUES
('dacy')
;
DESC bi.students PARTITION(pt = '20240126');

新分区字段名和执行修改后的表名保持一致
从上面的查询结果可以看出,新分区的字段名和修改后的字段名一致。

2、修改字段类型

仍以上一小节的表为例。

  1. 查看表结构
DESC bi.students;

字段类型为STRING
2. 修改字段类型,并查看

ALTER TABLE bi.students CHANGE COLUMN user_name user_name VARCHAR(30);
DESC bi.students;

字段类型已修改

3、修改字段备注

  1. 查看表结构
DESC bi.students;

查看字段备注

  1. 修改字段备注,并查看
ALTER TABLE bi.students CHANGE COLUMN user_name user_name VARCHAR(30) COMMENT '用户姓名';
DESC bi.students;

字段备注已修改

二、总结

工作中修改Hive表字段信息是比较常见的操作,修改语句也比较简单,需要注意是否需要更新历史分区的字段信息。
如果需要修改历史分区的字段信息,可以在修改语句的最后加上CASCADE;还一种解决方法,删除历史分区,重新插入数据。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

深度学习(5)--Keras实战

目录 一.Keras基础概念 二.如何跑通Keras项目 2.1.在cmd上跑通 2.2.在PyCharm上跑通 一.Keras基础概念 Keras是深度学习中的一个神经网络框架,是一个高级神经网络API,用Python编写,可以在TensorFlow,CNTK或Theano之上运行。 …

SpringCloud Alibaba Sentinel 与 SpringCloud Gateway 的限流有什么差别?(三种限流算法原理分析)

目录 一、Sentinel 与 Gateway 的限流有什么差别? 1.1、前置知识 - 四种常见的限流算法 1.1.1、Tips 1.1.2、计数器算法 1)固定窗口计数器算法 2)滑动窗口计数器算法 1.1.3、令牌桶算法 1.1.4、漏桶算法 1.2、解决问题 一、Sentinel…

如何通过 Nginx 反向代理提高网站安全性和性能?

如何通过 Nginx 反向代理提高网站安全性和性能? 引言Nginx 反向代理的基本原理什么是反向代理?反向代理的工作方式反向代理的好处 配置 Nginx 反向代理的基本步骤1. 安装 Nginx2. 编辑 Nginx 配置文件3. 设置反向代理配置4. 测试并重启 Nginx 提高安全性…

NineData支持制定安全、可靠的SQL开发规范

在和数据库打交道中,不管是数据库管理员(DBA)还是开发人员,经常会做一些CURD操作。因为每个人对数据库的了解程度不一样,所以在项目上线时,往往还需要专职人员对数据库的CURD操作进行审核,确保C…

第21课 在Android Native开发中架起java与c++互通的桥梁

在开始本节课,我尝试把项目拷贝到另一台电脑上以便继续工作,但出现了大量的“could not be resolved”问题,尝试包含新的include路径也无法解决该问题,最后删除了项目的Native Support,然后重新添加Native Support才解…

1.19号网络

超时检测 概念 1> 在网络通信中,有很多函数是阻塞函数,会导致进程的阻塞,例如:accept、recv、recvfrom、等等 2> 为了避免进程在阻塞函数处,无休止的等待,我们可以设置一个超时时间,当…

unity学习笔记----游戏练习05

一、阳光的收集和搜集动画开发 1.收集阳光的思路:当鼠标点击到阳光的时候,就可以进行收集了。可以通过为添加一个碰撞器来检测Circle Collider 2D 编写脚本: 在SunManager中写一个增加阳光的方法 //增加阳光 public void AddSubSun(in…

如何利用streamlit 將 gemini pro vision 進行圖片內容介紹

如何利用streamlit 將 gemini pro vision 進行圖片內容介紹 1.安裝pip install google-generativeai 2.至 gemini pro 取 api key 3.撰寫如下文章:(方法一) import json import requests import base64 import streamlit as st 讀取圖片檔案,並轉換成 Base64 編…

51-15 视频理解串讲—TimeSformer论文精读

今天读的论文题目是Is Space-Time Attention All You Need for Video Understanding? Facebook AI提出了一种称为TimeSformer视频理解的新架构,这个架构完全基于transformer,不使用卷积层。它通过分别对视频的时间和空间维度应用自注意力机制&#xff…

SpringBoot 3.1.7 集成Kafka 3.5.0

一、背景 写这边篇文章的目的,是记录我在集成kafka客户端遇到的一些问题,文章会记录整个接入的过程,其中会遇到几个坑,如果需要最终版本,直接看最后一节就行了,感觉Spring-Kafka的文档太少了,如…

linux更新内核

内核介绍 官网链接:https://kernel.org 内核下载库: https://mirrors.edge.kernel.org/pub/linux/kernel/ 更新软件源 rootcary:~# apt-get update rootcary:~# sudo apt-get install libncurses5-dev build-essential kernel-package flex bison libelf-dev libssl-dev 下…

大数据学习之Redis、从零基础到入门(一)

目录 一、Redis入门概述 1. 是什么? 官方解释: 2. 能干嘛? 2.1 主流功能与应用 2.1.1分布式缓存 2.1.2内存存储和持久化(RDBAOF) 2.1.3高可用架构搭建 2.1.4缓存穿透、击穿、雪崩 2.1.5分布式锁 2.1.6队列 2.2 总体功能概括 2.3…

基于Java SSM框架实现在线考试系统项目【项目源码+论文说明】

基于java的SSM框架实现在线考试系统演示 摘要 21世纪的今天,随着社会的不断发展与进步,人们对于信息科学化的认识,已由低层次向高层次发展,由原来的感性认识向理性认识提高,管理工作的重要性已逐渐被人们所认识&#…

面试知识点:notify是随机唤醒线程吗(唤醒线程顺序)?

做 Java 开发的小伙伴,对 wait 方法和 notify 方法应该都比较熟悉,这两个方法在线程通讯中使用的频率非常高,但对于 notify 方法的唤醒顺序,有很多小伙伴的理解都是错误的,有很多人会认为 notify 是随机唤醒的&#xf…

Vue实现图片预览,侧边栏懒加载,不用任何插件,简单好用

实现样式 需求 实现PDF上传预览,并且不能下载 第一次实现:用vue-pdf,将上传的文件用base64传给前端展示 问题: 水印第一次加载有后面又没有了。当上传大的pdf文件后,前端获取和渲染又长又慢,甚至不能用 修…

2. figure 常见属性

2. figure 常见属性 一 figsize二 dpi三 facecolor四 edgecolor五 frameon 数据可视化是数据分析中不可或缺的一环,而Matplotlib作为Python中最流行的绘图库之一,扮演着重要的角色。在Matplotlib中,matplotlib.figure.Figure对象是构建图形的…

MyBatis详解(2)-- mybatis配置文件

MyBatis详解&#xff08;2&#xff09; mybatis配置文件 mybatis配置文件 1.构建SqlSessionFactory的依据。 2.MyBatis最为核心的内容&#xff0c;对MyBatis的使用影响很大。 3.配置文件的层次顺序不能颠倒&#xff0c;一旦颠倒会出现异常。 < c o n f i g u r a t i o n…

openresty 安装, nginx与 openresty

openresty VS nginx Nginx 是一款高性能的 Web 服务器和反向代理服务器&#xff0c;具备基础的功能如HTTP服务、负载均衡、反向代理以及动静分离等。它是许多互联网应用的核心组件&#xff0c;因其模块化和可扩展的设计而受到欢迎。1 OpenResty 是基于 Nginx 的 Web 平台&…

C++入门篇章1(C++是如何解决C语言不能解决的问题的)

目录 1.C关键字(以C98为例)2.命名空间2.1 命名空间定义2.2命名空间使用 3.C输入&输出4.缺省参数4.1缺省参数概念4.2 缺省参数分类 5. 函数重载5.1函数重载概念5.2 C支持函数重载的原理--名字修饰(name Mangling) 1.C关键字(以C98为例) C总计63个关键字&#xff0c;C语言32…

【操作系统基础】【CPU访存原理】:寄存 缓存 内存 外存、内存空间分区、虚拟地址转换、虚拟地址的映射

存储器怎么存储数据、内存空间分区、虚拟地址转换 计算机的存储器&#xff1a;寄存 缓存 内存 外存&#xff08;按功能划分&#xff09; 计算机的处理器需要一个存储器来存储大量的指令和数据以便自己不断取指执行和访问数据。 内存&#xff08;内存就是运行内存&#xff0c…