一、hive表相關操作
需要注意的是:column alter僅僅修改table的元數據(表結構),而不會修改數據。
1、修改表名
ALTER TABLE table_name RENAME TO new_table_name;
2、增加、修改列
1)增加列
ALTER TABLE name ADD COLUMNS (
column_name1 column_type [CONMMENT column_conmment],
column_name2 column_type [CONMMENT column_conmment],
column_name3 column_type [CONMMENT column_conmment],
......
);
2)修改列
ALTER TABLE name REPLACE COLUMNS (
column_name1 column_type [CONMMENT column_conmment],
column_name2 column_type [CONMMENT column_conmment],
column_name3 column_type [CONMMENT column_conmment],
......
);
ADD COLUMNS是在當前列的末尾,分區列之前添加新的列,REPLACE COLUMNS允許用戶更新列,更新的過程是先刪除當前的列,然後在加入新的列。注:只有在使用native的SerDE時纔可以這麼做。
3、改變列名/類型/位置/註釋
ALTER TABLE table_name
CHANGE [CLOUMN]
col_old_name col_new_name column_type
[CONMMENT col_conmment]
[FIRST|AFTER column_name];
這個命令可以修改表的列名,數據類型,列註釋和列所在的位置順序,FIRST將列放在第一列,AFTER col_name將列放在col_name後面一列
4、添加、刪除分區
1)添加分區
ALTER TABLE table_name
ADD [IF NOT EXISTS]
PARTITION partition_spec [LOCATION 'location1']
partition_spec [LOCATION 'location2'] ...
partition_spec:
(partition_col = partition_col_value, partition_col = partiton_col_value, ...)
2)刪除分區
ALTER TABLE table_name DROP [IF EXISTS] partition_spec, partition_spec,...
二、表數據相關操作
1、Hive複製分區表和數據
1)非分區表
複製表結構: create table new_table as select * from exists_table where 1=0;
複製表結構和數據: create table new_table as select * from exists_table;
2)分區表
創建一個分區表:
create table if not exists test_table_syt
(
id string COMMENT '學號',
name string COMMENT '姓名',
sex string COMMENT '性別'
)
COMMENT '拍賣離線10分鐘下鑽補齊10分鐘序列'
PARTITIONED BY ( dt string )
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'
WITH SERDEPROPERTIES( 'field.delim' = '\t', 'serialization.null.format' = '' )
STORED AS
INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat';
插入數據:
insert overwrite table test_table_syt partition(dt='2018-08-16')
values ('1','張三','男'),('2','李華','女') ;
複製表:
注意差異: as select 複製的是一個非分區表, like 複製的是一個分區表。
-- 用 like 複製一個新表
create table test_tab1 like test_table_syt;
-- 用 as select 複製一個新表
create table test_tab2 as select * from test_table_syt where dt='2018-08-16' limit 0;
3)複製數據
(1)創建新表: create table test_table like test_table_syt;
(2)將HDFS的數據文件複製一份到新表目錄;
hive cmd模式下:dfs -cp -f /user/hive/warehouse/test_table_syt/* /user/hive/warehouse/test_table/
(3)修復分區元數據信息;
hive cmd模式下: MSCK REPAIR TABLE test_table;
2、刪除分區數據
根據分區字段p_loctype刪除分區
ALTER TABLE my_partition_test_table DROP [IF EXISTS] PARTITION (dt='2018-10-10');