hive修改表名、修改列名、修改分区

打印 上一主题 下一主题

主题 835|帖子 835|积分 2505

官网地址:https://cwiki.apache.org/confluence/display/Hive/GettingStarted#GettingStarted-AlteringandDroppingTables
一、修改表

1、重命名表名
  1. ALTER TABLE table_name RENAME TO new_table_name
  2. 示例: 将user表重命名为user_bak
  3. alter table user rename to user_bak;
复制代码
2、修改表TBLPROPERTIES属性:
  1. ALTER TABLE table_name SET TBLPROPERTIES (property_name = property_value, property_name = property_value,... )
  2. 示例:
  3. ALTER TABLE user SET TBLPROPERTIES ('tablename'= 'user表' )
复制代码
阐明:


  • SET TBLPROPERTIES中的属性若不存在则会新增进去;若已存在则会更改原先的值。如上述示例中的tablename属性,若不存在则新增此属性。
3、修改表解释
  1. ALTER TABLE table_name SET TBLPROPERTIES('comment' = new_comment);
复制代码
固然看着是修改TBLPROPERTIES的属性,但是comment这个属性是表中的comment解释。
  1. 示例:将表注释'测试表'修改为'测试数据'
  2. create table test(
  3.         id string default null comment '编号'
  4. )comment '测试表'
  5. stored as hyperdrive;
  6. ALTER TABLE test SET TBLPROPERTIES('comment' = '测试数据');
复制代码
4、复制表结构
  1. -- 创建一个相同表结构的表
  2. create table new_table like table_name;
  3. 示例:创建user_bak使表结构与user表一致
  4. create table user_bak like user;
复制代码
5、拷贝表
  1. -- 创建一个相同表结构的表,并把原先的数据复制到新表
  2. CREATE TABLE new_table AS SELECT * FROM old_table
  3. 示例:
  4. create table user_bak as select * from user;
复制代码
6、删除表
  1. drop table if exists table_name;
复制代码
二、修改列

1、添加列
  1. 一次增加一个列(默认添加为最后一列)
  2. ALTER TABLE table_name ADD COLUMNS (new_col INT);
  3. 可以一次增加多个列
  4. ALTER TABLE table_name ADD COLUMNS (c1 INT,c2 STRING);
  5. 添加一列并增加列字段注释
  6. ALTER TABLE table_name ADD COLUMNS (new_col INT COMMENT 'a comment');
复制代码
留意:hive中添加列只会添加在末了,不支持插入到指定的位置。
2、修改列
修改列名、列类型、列位置
  1. ALTER TABLE table_name CHANGE [COLUMN]
  2.   col_old_name col_new_name column_type
  3.     [COMMENT col_comment]
  4.     [FIRST|AFTER column_name]
  5. --- 示例:修改列名
  6. CREATE TABLE test_change (a int, b int, c int);
  7. ALTER TABLE test_change CHANGE a a1 INT; --将 a 列的名字改为 a1.
  8. --将 a 列的名字改为 a1,a 列的数据类型改为 string,并将它放置在列 b 之后。新的表结构为: b int, a1 string, c int.
  9. ALTER TABLE test_change CHANGE a a1 STRING AFTER b;
  10. --将 b 列的名字修改为 b1, 并将它放在第一列。新表的结构为: b1 int, a string, c int.
  11. ALTER TABLE test_change CHANGE b b1 INT FIRST;
复制代码
该命令将允许用户更改列的名称、数据类型、解释、位置或它们的恣意组合,但必须先存在该字段才气修改名字及指定位置.
列更改命令只修改Hive的元数据,不修改数据。用户应该确保表/分区的实际数据布局符合元数据界说。
3、删除列
  1. 原有Hive表test_change中有a,b,c,d,e这几个字段
  2. 将从test_change中删除“d”列:
  3. ALTER TABLE test_change REPLACE COLUMNS (a int, b int,c string,e string);
  4. 将d和e两列一起删除:
  5. ALTER TABLE test_change REPLACE COLUMNS (a int, b int,c string);
复制代码
留意:如果列字段比力多,可以用show create table table_name; 表现建表语句,将字段一次性复制进来,删除哪些字段就直接去除即可.
三、修改分区

1、增长分区
  1. --增加分区 语法
  2. ALTER TABLE table_name ADD
  3.   partition_spec [ LOCATION 'location1' ]
  4.   partition_spec [ LOCATION 'location2' ] ...
  5. partition_spec:
  6.   : PARTITION (partition_col = partition_col_value,
  7.         partition_col = partiton_col_value, ...)
  8. --Add Partitions 语法案例:用户可以用 ALTER TABLE ADD PARTITION 来向一个表中增加分区。当分区名是字符串时加引号。
  9. ALTER TABLE page_view ADD
  10.     PARTITION (dt='2008-08-08', country='us')
  11.       location '/path/to/us/part080808'
  12.     PARTITION (dt='2008-08-09', country='us')
  13.       location '/path/to/us/part080809';
复制代码
2、修改分区
3、删除分区
  1. ---DROP PARTITION 删除分区
  2. ALTER TABLE table_name DROP
  3.     partition_spec, partition_spec,...
  4. 删除某分区数据
  5. -- 删除dt = '2021-03-23'分区数据
  6. SET mapred.output.compress = true;
  7. SET hive.exec.compress.output = true;
  8. SET mapred.job.priority = VERY_HIGH;
  9. USE app;
  10. ALTER TABLE table.table_name DROP partition(dt = '2021-03-23') ;
复制代码
4、拷贝分区表
  1. -- 拷贝同一结构
  2. CREATE
  3.         TABLE app.table_new LIKE app.table_old;
  4.        
  5. -- 拷贝分区表中的数据
  6. set hive.exec.dynamic.partition=true;
  7. set hive.exec.dynamic.partition.mode=nonstrict;
  8. insert overwrite table app.table_new
  9. partition(dt, dt2)
  10. select * from app.table_old;
复制代码
5、查察分区结构
  1. show partitions app.table_new
复制代码


创作不易,欢迎打赏,你的鼓励将是我创作的最大动力。



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

杀鸡焉用牛刀

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表