hive 添加字段_Hive列操作汇总(添加/更新/删除/虚拟列)

本文介绍了Hive中对表进行列操作的方法,包括添加、更新和删除列的语法和示例。ALTER TABLE命令用于添加新列、更改列属性和删除列,而REPLACE COLUMNS用于替换所有列。此外,还提到了Hive的虚拟列如INPUT__FILE__NAME和BLOCK__OFFSET__INSIDE__FILE,这些列提供了关于数据文件的信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

hive> ALTER TABLE events RENAME TO 3koobecaf;

hive> ALTER TABLE pokes ADD COLUMNS (new_col INT);

hive> ALTER TABLE invites ADD COLUMNS (new_col2 INT COMMENT 'a comment');

hive> ALTER TABLE invites REPLACE COLUMNS (foo INT, bar STRING, baz INT COMMENT 'baz replaces new_col2');

***注意:***REPLACE列 替换所有现有列,只更改表的模式,而不是数据。表必须使用本机SerDe。REPLACE列 还可以用于从表的模式中删除列.

版本信息

在Hive发行版0.12.0和更早的版本中,列名只能包含字母数字和下划线字符。

在Hive发行版0.13.0和更高版本中,默认的列名可以在漂号(`)(Tab键上面的那个符号)中指定,并包含任何Unicode字符(Hive -6013),但是,点(.)和冒号(:)在查询时会产生错误。在一个由反勾号分隔的字符串中,除双漂号(``)表示一个漂号字符外,所有字符都按字面意思处理。可以通过设置hive.support. quotes来使用0.13.0之前的行为。none的标识符,在这种情况下,回勾的名称被解释为常规名称.

添加字段

一次增加一个列(默认添加为最后一列)

ALTER TABLE table_name ADD COLUMNS (new_col INT);

可以一次增加多个列

ALTER TABLE table_name ADD COLUMNS (c1 INT,c2 STRING);

添加一列并增加列字段注释

ALTER TABLE table_name ADD COLUMNS (new_col INT COMMENT 'a comment');

改变列名/类型/位置/注释

ALTER TABLE table_name CHANGE

[CLOUMN] col_old_name col_new_name column_type

[CONMMENT col_conmment]

[FIRST|AFTER column_name]

[CASCADE|RESTRICT];

该命令将允许用户更改列的名称、数据类型、注释、位置或它们的任意组合,但必须先存在该字段才能修改名字及指定位置.

列更改命令只修改Hive的元数据,不修改数据。用户应该确保表/分区的实际数据布局符合元数据定义。

无论表或分区的保护模式如何,ALTER TABLE CHANGE COLUMN CASCADE子句都将覆盖表分区的列元数据。使用自由裁量权。

示例:

CREATE TABLE test_change (a int, b int, c int);

// 首先将列a的名称更改为a1:

ALTER TABLE test_change **CHANGE** a a1 INT;

//将列a1的名称更改为a2,将其数据类型更改为字符串,并将其放在列b之后:

ALTER TABLE test_change CHANGE a1 a2 STRING **AFTER** b;

注意:列位置更换后数据位置还是不动的,若想让数据跟着字段一起移动,需更新表数据,

使用insert overwrite table 从表中将移动之前对应的数据插入到移动之后对应的字段中

// 新表的结构是:

b int, a2 string, c int.

// 然后将c列的名称改为c1,并将其作为第一列:

ALTER TABLE test_change CHANGE c c1 INT **FIRST**;

// 此时新表的结构是:

c1 int, b int, a2 string.

添加/更新列

ALTER TABLE table_name

[PARTITION partition_spec] -- (Note: Hive 0.14.0 and later)

ADD|REPLACE COLUMNS (col_name data_type [COMMENT col_comment], ...)

[CASCADE|RESTRICT] -- (Note: Hive 1.1.0 and later)

添加列允许您在现有列的末尾,但在分区列之前添加新列。对于Avro支持的表、Hive 0.14和更高版本,也支持这种方法。

REPLACE列删除所有现有列并添加新的列集。这只能用于具有本机SerDe的表(DynamicSerDe、元数据类型pedcolumnsetserde、LazySimpleSerDe和ColumnarSerDe)。REPLACE列还可以用于删除列。

删除列示例:

原有Hive表test_change中有a,b,c,d,e这几个字段

将从test_change中删除“d”列:

ALTER TABLE test_change REPLACE COLUMNS (a int, b int,c string,e string);

将d和e两列一起删除:

ALTER TABLE test_change REPLACE COLUMNS (a int, b int,c string);

注意:如果列字段比较多,可以用show create table table_name; 显示建表语句,将字段一次性复制进来,删除哪些字段就直接去除即可.

Hive表中的虚拟(隐藏)列:

在hive中直接可以直接使用的列,无需创建

INPUT__FILE__NAME: maptask中的输入文件

BLOCK__OFFSET__INSIDE__FILE: 记录在文件中的偏移量

示例:

SELECT carid,

carbrand,

INPUT__FILE__NAME ,

BLOCK__OFFSET__INSIDE__FILE

from test.car_info

ORDER BY carid desc

limit 50;

该虚拟列可用于查找数据在hdfs文件系统对应的存储路径及偏移量

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值