更新時(shí)間:2023-07-21 來源:黑馬程序員 瀏覽量:
隨著系統(tǒng)運(yùn)行時(shí)間的增加,表的數(shù)據(jù)量會(huì)越來越大,而Hive查詢數(shù)據(jù)通常是使用全表掃描,這會(huì)導(dǎo)致對(duì)大量不必要數(shù)據(jù)的掃描,從而降低查詢效率。為了解決這一問題,Hive引進(jìn)了分區(qū)技術(shù),分區(qū)主要是將表的整體數(shù)據(jù)根據(jù)業(yè)務(wù)需求,劃分成多個(gè)子目錄進(jìn)行存儲(chǔ),每個(gè)子目錄對(duì)應(yīng)一個(gè)分區(qū)。通過掃描分區(qū)表中指定分區(qū)的數(shù)據(jù),避免Hive全表掃描,從而提升Hive查詢數(shù)據(jù)的效率。本節(jié)針對(duì)Hive的分區(qū)表進(jìn)行詳細(xì)講解。
添加分區(qū)是在分區(qū)表中根據(jù)分區(qū)字段添加實(shí)際分區(qū),語法格式如下。
ALTER TABLE table_name ADD [IF NOT EXISTS] PARTITION (partition_column ? partition_col_value, partition_column ? partition_col_value, ...) [LOCATION 'location']...;上述語法的具體講解如下。
·ALTERTABLE:表示修改數(shù)據(jù)表結(jié)構(gòu)信息的語句。
·ADD[IFNOT EXISTS]PARTITION:用于添加分區(qū),其中IF NOT EXISTS為可選,用于判斷添加的分區(qū)是否存在。
·partition_column:用于指定分區(qū)字段。
·prtition_col_value:用于指定分區(qū)字段的值,即實(shí)際分區(qū)。
·LOCATION'location':可選.用于指定分區(qū)在HDFS上的存儲(chǔ)位置。
接下來,在虛擬機(jī)Node_03中使用Hive客戶端工具Beeline,遠(yuǎn)程連接虛擬機(jī)Node_02的HiveServer2服務(wù)操作Hive,向數(shù)據(jù)庫(kù)hive_database的分區(qū)表partitioned_table添加分區(qū),具體命令如下。
ALTER TABLE hive_database.partitioned_table ADD PARTITION (province= 'HeBei', city= 'HanDan') location '/user/hive_local/varehouse/hive_database.db/HeBei' PARTITION (province='ShanDong', city= 'JiNan') location '/user/hive_local/varehouse/hive_database.db/ShanDong';
上述命令在數(shù)據(jù)庫(kù)hive_database的分區(qū)表partitioned_table中添加了兩個(gè)二級(jí)分區(qū),分別是province=HeBei/city=HanDan和province=ShanDong/city=JiNan。
上述命令執(zhí)行完成后,在Hive客戶端工具Beeline中執(zhí)行“SHOW PARTITIONS
hive_database.partitioned_table:”命令.查看數(shù)據(jù)庫(kù)hive_database中分區(qū)表partitioned_table的分區(qū)信息,如圖所示。
從圖可以看出,分區(qū)表partitioned_table中成功添加了兩個(gè)二級(jí)分區(qū),分別是province=HeBei/city=HanDan和province=ShanDong/city=JiNan。
重命名分區(qū)是根據(jù)分區(qū)表的分區(qū)字段修改分區(qū)表的實(shí)際分區(qū),重命名分區(qū)的語法格式如下。
ALTER TABLE table_name PARTITION (partition_column = partition_col_value, partition_column= partition_col_value,) _ RENAME TO PARTITION (partitfon_colutn = pArtition_col_value, partition_column ? partition_col_value, ..);
接下來,在虛擬機(jī)Node_03中使用Hive客戶端工具Beeline,遠(yuǎn)程連接虛擬機(jī)Node_02的HiveServer2服務(wù)操作Hive.重命名數(shù)據(jù)庫(kù)hive_database中分區(qū)表partitioned_table的分區(qū),具體命令如下。
ALTER TABLE hive_database.partitioned_table PARTITION (province='HeBei', city='HanDan') REMAME TO PARTITION (Province= 'HuBei', city='WuHan');
上述命令將分區(qū)表partitioned_table的二級(jí)分區(qū)province=HeBei/city=HanDan重命名為province=HuBei/city=WuHan。
上述命令執(zhí)行完成后,在Hive客戶端工具Beeline中執(zhí)行“SHOW PARTITIONS hive_database.partitioned_table;"命令,查看數(shù)據(jù)庫(kù)hive_database中分區(qū)表partitioned_table的分區(qū)信息,如圖所示。
從圖中可以看出,分區(qū)表partitioned_table的二級(jí)分區(qū) province=HeBei/city=HanDan 成功重命名為province=HuBei/city=WuHan。