Hive表字段型別修改

2021-09-23 03:14:29 字數 1619 閱讀 5154

a 建立一張和原表一樣表結構的複製表

b 通過插入語句(insert overwrite),使用動態分割槽把資料匯入複製表

set hive.

exec

.dynamic.

partition

.mode

=nonstrict;

create

table table_copy like table_original;

insert overwrite table table_copy partition

(product_id,period_type,pt)

select city_id,city_name,site,product_id as product_id,period_type as period_type,pt as pt from table_original;

a 建立一張和原表一樣表結構的複製表

b 複製表table_original目錄下的hdfs檔案到表table_copy

c 使用分割槽表的msck命令重新生成分割槽

create

table table_copy like table_original;

dfs -cp hdfs://user/hive/warehouse/temp.db/table_original/* hdfs://user/hive/warehouse/temp.db/table_copy/;

msck repair table

temp

.table_copy;

該方法比使用動態分割槽速度更快,因為資料的複製是直接使用的hdfs檔案,而不是啟動mapreduce作業

在元資料平台中修改hive表字段型別,需先將下游依賴去掉,才可修改

修改欄位時選擇【不級聯】

級聯:舊資料存在無法讀取的風險,建議重刷舊資料,對新資料無影響

不級聯:新舊資料均能讀取,但存在新舊欄位不一致的風險

a 刪除需要修復的資料分割槽

b 使用動態分割槽,對複製表轉換修改字段型別,插入原表

alter

table table_original drop

partition

(pt>=

'20190331000000');

set hive.

exec

.dynamic.

partition

.mode

=nonstrict;

insert overwrite table table_original

partition

(product_id,period_type,pt)

select city_id,city_name,site,cast(location_id as string) location_id,product_id as product_id,period_type as period_type,pt as pt

from table_copy where pt between

'20190410000000'

and'20190425000000'

Hive 新增 更改表字段型別

新增字段表 alter table 表名 add columns 欄位名 資料型別 alter table table name add columns c time string comment 當前時間 正確,新增在最後 alter table table name change c time ...

Oracle應用之修改表字段型別

mysql對於有資料和沒資料的表字段型別都可以隨意修改,不過oracle就不一樣。假如表a有個字段a,本來為number型別,然後我們想修改為varchar2型別。1 欄位a沒資料的情況,改為varchar2 10 可以如下 alter table a modify a varchar2 10 2 ...

Oracle修改表字段以及表型別

win7 oracle pl sql 一張表 lyz emp 建立表lyz emp create table lyz emp e id number 10 not null e oldname varchar2 2 not null primary key e id 測試表lyz emp是否建立成功...