資源描述:
《hive語法和常用函數(shù).doc》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫。
1、實用文檔Hive是一個基于Hadoop分布式系統(tǒng)上的數(shù)據(jù)倉庫,最早是由Facebook公司開發(fā)的,Hive極大的推進(jìn)了Hadoopecosystem在數(shù)據(jù)倉庫方面上的發(fā)展。????????Facebook的分析人員中很多工程師比較擅長而SQL而不善于開發(fā)MapReduce程序,為此開發(fā)出Hive,并對比較熟悉SQL的工程師提供了一套新的SQL-like方言——HiveQL。????????HiveSQL方言特別和MySQL方言很像,并提供了HiveQL的編程接口。HiveQL語句最終被Hive解析器引擎解析為MarReduce程序,作為job提交給JobTracker
2、運行。這對MapReduce框架是一個很有力的支持。????????Hive是一個數(shù)據(jù)倉庫,它提供了數(shù)據(jù)倉庫的部分功能:數(shù)據(jù)ETL(抽取、轉(zhuǎn)換、加載)工具,數(shù)據(jù)存儲管理,大數(shù)據(jù)集的查詢和分析能力。????????由于Hive是Hadoop上的數(shù)據(jù)倉庫,因此Hive也具有高延遲、批處理的的特性,即使處理很小的數(shù)據(jù)也會有比較高的延遲。故此,Hive的性能就和居于傳統(tǒng)數(shù)據(jù)庫的數(shù)據(jù)倉庫的性能不能比較了。????????Hive不提供數(shù)據(jù)排序和查詢的cache功能,不提供索引功能,不提供在線事物,也不提供實時的查詢功能,更不提供實時的記錄更性的功能,但是,Hive能很好地處理在
3、不變的超大數(shù)據(jù)集上的批量的分析處理功能。Hive是基于hadoop平臺的,故有很好的擴展性(可以自適應(yīng)機器和數(shù)據(jù)量的動態(tài)變化),高延展性(自定義函數(shù)),良好的容錯性,低約束的數(shù)據(jù)輸入格式。????????下面我們來看一下Hive的架構(gòu)和執(zhí)行流程以及編譯流程:?實用文檔實用文檔???????用戶提交的HiveQL語句最終被編譯為MapReduce程序作為Job提交給Hadoop執(zhí)行。??Hive的數(shù)據(jù)類型????????Hive的基本數(shù)據(jù)類型有:TINYINT,SAMLLINT,INT,BIGINT,BOOLEAN,F(xiàn)LOAT,DOUBLE,STRING,TIMESTA
4、MP(V0.8.0+)和BINARY(V0.8.0+)。????????Hive的集合類型有:STRUCT,MAP和ARRAY。????????????????Hive主要有四種數(shù)據(jù)模型(即表):(內(nèi)部)表、外部表、分區(qū)表和桶表。????????表的元數(shù)據(jù)保存?zhèn)鹘y(tǒng)的數(shù)據(jù)庫的表中,當(dāng)前hive只支持Derby和MySQL數(shù)據(jù)庫。?????????內(nèi)部表:????????Hive中的表和傳統(tǒng)數(shù)據(jù)庫中的表在概念上是類似的,Hive的每個表都有自己的存儲目錄,除了外部表外,所有的表數(shù)據(jù)都存放在配置在hive-site.xml文件的${hive.metastore.wareho
5、use.dir}/table_name目錄下。????????Java代碼??1.CREATE?TABLE?IF?NOT?EXISTS?students(user_no?INT,name?STRING,sex?STRING,??2.?????????grade?STRING?COMMOT?'班級')COMMONT?'學(xué)生表'??3.ROW?FORMAT?DELIMITED??實用文檔1.FIELDS?TERMINATED?BY?','??2.STORE?AS?TEXTFILE;????????????????????外部表:????????外部表指向已經(jīng)存在在Hado
6、opHDFS上的數(shù)據(jù),除了在刪除外部表時只刪除元數(shù)據(jù)而不會刪除表數(shù)據(jù)外,其他和內(nèi)部表很像。????????Java代碼??1.CREATE?EXTERNAL?TABLE?IF?NOT?EXISTS?students(user_no?INT,name?STRING,sex?STRING,??2.?????????class?STRING?COMMOT?'班級')COMMONT?'學(xué)生表'??3.ROW?FORMAT?DELIMITED??4.FIELDS?TERMINATED?BY?','??5.STORE?AS?SEQUENCEFILE??6.LOCATION?'/u
7、sr/test/data/students.txt';??????????????????????分區(qū)表:????????分區(qū)表的每一個分區(qū)都對應(yīng)數(shù)據(jù)庫中相應(yīng)分區(qū)列的一個索引,但是其組織方式和傳統(tǒng)的關(guān)系型數(shù)據(jù)庫不同。在Hive中,分區(qū)表的每一個分區(qū)都對應(yīng)表下的一個目錄,所有的分區(qū)的數(shù)據(jù)都存儲在對應(yīng)的目錄中。????????比如說,分區(qū)表partitinTable有包含nation(國家)、ds(日期)和city(城市)3個分區(qū),其中nation=china,ds=20130506,city=Shanghai則對應(yīng)HDFS上的目錄為:?????????