中國醫(yī)藥集團有限公司百度小程序seo
一 概述與特點
之所以把Hive放在Hadoop生態(tài)里面去寫,是因為它本身依賴Hadoop。Hive是基于Hadoop的一個數(shù)據(jù)倉庫工具,可以將結(jié)構(gòu)化的數(shù)據(jù)文件映射為一張數(shù)據(jù)庫表,并提供類 SQL 查詢功能。 其本質(zhì)是將 SQL 轉(zhuǎn)換為 MapReduce/Spark 的任務(wù)進行運算,底層由 HDFS 來提供數(shù)據(jù)的存儲,說白了 hive 可以理解為一個將 SQL 轉(zhuǎn)換為 MapReduce/Spark 的任務(wù)的工具。
二 架構(gòu)
Hive架構(gòu)如下圖所示:
1.用戶接口(Thrift用來RPC的服務(wù)器):hive自帶shell命令、ODBC、JDBC和web頁面訪問
2.Hive Sql(解析、編譯、優(yōu)化、執(zhí)行):語法與sql類似內(nèi)部原理也基本一致,不過最后執(zhí)行物理計劃的是MapReduce
3.元數(shù)據(jù)庫:通常是存儲在關(guān)系數(shù)據(jù)庫如 mysql/derby 中。Hive 將元數(shù)據(jù)存儲在數(shù)據(jù)庫中。Hive 中的元數(shù)據(jù)包括表的名字,表的列和分區(qū)及其屬性,表的屬性(是否為外部表等),表的數(shù)據(jù)所在目錄等。
4.執(zhí)行引擎:MR、TEZ、Spark
三 原理
1.表類型:
1):分區(qū)表:分區(qū)表的意思就是將一張表中的數(shù)據(jù)放在不同的存儲目錄中進行存放,這樣可以有效對數(shù)據(jù)進行解藕,使使用者更快速的訪問分區(qū)中的內(nèi)容,舉個例子:一張訂單表有幾千萬的訂單數(shù)據(jù),而我只想訪問其中某一天或者某幾天的數(shù)據(jù),如果使用訂單日期作為分區(qū),每天一個分區(qū),那么我可以直接:
#創(chuàng)建分區(qū)表
create table order(id string, price int) partitioned by (order_date date);
#加載數(shù)據(jù)到分區(qū)
load data local inpath '/export/servers/hivedatas/order.csv' into table order partition (order_date='2023-08-30');
#查詢分區(qū)數(shù)據(jù)
select * from order where order_date = '2023-08-30'
這樣會直接命中分區(qū)數(shù)據(jù)使數(shù)據(jù)響應(yīng)速度大大提升。