創(chuàng)建表的三種方式
第一種創(chuàng)建方式:普通方式(最常用)
創(chuàng)建格式
# 指定標的類型和表的名稱
CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name
# 指定每列的名稱和類型
[(col_name data_type [COMMENT col_comment], ...)]
# 對表的說明
[COMMENT table_comment]
# 指定分區(qū)表的列名稱,列類型
[PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)]
# 指定每列的分隔符、數(shù)據(jù)類型的類型
[
[ROW FORMAT row_format]
[STORED AS file_format]
| STORED BY 'storage.handler.class.name' [WITH SERDEPROPERTIES (...)]
]
# 指定數(shù)據(jù)文件存儲在HDFS的什么位置
[LOCATION hdfs_path]
# 表的屬性設(shè)置
[TBLPROPERTIES (property_name=property_value, ...)]
# 子查詢
示例(創(chuàng)建員工表和部門表)



加載數(shù)據(jù)
格式:load data [local] inpath 'filepath' [overwrite] into table table_name [partition(partcol=val1,partcol2=val2...)]
參數(shù)解釋:local表示是否從本地文件系統(tǒng)尋找文件,默認的是從hdfs上尋找文件;overwrite表示是否覆蓋表中已有的數(shù)據(jù)。
hive (test_db)> load data local inpath '/opt/datas/emp.txt' overwrite into table emp;
hive (test_db)> load data local inpath '/opt/datas/dept.txt' overwrite into table dept;


第二種創(chuàng)健方式:把子查詢的結(jié)果作為一張新表。適用于需要保存查詢的中間結(jié)果。
創(chuàng)建格式
與第一種格式相同,需要注意 子查詢要放在最后。
示例

第三種創(chuàng)建方式:復制另外一個表的結(jié)構(gòu)。
創(chuàng)建格式
create table tablename1 like tablename2;創(chuàng)建表1而且和表2 的表結(jié)構(gòu)和屬性完全一樣,但是不復制表2中的數(shù)據(jù),所以表1的數(shù)據(jù)為空。
示例


Hive兩種表類型
如果在創(chuàng)建表時不指定external關(guān)鍵字,則默認的是創(chuàng)建管理表(內(nèi)部表),內(nèi)部表對應(yīng)的目錄必須存儲在hive的數(shù)據(jù)倉庫中。

還有一種表是指定external關(guān)鍵字的表,即外部表,外部表的數(shù)據(jù)文件可以自己指定目錄(不在局限于hive數(shù)據(jù)倉庫中),指定對的目錄下面的數(shù)據(jù)文件及為這個表的數(shù)據(jù)文件。
如何創(chuàng)建外部表。location指定的是hdfs上的目錄,該目錄表示的是這個外部表目錄,這個目錄下的文件即為這個表的數(shù)據(jù)文件。

內(nèi)部表和外部表的區(qū)別
執(zhí)行刪除表命令操作時,對于內(nèi)部表,會刪除元數(shù)據(jù)和存儲的數(shù)據(jù),而對于外部表只會刪除元數(shù)據(jù)庫里的元數(shù)據(jù)信息,而不會刪除存儲的數(shù)據(jù)。這樣可以防止多個部門同時使用一個表時,一個部門刪除數(shù)據(jù)文件導致其他部門不能使用的情況。方便共享數(shù)據(jù)。
內(nèi)部表默認存儲在數(shù)據(jù)倉庫中,而外部表一般通過location自己指定目錄,便于存放在倉庫外。
Hive分區(qū)表
為什么有分區(qū)表?
如果把一年或者一個月的日志文件存放在一個表下,那么數(shù)據(jù)量會非常的大,當查詢這個表中某一天的日志文件的時候,查詢速度還非常的慢,這時候可以采用分區(qū)表的方式,把這個表根據(jù)時間點再劃分為小表。這樣劃分后,查詢某一個時間點的日志文件就會快很多,因為這是不需要進行全表掃描。
hive中的分區(qū)表
hive中的分區(qū)是根據(jù)“分區(qū)列”的值對表的數(shù)據(jù)進行粗略的劃分,hive中一個表對應(yīng)一個目錄,再根據(jù)分區(qū)列在這個表目錄下創(chuàng)建子目錄,每個子目錄名就是分區(qū)列的名字。分區(qū)列定義與表中字段相似,但是與表中的字段無關(guān),是獨立的列。這樣就加快了數(shù)據(jù)查詢的速度,因為不會對這個表中進行全盤掃描了。
示例
創(chuàng)建分區(qū)表

向分區(qū)表加載數(shù)據(jù)


查看分區(qū)表


查詢分區(qū)表中數(shù)據(jù)

作者:心_的方向
鏈接:http://www.itdecent.cn/p/265456b606dc
來源:簡書
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。