您好,登錄后才能下訂單哦!
小編給大家分享一下Hive表的基本操作有哪些,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
1. 創建表
create table語句遵從sql語法習慣,只不過Hive的語法更靈活。例如,可以定義表的數據文件存儲位置,使用的存儲格式等。
create table if not exists test.user1( name string comment 'name', salary float comment 'salary', address struct<country:string, city:string> comment 'home address' ) comment 'description of the table' partitioned by (age int) row format delimited fields terminated by '\t' stored as orc;
沒有指定external關鍵字,則為管理表,跟mysql一樣,if not exists如果表存在則不做操作,否則則新建表。comment可以為其做注釋,分區為age年齡,列之間分隔符是\t,存儲格式為列式存儲orc,存儲位置為默認位置,即參數hive.metastore.warehouse.dir(默認:/user/hive/warehouse)指定的hdfs目錄。
2. 拷貝表
使用like可以拷貝一張跟原表結構一樣的空表,里面是沒有數據的。
create table if not exists test.user2 like test.user1;
3. 查看表結構
通過desc [可選參數] tableName命令查看表結構,可以看出拷貝的表test.user1與原表test.user1的表結構是一樣的。
hive> desc test.user2; OK name string name salary float salary address struct<country:string,city:string> home address age int # Partition Information # col_name data_type comment age int
也可以加formatted,可以看到更加詳細和冗長的輸出信息。
hive> desc formatted test.user2; OK # col_name data_type comment name string name salary float salary address struct<country:string,city:string> home address # Partition Information # col_name data_type comment age int # Detailed Table Information Database: test Owner: hdfs CreateTime: Mon Dec 21 16:37:57 CST 2020 LastAccessTime: UNKNOWN Retention: 0 Location: hdfs://nameservice2/user/hive/warehouse/test.db/user2 Table Type: MANAGED_TABLE Table Parameters: COLUMN_STATS_ACCURATE {\"BASIC_STATS\":\"true\"} numFiles 0 numPartitions 0 numRows 0 rawDataSize 0 totalSize 0 transient_lastDdlTime 1608539877 # Storage Information SerDe Library: org.apache.hadoop.hive.ql.io.orc.OrcSerde InputFormat: org.apache.hadoop.hive.ql.io.orc.OrcInputFormat OutputFormat: org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat Compressed: No Num Buckets: -1 Bucket Columns: [] Sort Columns: [] Storage Desc Params: field.delim \t serialization.format \t
4. 刪除表
這跟sql中刪除命令drop table是一樣的:
drop table if exists table_name;
對于管理表(內部表),直接把表徹底刪除了;對于外部表,還需要刪除對應的hdfs文件才會徹底將這張表刪除掉,為了安全,通常hadoop集群是開啟回收站功能的,刪除外表表的數據就在回收站,后面如果想恢復也是可以恢復的,直接從回收站mv到hive對應目錄即可。
5. 修改表
大多數表屬性可以通過alter table來修改。
5.1 表重命名
alter table test.user1 rename to test.user3;
5.2 增、修、刪分區
增加分區使用命令alter table table_name add partition(...) location hdfs_path
alter table test.user2 add if not exists partition (age = 101) location '/user/hive/warehouse/test.db/user2/part-0000101' partition (age = 102) location '/user/hive/warehouse/test.db/user2/part-0000102'
修改分區也是使用alter table ... set ...命令
alter table test.user2 partition (age = 101) set location '/user/hive/warehouse/test.db/user2/part-0000110'
刪除分區命令格式是alter table tableName drop if exists partition(...)
alter table test.user2 drop if exists partition(age = 101)
5.3 修改列信息
可以對某個字段進行重命名,并修改位置、類型或者注釋:
修改前:
hive> desc user_log; OK userid string time string url string
修改列名time為times,并且使用after把位置放到url之后,本來是在之前的。
alter table test.user_log change column time times string comment 'salaries' after url;
再來看表結構:
hive> desc user_log; OK userid string url string times string salaries
time -> times,位置在url之后。
5.4 增加列
hive也是可以添加列的:
alter table test.user2 add columns ( birth date comment '生日', hobby string comment '愛好' );
5.5 刪除列
刪除列不是指定列刪除,需要把原有所有列寫一遍,要刪除的列排除掉即可:
hive> desc test.user3; OK name string name salary float salary address struct<country:string,city:string> home address age int # Partition Information # col_name data_type comment age int
如果要刪除列salary,只需要這樣寫:
alter table test.user3 replace columns( name string, address struct<country:string,city:string> );
這里會報錯:
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. Replacing columns cannot drop columns for table test.user3. SerDe may be incompatible
這張test.user3表是orc格式的,不支持刪除,如果是textfile格式,上面這種replace寫法是可以刪除列的。通常情況下不會輕易去刪除列的,增加列倒是常見。
5.6 修改表的屬性
可以增加附加的表屬性,或者修改屬性,但是無法刪除屬性:
alter table tableName set tblproperties( 'key' = 'value' );
舉例:這里新建一張表:
create table t8(time string,country string,province string,city string) row format delimited fields terminated by '#' lines terminated by '\n' stored as textfile;
這條語句將t8表中的字段分隔符'#'修改成'\t';
alter table t8 set serdepropertyes('field.delim'='\t');
以上是“Hive表的基本操作有哪些”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。