Hive表的基本操作
Hive系列文章
- Hive表的基本操作
- Hive中的集合數(shù)據(jù)類型
- Hive動(dòng)態(tài)分區(qū)詳解
- hive中orc格式表的數(shù)據(jù)導(dǎo)入
- Java通過(guò)jdbc連接hive
- 通過(guò)HiveServer2訪問(wèn)Hive
- SpringBoot連接Hive實(shí)現(xiàn)自助取數(shù)
- hive關(guān)聯(lián)hbase表
- Hive udf 使用方法
- Hive基于UDF進(jìn)行文本分詞
- Hive窗口函數(shù)row number的用法
- 數(shù)據(jù)倉(cāng)庫(kù)之拉鏈表
1. 創(chuàng)建表
create table
語(yǔ)句遵從sql
語(yǔ)法習(xí)慣,只不過(guò)Hive
的語(yǔ)法更靈活。例如,可以定義表的數(shù)據(jù)文件存儲(chǔ)位置,使用的存儲(chǔ)格式等。
沒(méi)有指定external
關(guān)鍵字,則為管理表
,跟mysql
一樣,if not exists
如果表存在則不做操作,否則則新建表。comment
可以為其做注釋,分區(qū)為age
年齡,列之間分隔符是\t
,存儲(chǔ)格式為列式存儲(chǔ)orc
,存儲(chǔ)位置為默認(rèn)位置,即參數(shù)hive.metastore.warehouse.dir
(默認(rèn):/user/hive/warehouse)指定的hdfs
目錄。
2. 拷貝表
使用like
可以拷貝一張跟原表結(jié)構(gòu)一樣的空表,里面是沒(méi)有數(shù)據(jù)的。
3. 查看表結(jié)構(gòu)
通過(guò)desc [可選參數(shù)] tableName
命令查看表結(jié)構(gòu),可以看出拷貝的表test.user1
與原表test.user1
的表結(jié)構(gòu)是一樣的。
也可以加formatted
,可以看到更加詳細(xì)和冗長(zhǎng)的輸出信息。
4. 刪除表
這跟sql
中刪除命令drop table
是一樣的:
對(duì)于管理表(內(nèi)部表),直接把表徹底刪除了;對(duì)于外部表,還需要?jiǎng)h除對(duì)應(yīng)的hdfs
文件才會(huì)徹底將這張表刪除掉,為了安全,通常hadoop
集群是開(kāi)啟回收站功能的,刪除外表表的數(shù)據(jù)就在回收站,后面如果想恢復(fù)也是可以恢復(fù)的,直接從回收站mv
到hive
對(duì)應(yīng)目錄即可。
5. 修改表
大多數(shù)表屬性可以通過(guò)alter table
來(lái)修改。
5.1 表重命名
5.2 增、修、刪分區(qū)
增加分區(qū)使用命令alter table table_name add partition(...) location hdfs_path
修改分區(qū)也是使用alter table ... set ...
命令
刪除分區(qū)命令格式是alter table tableName drop if exists partition(...)
5.3 修改列信息
可以對(duì)某個(gè)字段進(jìn)行重命名,并修改位置、類型或者注釋:
修改前:
修改列名time
為times
,并且使用after
把位置放到url
之后,本來(lái)是在之前的。
再來(lái)看表結(jié)構(gòu):
time -> times
,位置在url
之后。
5.4 增加列
hive
也是可以添加列的:
5.5 刪除列
刪除列不是指定列刪除,需要把原有所有列寫一遍,要?jiǎng)h除的列排除掉即可:
如果要?jiǎng)h除列salary
,只需要這樣寫:
這里會(huì)報(bào)錯(cuò):
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
寫法是可以刪除列的。通常情況下不會(huì)輕易去刪除列的,增加列倒是常見(jiàn)。
5.6 修改表的屬性
可以增加附加的表屬性,或者修改屬性,但是無(wú)法刪除屬性:
舉例:這里新建一張表:
這條語(yǔ)句將t8表中的字段分隔符'#'修改成'\t';
alter table t8 set serdepropertyes('field.delim'='\t');
作者:柯廣的網(wǎng)絡(luò)日志
微信公眾號(hào):Java大數(shù)據(jù)與數(shù)據(jù)倉(cāng)庫(kù)