1. 程式人生 > 實用技巧 >hive修改表DDL

hive修改表DDL

-- 修改表名
ALTER TABLE 表名 RENAME TO 新表名;

-- 修改表註釋,comment要小寫
ALTER TABLE 表名 SET TBLPROPERTIES('comment' = '表註釋內容');

-- 新增列和註釋
ALTER TABLE 表名 ADD COLUMNS (列1 sid STRING COMMENT '學生id',列2 STRING COMMENT '學生姓名');

-- 修改列名和註釋
ALTER TABLE 表名 CHANGE COLUMN 列名 新列名 string COMMENT '學生id';

-- 修改列名
ALTER TABLE
表名 CHANGE COLUMN 列名 新列名 string; -- 可以把該列放到指定列的後面,或者使用'FIRST'放到第一位 ALTER TABLE 表名 CHANGE COLUMN 列名 新列名 int(修改後列的屬性) COMMENT 'column_name' AFTER severity; -- 將表tablename中的列column_orign修改成column_new,同時指定修改後的列名稱的屬性,comment是這個列的註釋 --例1: ALTER TABLE emp CHANGE COLUMN age uage double COMMENT 'column age
' AFTER id; -- 查看錶的屬性 DESC FORMATTED tablename; -- 修改表的屬性 -- 將table_name表中的property_name屬性值修改成'new_value'; ALTER TABLE table_name SET TBLPROPERTIES('property_name'='new_value'); -- 將表table_name中的欄位分割符修改成'\t',注意,這是在表沒有分割槽的情況下 ALTER TABLE emp SET SERDEPROPERTIES("field.delim"="\t"); --例1: CREATE
TABLE emp(id INT,uname STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY '#' LINES TERMINATED BY '\n' STORED AS textfile; -- 這條語句將t8表中的欄位分隔符'#'修改成'\t'; ALTER TABLE emp SET SERDEPROPERTIES('field.delim'='\t'); --例2: CREATE TABLE emp(id INT,uname STRING) PARTITIONED BY(dt string) ROW FORAMT DELIMITED FIELDS TERMINATED BY '\n' STORED AS textfile; ALTER TABLE emp PARTITION(dt='20180108') SET SERDEPROPERTIES('field.delim=\t'); --例3 ALTER TABLE table_name[partition] set location 'path' --內部錶轉化成外部表 ALTER TABLE emp SET TBLPROPERTIES('EXTERNAL'='TRUE'); --外部錶轉化成內部表 ALTER TABLE emp SET TBLPROPERTIES('EXTERNAL'='FALSE'); -- 解析json字串get_json_object(param1,"$.param2") -- param1:需要解析的json欄位 -- param2:遇到陣列就用 [0,1,2...] 0,1,2是陣列對應的元素,遇到jsonObject直接用 "$.key"取出想要獲取的value。 SELECT get_json_object('{"name":"王二狗","sex":"男","age":"25"}','$.name') movie -- 側寫 SELECT name,course FROM student LATERAL VIEW EXPLODE(SPLIT(course,",")) course_tmp AS course ;

https://cwiki.apache.org/confluence/display/Hive/LanguageManual

-- 修改表名ALTER TABLE 表名 RENAME TO 新表名;
-- 修改表註釋,comment要小寫ALTER TABLE 表名 SET TBLPROPERTIES('comment' = '表註釋內容');
-- 新增列和註釋ALTER TABLE 表名 ADD COLUMNS (列1 sid STRING COMMENT '學生id',列2 STRING COMMENT '學生姓名');
-- 修改列名和註釋ALTER TABLE 表名 CHANGE COLUMN 列名 新列名 string COMMENT '學生id';
-- 修改列名ALTER TABLE 表名 CHANGE COLUMN 列名 新列名 string;
-- 可以把該列放到指定列的後面,或者使用'FIRST'放到第一位ALTER TABLE 表名 CHANGE COLUMN 列名 新列名 int(修改後列的屬性) COMMENT 'column_name' AFTER severity;-- 將表tablename中的列column_orign修改成column_new,同時指定修改後的列名稱的屬性,comment是這個列的註釋 --例1: ALTER TABLE emp CHANGE COLUMN age uage double COMMENT 'column age' AFTER id; -- 查看錶的屬性DESC FORMATTED tablename;
-- 修改表的屬性-- 將table_name表中的property_name屬性值修改成'new_value';ALTER TABLE table_name SET TBLPROPERTIES('property_name'='new_value');
-- 將表table_name中的欄位分割符修改成'\t',注意,這是在表沒有分割槽的情況下ALTER TABLE emp SET SERDEPROPERTIES("field.delim"="\t");--例1: CREATE TABLE emp(id INT,uname STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY '#' LINES TERMINATED BY '\n' STORED AS textfile;-- 這條語句將t8表中的欄位分隔符'#'修改成'\t'; ALTER TABLE emp SET SERDEPROPERTIES('field.delim'='\t');--例2: CREATE TABLE emp(id INT,uname STRING) PARTITIONED BY(dt string) ROW FORAMT DELIMITED FIELDS TERMINATED BY '\n' STORED AS textfile;ALTER TABLE emp PARTITION(dt='20180108') SET SERDEPROPERTIES('field.delim=\t');--例3ALTER TABLE table_name[partition] set location 'path'--內部錶轉化成外部表ALTER TABLE emp SET TBLPROPERTIES('EXTERNAL'='TRUE');--外部錶轉化成內部表ALTER TABLE emp SET TBLPROPERTIES('EXTERNAL'='FALSE');
-- 解析json字串get_json_object(param1,"$.param2")-- param1:需要解析的json欄位-- param2:遇到陣列就用 [0,1,2...] 0,1,2是陣列對應的元素,遇到jsonObject直接用 "$.key"取出想要獲取的value。SELECT get_json_object('{"name":"王二狗","sex":"男","age":"25"}','$.name') movie
-- 側寫SELECT name,courseFROM studentLATERAL VIEWEXPLODE(SPLIT(course,",")) course_tmp AS course ;