Hive常用操作汇总
表操作
ALTER TABLE name RENAME TO new_name;
--例:将orders表修改为flt_orders
ALTER TBALE olap_engdb.orders RENAME TO olap_engdb.flt_orders;
数据存储位置发生改变,分区名未改变
列操作
修改列
ALTER TABLE name CHANGE col_old_name col_new_name column_type COMMENT 'comment' FIRST|AFTER column_name;
--例:将orders表中的citycode列修改为dcitycode
ALTER TABLE olap_engdb.orders CHANGE citycode dcitycode STRING COMMENT '出发城市三字码' FIRST;
First将列放在第一列,AFTER指定排在某列后面;
列位置更换后数据位置并未发生变化,若要让数据跟着字段一起移动,需更新表数据。
新增列
ALTER TABLE name ADD COLUMES (col_name data_type COMMENT 'comment',......);
--例:在orders表中新增acitycode列
ALTER TABLE olap_engdb.orders ADD COLUMNS (acitycode STRING COMMENT '到达城市三字码');
新增列位于当前列的末尾,分区列之前
替换列/删除列
ALTER TABLE name REPLACE COLUMNS (col_name data_type COMMENT '',...);
--例:删除orders表中其他列,仅保留orderdate字段
ALTER TABLE olap_engdb.orders REPLACE COLUMNS (orderdate string);
REPLACE COLUMNS先删除现存列,然后再增加新列;
注:替换列只能在表使用自带SerDE时使用( DynamicSerDe,MetadataTypedColumnsetSerDe... )
分区操作
新增分区
ALTER TABLE name ADD IF NOT EXISTS PARTITION (PARTITION_SPEC);
--例:在orders表中新增时间分区
ALTER TABLE olap_engdb.orders ADD PARTITION (d = '2019-10-28');
只有在存在分区列的表上执行增加分区的操作,才会成功
重命名分区
ALTER TABLE name PARTITION (PARTITION_SPEC) RENAME TO PARTITION (PARTITION_SPEC);
--例:orders表中2019-10-28的分区修改为2019-10-27的分区
ALTER TABLE olap_engdb.orders PARTITION (d = '2019-10-28') RENAME TO PARTITION (d = '2019-10-27');
删除分区
ALTER TABLE name DROP IF EXISTS PARTITION (PARTITION_SPEC);
--例:删除orders表中2019-10-27的分区
ALTER TABLE olap_engdb.orders DROP IF EXISTS PARTITION (d = '2019-10-27');
交换分区
ALTER TABLE name1 EXCHANGE PARTITION (PARTITION_SPEC) WITH TABLE name2;
--例:将orders表中2019-10-26分区的数据移到临时表
ALTER TABLE olap_engdb.orders EXCHANGE (d = '2019-10-26') WITH tmp_engdb.orders
网友评论