1. hive表操作
1. 修改表字段的資料型別或者修改表字段名字
#如果表是外部表,需要先修改為內部表
alter table 資料庫名.表名set tblproperties('external' = 'false');
alter table 資料庫名.表名 change column 欄位名 新的欄位名(如果不變就保持原欄位) 字段型別(若不變就採用原來的字段) comment '新的字段備註';
alter table 資料庫名.表名set tblproperties('external' = 'true');
2. 新增表字段
#如果是外部表,需要先修改為內部表
alter table 資料庫名.表名 set tblproperties('external' = 'false');
-- 新增列
alter table 資料庫名.表名add columns(log_id string comment '資料來源請求唯一鍵');
alter table 資料庫名.表名set tblproperties('external' = 'true');
2. 遇到問題
部落格原因:hive 1.1.0中表的元資料和分割槽的元資料是分開管理的,也就是說分割槽的元資料在分割槽生成的時候就會儲存下來,依據是表的元資料。當我們進行修改欄位和新增欄位的時候,只是修改了表的元資料,而歷史的分割槽雲資料資訊並沒有改變。當我們查歷史分割槽
的資料的時候,因為表的元資料和分割槽的元資料不一致了,導致查出的資料為null. 和hdfs無關。
查表的元資料和分割槽的元資料:
desc 表名;
desc 表名 partition(dt='***xx')
解決方案:
a. 新增或修改字段,且需要重新跑資料。刪除分割槽的元資料,重新跑對應分割槽的資料
alter table 表名 drop partition (dt >= '20201001')
b. 只是修改字段,不需要重新跑資料, 在修改時直接指定分割槽
alter table 表名 partition(dt='20201208') change column type_of_charge type_of_charge string comment '計費方式';
c. hive版本是1.1.0之後的可以使用 cascade(級聯), 可以修改所有的元資料。
alter table 表名 add columns(log_id string comment '******') cascade;
alter table 表名 partition(dt='20201208') change column type_of_charge type_of_charge string comment '******' cascade;
MySQL新增字段,修改字段,刪除字段,修改表資訊
mysql的簡單語法,常用,卻不容易記住。當然,這些sql語法在各資料庫中基本通用。下面列出 一 查詢資訊 1.登入資料庫 mysql u root p 資料庫名稱 2.查詢所有資料表 show tables 3.查詢表的字段資訊 desc 表名稱 二 修改表資訊 1.修改表名 2.修改表注釋 三 ...
hive分割槽表新增字段出現新增欄位null的bug
對於hive分割槽表,我們使用alter語句新增欄位後 如alter table table name add columns age int 再重寫之前已經存在的分割槽,會出現使用查詢語句查出來的新增字段顯示null值。例如 表a 分割槽dt,已有分割槽dt a 由於需求新增了乙個字段,然後重新寫...
Mysql 新增字段 修改字段 刪除字段
alter table 表名 add 欄位名 字段型別 字段長度 default 預設值 comment 注釋 例如 alter table order add code char 6 default null comment 優惠碼 2 修改字段 修改欄位名 字段型別 長度 a 修改欄位名 alt...