版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
第9章
Hive數(shù)據(jù)倉儲大數(shù)據(jù)理論與應用基礎9.1
Hive簡介9.2
Hive的安裝與配置9.3
Hive數(shù)據(jù)操作9.4Hive實驗9.5本章小結(jié)本章目錄大數(shù)據(jù)理論與應用基礎9.1Hive簡介大數(shù)據(jù)理論與應用基礎9.1Hive簡介Hive是一個基于ApacheHadoop的數(shù)據(jù)倉庫基礎設施。能夠進行數(shù)據(jù)匯總、臨時查詢和分析大量數(shù)據(jù)。Hive提供了HiveSQL。Hive最初由Facebook開發(fā),后來Apache軟件基金會開始使用它。大數(shù)據(jù)理論與應用基礎Hive的體系結(jié)構(gòu)主要有用戶界面(UserInterfaces)單元、元數(shù)據(jù)存儲(MetaStore)單元、HQL處理引擎(HQLProcessEngine)單元、HQL執(zhí)行引擎(HQLExecutionEngine)單元、MapReduce和HDFS或HBase數(shù)據(jù)存儲單元。大數(shù)據(jù)理論與應用基礎9.1.1Hive的體系結(jié)構(gòu)大數(shù)據(jù)理論與應用基礎9.1.2Hive的工作流程大數(shù)據(jù)理論與應用基礎9.2Hive的安裝與配置步驟1:驗證Java安裝是否成功步驟2:驗證Hadoop安裝是否成功步驟3:下載Hive步驟4:安裝Hive步驟5:配置Hive單元大數(shù)據(jù)理論與應用基礎9.2Hive的安裝與配置步驟1:配置Hive的MetaStore單元步驟2:驗證Hive是否安裝成功安裝配置9.3Hive數(shù)據(jù)操作大數(shù)據(jù)理論與應用基礎9.3Hive數(shù)據(jù)操作9.3.1Hive的數(shù)據(jù)類型9.3.2DDL操作9.3.3DML操作9.3.4HiveSQL操作大數(shù)據(jù)理論與應用基礎9.3.1Hive的數(shù)據(jù)類型1.數(shù)值類型TINYINT:1B,有符號整型,取值范圍為128~127。SMALLINT:2B,有符號整型,取值范圍為32768~32767。INT/INTEGER:4B,有符號整型,取值范圍為2147483648~2147483647。BIGINT:8B,有符號整型,取值范圍為9223372036854775808~9223372036854775807。FLOAT:浮點型,4B,單精度浮點數(shù)。DOUBLE:8B,雙精度浮點數(shù)。DOUBLEPRECISION:DOUBLE的別名,僅從Hive2.2.0版本開始可用。大數(shù)據(jù)理論與應用基礎2.日期時間類型時間戳(TIMESTAMP):支持傳統(tǒng)的UNIX時間戳,可達到納秒級的精度,這里的納秒級的精度是可選的。具體用法:java.sql.Timestamp,格式為“YYYY-MM-DDHH:MM:SS.fffffffff”和“YYYY-MM-DDHH:MM:ss.ffffffffff”。日期(DATE):以{{YYYY-MM-DD}}的格式表示年、月、日。大數(shù)據(jù)理論與應用基礎9.3.1Hive的數(shù)據(jù)類型3.字符串類型字符串類型的數(shù)據(jù)可以使用單引號或雙引號來指定。它包含兩個數(shù)據(jù)類型:VARCHAR和CHAR。Hive遵循C類型(C語言中使用的轉(zhuǎn)義字符集)的轉(zhuǎn)義字符。表9-1所示為各種字符串類型。大數(shù)據(jù)理論與應用基礎9.3.1Hive的數(shù)據(jù)類型數(shù)據(jù)類型長度(字符的個數(shù))VARCHAR1~65355CHAR255表9-1各種字符串類型大數(shù)據(jù)理論與應用基礎9.3.1Hive的數(shù)據(jù)類型4.復雜類型Hive的復雜數(shù)據(jù)類型包含以下4種。(1)數(shù)組。Hive數(shù)組與在Java中的使用方法相同,語法結(jié)構(gòu)如下:Syntax:ARRAY<data_type>(2)映射。映射在Hive中類似Java的映射,語法結(jié)構(gòu)如下:Syntax:MAP<primitive_type,data_type>大數(shù)據(jù)理論與應用基礎9.3.1Hive的數(shù)據(jù)類型(3)結(jié)構(gòu)體。Hive結(jié)構(gòu)體類似使用復雜的數(shù)據(jù),語法結(jié)構(gòu)如下:Syntax:STRUCT<col_name:data_type[COMMENTcol_comment],...>(4)聯(lián)合類型。聯(lián)合類型是異類的數(shù)據(jù)類型的集合??梢允褂寐?lián)合類型創(chuàng)建一個實例,語法和示例如下:UNIONTYPE<int,double,array<string>,struct<a:int,b:string>>{0:1}{1:2.0}{2:["three","four"]}{3:{"a":5,"b":"five"}}{2:["six","seven"]}{3:{"a":8,"b":"eight"}}{0:9}{1:10.0}9.3.2DDL操作(DataDefinitionLanguage,數(shù)據(jù)定義語言)Hive可以定義數(shù)據(jù)庫和表來分析結(jié)構(gòu)化數(shù)據(jù)。通常,Hive的結(jié)構(gòu)化數(shù)據(jù)分析是以表方式存儲數(shù)據(jù),并通過查詢來分析數(shù)據(jù)的。用戶可以使用HiveDDL來創(chuàng)建表和刪除表。大數(shù)據(jù)理論與應用基礎9.3.2DDL操作1.數(shù)據(jù)庫的基本操作2.分區(qū)表3.分桶表4.創(chuàng)建Hive表5.瀏覽表6.修改和刪除表格大數(shù)據(jù)理論與應用基礎1.數(shù)據(jù)庫的基本操作大數(shù)據(jù)理論與應用基礎9.3.2DDL操作(1)創(chuàng)建數(shù)據(jù)庫。Hive數(shù)據(jù)庫是一個命名空間或表的集合。創(chuàng)建Hive數(shù)據(jù)庫的語法聲明如下:CREATEDATABASE|SCHEMA[IFNOTEXISTS]<databasename>;上述語句的具體含義如下。CREATEDATABASE|SCHEMA:創(chuàng)建數(shù)據(jù)庫或模式的語句,DATABASE和SCHEMA的含義相同,可以切換使用。[IFNOTEXISTS]:加方括號表示IFNOTEXISTS為可選項,即方括號里的內(nèi)容可寫也可不寫。IFNOTEXISTS用于判斷創(chuàng)建的數(shù)據(jù)庫是否已經(jīng)存在,若不存在,則創(chuàng)建數(shù)據(jù)庫;反之則不創(chuàng)建。<databasename>:占位符,用于代替實際的數(shù)據(jù)庫或模式名稱。尖括號“<>”是一種常用的表示占位符的標記,用于表示用戶需要提供一個值的位置。1.數(shù)據(jù)庫的基本操作大數(shù)據(jù)理論與應用基礎9.3.2DDL操作(2)查詢數(shù)據(jù)庫。在Hive中查詢數(shù)據(jù)庫的語法格式如下:SHOW(DATABASE|SCHEMAS)[LIKEidentifierwithwildcards'];上述語法的具體講解如下。SHOW(DATABASES|SCHEMAS):查詢數(shù)據(jù)庫的語句,同上,DATABASES和SCHEMAS的含義相同,可以切換使用。[LIKEidentifier_with_wildcards]:可選項,LIKE子句用于模糊查詢,identifier_with_wildcards用于指定查詢條件。1.數(shù)據(jù)庫的基本操作大數(shù)據(jù)理論與應用基礎9.3.2DDL操作(3)刪除數(shù)據(jù)庫:DROPDATABASEStatementDROP(DATABASE|SCHEMA)[IFEXISTS]database_name[RESTRICT|CASCADE];應用上述指令可以寫出下面的例子:hive>CREATEDATABASEIFNOTEXISTShive_database;hive>DROPDATABASEIFEXISTShive_database;大數(shù)據(jù)理論與應用基礎2.分區(qū)表9.3.2DDL操作隨著系統(tǒng)運行時間的增加,表的數(shù)據(jù)量會越來越大,而Hive查詢數(shù)據(jù)通常是全表掃描,這會導致對大量不必要數(shù)據(jù)的掃描,從而降低查詢效率。為了解決這一問題,Hive引進了分區(qū)技術。分區(qū)主要是指將表的整體數(shù)據(jù)根據(jù)業(yè)務需求劃分成多個子目錄進行存儲,每個子目錄對應一個分區(qū)。通過掃描分區(qū)表中指定分區(qū)的數(shù)據(jù)來避免全表掃描,從而提升Hive的查詢效率。大數(shù)據(jù)理論與應用基礎2.分區(qū)表9.3.2DDL操作(1)創(chuàng)建分區(qū)表。在數(shù)據(jù)庫hive_database中創(chuàng)建分區(qū)表partitioned_table:hive>CREATETABLEIFNOTEXISTShive_database.partitioned_table(usernameSTRINGCOMMENT"Thisisusername",ageINTCOMMENT"Thisisuserage")PARTITIONEDBY(provinceSTRINGCOMMENT"Userliveinprovince",citySTRINGCOMMENT"Userliveincity")ROWFORMATDELIMITEDFIELDSTERMINATEDBY','LINESTERMINATEDBY'\n'STOREDAStextfileTBLPROPERTIES("comment"="Thisisapartitionedtable");大數(shù)據(jù)理論與應用基礎2.分區(qū)表9.3.2DDL操作(2)刪除分區(qū)表的分區(qū)。刪除數(shù)據(jù)庫hive_database中分區(qū)表partitioned_table的分區(qū):hive>ALTERTABLEhive_database.partitioned_tableDROPIFEXISTSPARTITION(province='HuBei',city='WuHan')[PURGE];hive>SHOWPARTITIONShive_database.partitioned_table;大數(shù)據(jù)理論與應用基礎3.分桶表9.3.2DDL操作Hive的分區(qū)技術可以將整體數(shù)據(jù)劃分成多個分區(qū),從而優(yōu)化查詢,但是并非所有的數(shù)據(jù)都可以被合理分區(qū),會出現(xiàn)每個分區(qū)數(shù)據(jù)大小不一致的問題,即有的分區(qū)數(shù)據(jù)量很大,有的分區(qū)數(shù)據(jù)量很小,這就是常說的數(shù)據(jù)傾斜。為了解決分區(qū)可能帶來的數(shù)據(jù)傾斜問題,Hive提供了分桶技術。Hive中的分桶是指指定分桶表的某列,讓該列數(shù)據(jù)按照哈希取模的方式均勻地分發(fā)到各個桶文件中。大數(shù)據(jù)理論與應用基礎3.分桶表9.3.2DDL操作(1)在數(shù)據(jù)庫hive_database中創(chuàng)建分桶表clustered_table:hive>CREATETABLEIFNOTEXISTShive_database.clustered_table(idSTRING,nameSTRING,genderSTRING,ageINT,deptSTRING)CLUSTEREDBY(dept)SORTEDBY(ageDESC)INTO3BUCKETSROWFORMATDELIMITEDFIELDSTERMINATEDBY','LINESTERMINATEDBY'\n'STOREDAStextfileTBLPROPERTIES("comment"="Thisisaclusteredtable");大數(shù)據(jù)理論與應用基礎3.分桶表9.3.2DDL操作(2)查看分桶表。查看數(shù)據(jù)庫hive_database中分桶表clustered_table的信息:hive>DESCFORMATTEDhive_database.clustered_table;在上述語句中,DESC表示查詢指定數(shù)據(jù)表的基本結(jié)構(gòu)信息;FORMATTED可選,表示查詢指定數(shù)據(jù)表的詳細結(jié)構(gòu)信息。大數(shù)據(jù)理論與應用基礎4.創(chuàng)建Hive表9.3.2DDL操作下面以創(chuàng)建student、pokes和pokes1三個表為例進行講解。創(chuàng)建Hive表的語句如下:hive>CREATETABLEstudent(nameSTRING,teacherSTRING,regionSTRING,ageINT);hive>CREATETABLEpokes(ageINT,nameSTRING,dsSTRING);hive>CREATETABLEpokes1(ageINT,nameSTRING,dsSTRING);上述第一條命令的作用為創(chuàng)建一個名為student的表,表中有4列,分別是name、teacher、region和age,各自對應的數(shù)據(jù)類型分別是STRING、STRING、STRING和INT;第二條命令的作用為創(chuàng)建一個名為pokes的表,表中有3列,分別是age、name和ds,各自對應的數(shù)據(jù)類型分別是INT、STRING和STRING;第三條命令的作用與第二條命令的作用一樣,區(qū)別只是表名改成了pokes1。大數(shù)據(jù)理論與應用基礎4.創(chuàng)建Hive表9.3.2DDL操作下面再建立一個teacher表:hive>CREATETABLEteacher(fooINT,barSTRING)PARTITIONEDBY(dsSTRING);上述命令的作用為創(chuàng)建一個名為teacher的表,表中有2列(foo和bar)和一個名為ds的分區(qū)列。分區(qū)列是一個虛擬列,它不是數(shù)據(jù)本身的一部分,而是從特定數(shù)據(jù)集被加載的分區(qū)中派生出來的。大數(shù)據(jù)理論與應用基礎5.瀏覽表9.3.2DDL操作如果想瀏覽已建表有哪些,則可以用如下命令:hive>SHOWTABLES;如果要查看所有以's'結(jié)尾的表格,則可以用如下命令:hive>SHOWTABLES'.*s';模式匹配須遵循Java正則表達式的格式要求。例如:hive>DESCRIBE|DESC[FORMATTED]invites;上述指令的作用為顯示出所有的列清單。其中,DESCRIBE|DESC表示查詢指定表的基本結(jié)構(gòu)信息;[FORMATTED]為可選項,即用戶指定的模式匹配;invites為要查詢的表名稱。6.修改和刪除表格大數(shù)據(jù)理論與應用基礎9.3.2DDL操作這條語句可以把一個表的名稱改為一個新的不同的名稱。其中,ALTERTABLE表示修改數(shù)據(jù)表結(jié)構(gòu)信息,RENAMETO用于數(shù)據(jù)表的重命名操作,table_name指定需要重命名的數(shù)據(jù)表名稱,new_table_name指定重命名后的數(shù)據(jù)表名稱。修改表名的命令如下:ALTERTABLEtable_nameRENAMETOnew_table_name;6.修改和刪除表格大數(shù)據(jù)理論與應用基礎9.3.2DDL操作在上述命令中,ADD|REPLACECOLUMNS用于向數(shù)據(jù)表中增加或替換列;col_name指定要添加或替換的列名;COMMENTcol_comment指定需要添加或替換列的描述;[CASCADE|RESTRICT]為可選項,確認數(shù)據(jù)庫中存在表時是否可以刪除數(shù)據(jù)庫,默認值為RESTRICT,表示如果數(shù)據(jù)庫中存在表,則無法刪除數(shù)據(jù)庫,若使用CASCADE,則表示即使數(shù)據(jù)庫中存在表,仍然會刪除數(shù)據(jù)庫并刪除數(shù)據(jù)庫中的表,因此需要謹慎使用CASCADE。增加或替換列數(shù)據(jù)的命令如下:ALTERTABLEtable_name
ADD|REPLACECOLUMNS(col_namedata_type[COMMENTcol_comment],...)
[CASCADE|RESTRICT]
--(Note:Hive
1.1.0
andlater)6.修改和刪除表格大數(shù)據(jù)理論與應用基礎9.3.2DDL操作對于上述例子,需要注意的是,REPLACECOLUMNS替換了所有現(xiàn)有的列,只改變了表的模式,而不是數(shù)據(jù)。REPLACECOLUMNS也可以用來從表的模式中刪除列:應用上述命令可以寫出下面的例子:hive>ALTERTABLEstudentRENAMETO3koobecaf;hive>ALTERTABLE3koobecafRENAMETOstudent;hive>ALTERTABLEteacherADDCOLUMNS(teachernameSTRING);hive>ALTERTABLEteacherADDCOLUMNS(new_col2INTCOMMENT'acomment');hive>ALTERTABLEteacherREPLACECOLUMNS(fooINT,barSTRING);刪除表的命令如下:hive>DROPTABLEpokes;該命令表示刪除表pokes。大數(shù)據(jù)理論與應用基礎9.3.3DML操作(DataManipulationLanguage,數(shù)據(jù)操作語言)DML主要對Hive表中的數(shù)據(jù)進行操作(增、刪、改),但是由于Hadoop的特性,它對單條數(shù)據(jù)的修改、刪除的性能會非常低下,因此不支持進行單條數(shù)據(jù)級別的操作。DML操作常用的語句關鍵字有LOAD、SELECT、INSERT、UPDATE、DELETE等。大數(shù)據(jù)理論與應用基礎9.3.3DML操作用戶可以使用LOADDATA語句插入大量數(shù)據(jù),同時將數(shù)據(jù)插入Hive,最好是使用LOADDATA來存儲大量記錄。1.將數(shù)據(jù)從文件加載到表中的LOADDATA語句語法如下:LOADDATA[LOCAL]INPATH'filepath'[OVERWRITE]INTOTABLEtablename[PARTITION(partcol1=val1,partcol2=val2...)]
LOADDATA[LOCAL]INPATH'filepath'[OVERWRITE]INTOTABLEtablename[PARTITION(partcol1=val1,partcol2=val2...)][INPUTFORMAT'inputformat'SERDE'serde'](3.0orlater)大數(shù)據(jù)理論與應用基礎9.3.3DML操作例如,將下列數(shù)據(jù)插入表中(/home/user目錄中有一個名為sample.txt的文件):1.將數(shù)據(jù)從文件加載到表中的LOADDATA語句1201Gopal 45000Technicalmanager1202Manisha 45000Proofreader1203Masthanvali 40000Technicalwriter1204Kiran 40000HrAdmin1205Kranthi 30000OpAdmin下面的查詢加載給定文本插入表中:hive>LOADDATALOCALINPATH'/home/user/sample.txt'>OVERWRITEINTOTABLEemployee;大數(shù)據(jù)理論與應用基礎9.3.3DML操作1.將數(shù)據(jù)從文件加載到表中的LOADDATA語句LOADDATA成功完成后能看到以下響應:OKTimetaken:15.905secondshive>大數(shù)據(jù)理論與應用基礎9.3.3DML操作查詢結(jié)果可以通過使用插入件子句插入Hive表中。標準語法:2.將數(shù)據(jù)從查詢插入Hive表中INSERTOVERWRITETABLEtablename1[PARTITION(partcol1=val1,partcol2=val2...)[IFNOTEXISTS]]select_statement1FROMfrom_statement;INSERTINTOTABLEtablename1[PARTITION(partcol1=val1,partcol2=val2...)]select_statement1FROMfrom_statement;大數(shù)據(jù)理論與應用基礎9.3.3DML操作Hive擴展(多表插入模式):2.將數(shù)據(jù)從查詢插入Hive表中FROMfrom_statementINSERTOVERWRITETABLEtablename1[PARTITION(partcol1=val1,partcol2=val2...)[IFNOTEXISTS]]select_statement1[INSERTOVERWRITETABLEtablename2[PARTITION...[IFNOTEXISTS]]select_statement2][INSERTINTOTABLEtablename2[PARTITION...]select_statement2]...;
FROMfrom_statementINSERTINTOTABLEtablename1[PARTITION(partcol1=val1,partcol2=val2...)]select_statement1[INSERTINTOTABLEtablename2[PARTITION...]select_statement2][INSERTOVERWRITETABLEtablename2[PARTITION...[IFNOTEXISTS]]select_statement2]...;大數(shù)據(jù)理論與應用基礎9.3.3DML操作Hive擴展(動態(tài)分區(qū)插入模式):2.將數(shù)據(jù)從查詢插入Hive表中INSERTOVERWRITETABLEtablenamePARTITION(partcol1[=val1],partcol2[=val2]...)select_statementFROMfrom_statement;INSERTINTOTABLEtablenamePARTITION(partcol1[=val1],partcol2[=val2]...)select_statementFROMfrom_statement;大數(shù)據(jù)理論與應用基礎9.3.4HiveSQL操作HiveSQL是Hive提供的一種SQL操作語言。HiveSQL操作過程嚴格遵守HadoopMapReduce的作業(yè)模型執(zhí)行,Hive將用戶的HQL語句通過解釋器轉(zhuǎn)換為MapReduce作業(yè)提交到Hadoop集群上,Hadoop監(jiān)控作業(yè)執(zhí)行過程,并返回作業(yè)執(zhí)行結(jié)果給用戶。大數(shù)據(jù)理論與應用基礎9.3.4HiveSQL操作HQL提供了基本的SQL操作。這些操作在表或分區(qū)中進行。這些操作包括以下幾項。
使用WHERE子句從表中篩選行的能力。使用SELECT子句從表中選擇特定列的能力。能夠在兩個表之間進行聯(lián)接操作。能夠評估多個“分組依據(jù)”列上存儲在表中的數(shù)據(jù)的聚合。能夠?qū)⒉樵兘Y(jié)果存儲到另一個表中。能夠?qū)⒈淼膬?nèi)容下載到本地(如nfs)目錄中。能夠在hadoopdfs目錄中存儲查詢結(jié)果。能夠管理(創(chuàng)建、刪除和更改)表和分區(qū)。HiveSQL在查詢數(shù)據(jù)時,Hive會將查詢命令自動轉(zhuǎn)化為MapReduce作業(yè)并在Hadoop集群上執(zhí)行。這意味著開發(fā)人員無須直接編寫復雜的MapReduce代碼,而是可以使用SQL類似的語法來完成查詢?nèi)蝿?。大?shù)據(jù)理論與應用基礎9.3.4HiveSQL操作1.SELECT語句SELECT語句可以對Hive表中的數(shù)據(jù)進行篩選查詢,其語法如下:[WITHCommonTableExpression(,CommonTableExpression)*]
SELECT[ALL|DISTINCT]select_expr,select_expr,...
FROMtable_reference
[WHEREwhere_condition]
[GROUPBYcol_list]
[ORDERBYcol_list]
[CLUSTERBYcol_list
|[DISTRIBUTEBYcol_list][SORTBYcol_list]
]
[LIMIT[offset,]rows]大數(shù)據(jù)理論與應用基礎9.3.4HiveSQL操作2.WHERE子句WHERE子句是一個布爾表達式。例如,下面的查詢只返回那些來自美國地區(qū)且金額大于10的銷售記錄(Hive在WHERE子句中支持一些運算符和UDF):SELECT*FROMstudentWHEREage>
10
ANDregion=
"US"大數(shù)據(jù)理論與應用基礎9.3.4HiveSQL操作3.ALL與DISTINCT子句ALL與DISTINCT子句指定是否應該返回重復的記錄。如果沒有給出這些選項,那么默認是ALL(返回所有匹配的記錄)。DISTINCT指定從結(jié)果中刪除重復的記錄。:hive>SELECTname,ageFROMstudent
1
3
1
3
1
4
2
5hive>SELECTDISTINCTname,ageFROMstudent
1
3
1
4
2
5hive>SELECTDISTINCTnameFROMt1
1
2大數(shù)據(jù)理論與應用基礎9.3.4HiveSQL操作4.基于分區(qū)的查詢一般來說,一個SELECT查詢會掃描整個表。如果是使用PARTITIONEDBY子句創(chuàng)建的表,那么查詢可以進行分區(qū)裁剪,只掃描與查詢所指定的分區(qū)相關的表的一小部分。目前,如果在JOIN的WHERE子句或ON子句中指定了分區(qū)謂詞,那么Hive會進行分區(qū)裁剪。例如,如果表page_views在列date上進行了分區(qū),那么下面的查詢將只檢索2008-03-01和2008-03-31之間的記錄:hive>SELECTpage_views.*FROMpage_viewsWHEREpage_views.date>=
'2008-03-01'
ANDpage_views.date<=
'2008-03-31'大數(shù)據(jù)理論與應用基礎9.3.4HiveSQL操作4.基于分區(qū)的查詢?nèi)绻粋€表page_views與另一個表dim_users連接,則可以在ON子句中指定一個分區(qū)的范圍:hive>SELECTpage_views.*FROMpage_viewsJOINdim_users
ON(page_views.user_id=dim_users.idANDpage_views.date>=
'2008-03-01'
ANDpage_views.date<=
'2008-03-31')大數(shù)據(jù)理論與應用基礎9.3.4HiveSQL操作5.LIMIT子句LIMIT子句可以用來限制SELECT語句返回的行數(shù)。LIMIT子句需要一個或兩個數(shù)字參數(shù),這些參數(shù)必須都是非負的整數(shù)常數(shù)。第一個參數(shù)指定了要返回的第一行的偏移量(從Hive2.0.0版本開始),第二個參數(shù)指定了要返回的最大行數(shù)。當只給出一個參數(shù)時,它代表最大行數(shù),偏移量默認為0。下面的查詢返回5個任意的客戶:hive>SELECT*FROMstudentLIMIT
5下面的查詢返回前5個要創(chuàng)建的客戶:hive>SELECT*FROMstudentORDERBYageLIMIT
5下面的查詢返回第3~7個要創(chuàng)建的客戶:hive>SELECT*FROMstudentORDERBYcreate_dateLIMIT
2,5大數(shù)據(jù)理論與應用基礎9.3.4HiveSQL操作6.GROUPBY子句GROUPBY子句用于使用特定的收集列將結(jié)果集中的所有記錄進行分組。它用于查詢一組記錄的語法如下:hive>FROMstudentaINSERTOVERWRITETABLEteacherSELECTa.age,count(*)WHEREa.age>0GROUPBYa.age;hive>INSERTOVERWRITETABLEeventsSELECTa.bar,count(*)FROMinvitesaWHEREa.foo>0GROUPBYa.bar;大數(shù)據(jù)理論與應用基礎9.3.4HiveSQL操作7.JOIN子句JOIN子句通過使用每個表的公共值來組合兩個表中的特定字段。它用于合并數(shù)據(jù)庫中兩個或多個表中的記錄的語法如下:hive>FROMstudentt1JOINteachert2ON(t1.teacher=t2.foo)INSERTOVERWRITETABLEpokesSELECTt1.age,,t2.ds;大數(shù)據(jù)理論與應用基礎9.3.4HiveSQL操作8.多表插入這里以一個例子來介紹多表插入,請自行閱讀以下代碼:hive>FROMstudentINSERTOVERWRITETABLEpokesSELECTstudent.age,,student.regionWHEREstudent.age<10INSERTOVERWRITETABLEpokes1SELECTstudent.age,,student.regionWHEREstudent.age<10;9.4實驗大數(shù)據(jù)理論與應用基礎9.4.1例1:MovieLens用戶評分MovieLens數(shù)據(jù)集是由美國明尼蘇達大學GroupLens研究組根據(jù)MovieLens網(wǎng)站提供的數(shù)據(jù)制作的。MovieLens是一個推薦系統(tǒng)和虛擬社區(qū)網(wǎng)站,是一個非商業(yè)性質(zhì)的、以研究為目的的實驗性站點。MovieLens數(shù)據(jù)集中包含多個電影評分數(shù)據(jù)集,分別具有不同的用途。MovieLens數(shù)據(jù)集是推薦系統(tǒng)領域最為經(jīng)典的數(shù)據(jù)集之一,其地位類似計算機視覺領域中的MNIST數(shù)據(jù)集。大數(shù)據(jù)理論與應用基礎9.4.1例1:MovieLens用戶評分本例主要練習使用Hive為MovieLens數(shù)據(jù)集構(gòu)建一個評分數(shù)據(jù)庫。具體操作步驟如下。首先,創(chuàng)建一個帶有制表符的文本文件格式的表格:大數(shù)據(jù)理論與應用基礎hive>CREATETABLEu_data(useridINT,movieidINT,ratingINT,unixtimeSTRING)ROWFORMATDELIMITEDFIELDSTERMINATEDBY'\t'STOREDASTEXTFILE;9.4.1例1:MovieLens用戶評分大數(shù)據(jù)理論與應用基礎然后,在GroupLens數(shù)據(jù)集頁面上下載MovieLens數(shù)據(jù)集100KB的數(shù)據(jù)文件(其中也有README.txt文件和解壓文件的索引):[root@master~]#wget[此處替換為MovieLens100KB的網(wǎng)址]或[root@master~]#curl--remote-name[此處替換為MovieLens100KB的網(wǎng)址]注意:如果GroupLens數(shù)據(jù)集的鏈接不起作用,則請手動下載。9.4.1例1:MovieLens用戶評分大數(shù)據(jù)理論與應用基礎解壓數(shù)據(jù)文件:[root@master~]#unzipml-100k.zip將解壓后的文件上傳到HDFS中:[root@master~]#hdfsdfs-put/usr/local/hive/ml-100k/進入Hive界面:[root@master~]#bin/hive將u.data加載到剛剛創(chuàng)建的表中:[root@master~]#LOADDATAINPATH'/ml-100k/u.data'INTOtableu_data;9.4.1例1:MovieLens用戶評分大數(shù)據(jù)理論與應用基礎計算表u_data表中的行數(shù):hive>SELECTcount(*)FROMu_data;注意:對于不包括HIVE-287的Hive版本,需要使用COUNT(1)來代替COUNT(*)?,F(xiàn)在可以對表u_data做一些復雜的數(shù)據(jù)分析。創(chuàng)建映射器腳本weekday_mapper.py:[roo
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年鷹潭職業(yè)技術學院單招職業(yè)傾向性測試題庫附答案詳解
- 2026年廣東水利電力職業(yè)技術學院單招職業(yè)適應性測試題庫及完整答案詳解1套
- 2026年陜西旅游烹飪職業(yè)學院單招職業(yè)適應性測試題庫及參考答案詳解1套
- 2026年吉林工程職業(yè)學院單招職業(yè)技能測試題庫及參考答案詳解一套
- 2026年重慶財經(jīng)職業(yè)學院單招職業(yè)傾向性測試題庫附答案詳解
- 2026年天津機電職業(yè)技術學院單招綜合素質(zhì)考試題庫含答案詳解
- 2026年杭州科技職業(yè)技術學院單招職業(yè)傾向性考試題庫及答案詳解一套
- 2026年鐵門關職業(yè)技術學院單招職業(yè)適應性測試題庫附答案詳解
- 2026年合肥職業(yè)技術學院單招職業(yè)傾向性測試題庫帶答案詳解
- 2026年西南交通大學希望學院單招職業(yè)適應性考試題庫及參考答案詳解1套
- 2026年醫(yī)院職工勞動合同
- 采購衛(wèi)浴合同范本模板
- 物流經(jīng)理年終總結(jié)
- 2025年7月項目部項目交付總結(jié)與準時
- 中小學“十四五”(2021-2025年)發(fā)展規(guī)劃
- GB/T 21387-2025供水系統(tǒng)用軸流式止回閥
- 合伙開餐飲合同范本
- DB37-T 5345-2025 《建筑工程流態(tài)固化土應用技術規(guī)程》
- 臀部脂膜炎的護理
- 裝表接電工藝培訓
- 洗煤廠環(huán)保培訓教案
評論
0/150
提交評論