看到这个标题,是不是眼睛一亮,心想hive也能用一行语法删除一个字段或者批量删除了?就像新增一个字段一样。(此时新增字段内心:加我容易,删我难~~)
alter table table_name[注:表名] add columns (column[注:字段名] string[注:字段类型] comment ‘XXXX’[注:字段注释]) cascade;
答案是:当然不能!!!
语法:
- --如果想删除最后一个字段column_2
- create table table_name (
- column_1 string,
- column_2 int);
-
- --删除column_2
- alter table table_name replace columns(
- column_1 string) cascade; --column_2不写,即删除column_2,保留column_1
特别注意:这个语法不是删除哪个字段写哪个字段,而是写表中所有字段除了被删除的那个。
(因为我一激动只写了要删的字段,最后表中就只保留了要被删的)
可能有人要问,这和重新键表有什么区别,我只能说,删表建表还是要比这种方式多写几行代码吖,而且有一定的风险。对我而言就是不想被发现,哈哈哈。。。。
补充一个小知识点:
问:为什么hive表在增删改的时候要加上cascade这个关键字呢?
答:CASCADE会刷历史分区字段。
说明:
- 因为hive表大部分是分区表,而加上cascade【注:中文翻译为“级联”】关键字,不仅会变更新分区的表结构(metadata),同时也会变更旧分区的表结构。
- 当使用级联删除表中信息时,如果A表中的字段引用了B表中的字段,删除B表中字段信息,相应的A表也会删除。(当父表的信息删除,子表的信息也自动删除)
对于分区表,在增删改时,一定要加上cascade,否则其历史分区的元数据(metadata)信息将无法正常更新,可能会出现访问历史分区时莫名的报错。
一个写技术博客的小小目标:
开心写作,愿所有的技术点都可以用大白话表达出来,从此没有难理解的技术