版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
智建領(lǐng)航者智建領(lǐng)航者廈門大學(xué)計(jì)算機(jī)科學(xué)系研究生課程《大數(shù)據(jù)技術(shù)原理與應(yīng)用》自學(xué)教程Hadoop上的數(shù)據(jù)倉(cāng)庫(kù)Hive初級(jí)實(shí)踐教程(版本號(hào):2016年1月13日版本)主講教師:林子雨廈門大學(xué)數(shù)據(jù)庫(kù)實(shí)驗(yàn)室二零一六年一月(版權(quán)聲明:廈門大學(xué)數(shù)據(jù)庫(kù)實(shí)驗(yàn)室原創(chuàng)內(nèi)容,請(qǐng)勿用于商業(yè)用途)智建領(lǐng)航者智建領(lǐng)航者
目錄一、Hive簡(jiǎn)介 1二、Hive安裝 1三、Hive配置 3四、Hive的常用HiveQL操作 9五、Hive簡(jiǎn)單編程實(shí)踐 16附錄1:任課教師介紹 18附錄2:課程教材介紹 18智建領(lǐng)航者智建領(lǐng)航者
《大數(shù)據(jù)技術(shù)原理與應(yīng)用》自學(xué)教程Hadoop上的數(shù)據(jù)倉(cāng)庫(kù)Hive初級(jí)實(shí)踐教程主講教師:林子雨E-mail:ziyulin@個(gè)人主頁(yè):/linziyu一、Hive簡(jiǎn)介Hive是Facebook開(kāi)發(fā)的構(gòu)建于Hadoop集群之上的數(shù)據(jù)倉(cāng)庫(kù)應(yīng)用,可以將結(jié)構(gòu)化的數(shù)據(jù)文件映射為一張數(shù)據(jù)庫(kù)表,并提供完整的SQL查詢功能,可以將SQL語(yǔ)句轉(zhuǎn)換為MapReduce任務(wù)進(jìn)行運(yùn)行。Hive是一個(gè)可以提供有效的、合理的且直觀的組織和使用數(shù)據(jù)的模型,即使對(duì)于經(jīng)驗(yàn)豐富的Java開(kāi)發(fā)工程師來(lái)說(shuō),將這些常見(jiàn)的數(shù)據(jù)運(yùn)算對(duì)應(yīng)到底層的MapReduceJavaAPI也是令人敬畏的。Hive可以幫用戶做這些工作,用戶就可以集中精力關(guān)注查詢本身了。Hive可以將大多數(shù)的查詢轉(zhuǎn)換為MapReduce任務(wù)。Hive最適合于數(shù)據(jù)倉(cāng)庫(kù)應(yīng)用程序,使用該應(yīng)用程序進(jìn)行相關(guān)的靜態(tài)數(shù)據(jù)分析,不需要快速響應(yīng)給出結(jié)果,而且數(shù)據(jù)本身也不會(huì)頻繁變化。Hive不是一個(gè)完整的數(shù)據(jù)庫(kù)。Hadoop以及HDFS的設(shè)計(jì)本身約束和局限性限制了Hive所能勝任的工作。最大的限制就是Hive不支持記錄級(jí)別的更新、插入或者刪除。用戶可以通過(guò)查詢生成新表或?qū)⒉樵兘Y(jié)果導(dǎo)入到文件中去。因?yàn)?,Hadoop是一個(gè)面向批處理的系統(tǒng),而MapReduce啟動(dòng)任務(wù)啟動(dòng)過(guò)程需要消耗很長(zhǎng)時(shí)間,所以Hive延時(shí)也比較長(zhǎng)。Hive還不支持事務(wù)。因此,Hive不支持聯(lián)機(jī)事務(wù)處理(OLTP),更接近于一個(gè)聯(lián)機(jī)分析技術(shù)(OLAP)工具,但是,目前還沒(méi)有滿足“聯(lián)機(jī)”部分。Hive提供了一系列的工具,可以用來(lái)進(jìn)行數(shù)據(jù)提取轉(zhuǎn)化加載(ETL),其中,ETL是一種可以存儲(chǔ)、查詢和分析存儲(chǔ)在Hadoop中的大規(guī)模數(shù)據(jù)的機(jī)制。因此,Hive是最適合數(shù)據(jù)倉(cāng)庫(kù)應(yīng)用程序的,它可以維護(hù)海量數(shù)據(jù),而且可以對(duì)數(shù)據(jù)進(jìn)行挖掘,然后形成意見(jiàn)和報(bào)告等。因?yàn)榇蠖鄶?shù)的數(shù)據(jù)倉(cāng)庫(kù)應(yīng)用程序是基于SQL的關(guān)系數(shù)據(jù)庫(kù)現(xiàn)實(shí)的,所以,Hive降低了將這些應(yīng)用程序移植到Hadoop上的障礙。如果用戶懂得SQL,那么學(xué)習(xí)使用Hive會(huì)很容易。因?yàn)镠ive定義了簡(jiǎn)單的類SQL查詢語(yǔ)言——HiveQL,這里值得一提的是,與SQLServer、Oracle相比,HiveQL和MySQL提供的SQL語(yǔ)言更接近。同樣的,相對(duì)于其他的Hadoop語(yǔ)言和工具來(lái)說(shuō),Hive也使得開(kāi)發(fā)者將基于SQL的應(yīng)用程序移植到Hadoop變得更加容易。二、Hive安裝因?yàn)镠ive是構(gòu)建在Hadoop之上的,所以在安裝Hive前,我們需要安裝Hadoop環(huán)境。Hadoop的安裝可以參照廈門大學(xué)數(shù)據(jù)庫(kù)實(shí)驗(yàn)室網(wǎng)站上的安裝教程(/blog/install-hadoop-simplify/#more-94),但是,請(qǐng)注意,在按照該教程安裝完Hadoop以后,不要進(jìn)行配置,Hadoop的配置過(guò)程,稍后我們?cè)诎惭b完Hive后一起進(jìn)行。下面開(kāi)始安裝Hive。安裝Hive的過(guò)程和安裝Hadoop很類似,首先,我們先下載一個(gè)Hive軟件壓縮包(下載地址:/dyn/closer.cgi/hive/),然后進(jìn)行解壓縮,具體如下:$cd~/下載$sudotar-zxvf./apache-hive-1.2.1-bin.tar.gz-C/usr/local#解壓到/usr/local中$cd/usr/local/$sudomv./apache-hive-1.2.1-bin/./hive#將文件夾名改為hive$sudochown-Rhadoop:hadoop./hive#修改文件權(quán)限$sudomkdir-p/usr/local/hive/warehouse#創(chuàng)建元數(shù)據(jù)存儲(chǔ)文件夾$sudochmoda+rwx/usr/local/hive/warehouse#修改文件權(quán)限為了方便使用,我們把hive命令加入到環(huán)境變量中去,需要使用以下命令編輯.bashrc文件:$vim~/.bashrc#設(shè)置環(huán)境變量進(jìn)入.bashrc編輯狀態(tài)以后,需要在文件最前面添加如下幾行:exportHIVE_HOME=/usr/local/hiveexportPATH=$PATH:$HIVE_HOME/bin完成上述操作后,需要運(yùn)行以下命令讓配置生效:$source~/.bashrc#使配置立即生效然后運(yùn)行hive命令啟動(dòng)Hive,命令如下:$hive#啟動(dòng)Hive注意:(1)若啟動(dòng)不成功,則會(huì)出現(xiàn)以下錯(cuò)誤:則需要進(jìn)入到hadoop安裝目錄下的share/hadoop/yarn/lib下刪除jline-0.9.94.jar文件,再啟動(dòng)hive即可(因?yàn)楦甙姹镜腍adoop對(duì)Hive有捆綁)。(2)出現(xiàn)以下界面即為啟動(dòng)成功:三、Hive配置通過(guò)Hadoop的學(xué)習(xí)我們已經(jīng)知道,Hadoop的運(yùn)行模式有三種:本地模式、偽分布式模式和分布式模式。這里我們以介紹本地模式為主,其他模式只進(jìn)行簡(jiǎn)單介紹。因?yàn)?,本地模式是Hadoop的默認(rèn)模式,所以,Hadoop不需要進(jìn)行其他配置,我們只需對(duì)Hive進(jìn)行相應(yīng)配置。這里只需修改hive-site.xml文件,如果該文件不存在,用戶需要自己新建一個(gè)。(注意:在$HIVE_HOME/conf目錄下我們可能會(huì)看到hive-default.xml.template這個(gè)大文件,這個(gè)文件中包含了Hive提供的配置屬性以及默認(rèn)的屬性值,這些屬性中的絕大多數(shù),用戶可以忽略不管)。在安裝Hive時(shí),默認(rèn)情況下,元數(shù)據(jù)存儲(chǔ)在Derby數(shù)據(jù)庫(kù)中。Derby是一個(gè)完全用Java編寫的數(shù)據(jù)庫(kù),所以可以跨平臺(tái),但需要在JVM中運(yùn)行。因?yàn)槎嘤脩艉拖到y(tǒng)可能需要并發(fā)訪問(wèn)元數(shù)據(jù)存儲(chǔ),所以默認(rèn)的內(nèi)置數(shù)據(jù)庫(kù)并不適用于生產(chǎn)環(huán)境。任何一個(gè)適用于JDBC進(jìn)行連接的數(shù)據(jù)庫(kù)都可用作元數(shù)據(jù)庫(kù)存儲(chǔ),這里我們把MySQL作為存儲(chǔ)元數(shù)據(jù)的數(shù)據(jù)庫(kù)。接下來(lái),我們分別對(duì)這兩種方式進(jìn)行介紹,即使用Derby數(shù)據(jù)庫(kù)的方式和使用MySQL數(shù)據(jù)庫(kù)的方式。(一)使用Derby數(shù)據(jù)庫(kù)的方式本地模式中,用戶的“表”等元數(shù)據(jù)信息,都默認(rèn)存儲(chǔ)在file://user/hive/warehouse,對(duì)于其他模式默認(rèn)存儲(chǔ)路徑是hdfs://namenode_server/user/hive/warehouse。使用如下命令編輯hive-site.xml文件:$vim/usr/local/hive/conf/hive-site.xml在hive-site.xml文件添加以下內(nèi)容:<?xmlversion="1.0"encoding="UTF-8"standalone="no"?><?xml-stylesheettype="text/xsl"href="configuration.xsl"?><configuration><property><name>hive.metastore.warehouse.dir</name><value>/usr/local/hive/warehouse</value><description>locationofdefaultdatabaseforthewarehouse</description></property><property><name>javax.jdo.option.ConnectionURL</name><value>jdbc:derby:;databaseName=/usr/local/hive/metastore_db;create=true</value><description>JDBCconnectstringforaJDBCmetastore</description></property></configuration>偽分布式模式和分布式模式配置Hive,只需根據(jù)Hadoop配置文件core-site.xml中fs.defaultFS的值對(duì)hive.metastore.warehouse.dir進(jìn)行相應(yīng)修改即可。這里對(duì)Hadoop的模式配置,可以參考廈門大學(xué)數(shù)據(jù)庫(kù)實(shí)驗(yàn)室網(wǎng)站上的的配置教程(/blog/install-hadoop-simplify/#more-94)。Hive配置完成后,下面來(lái)啟動(dòng)它,并使用簡(jiǎn)單的HiveQL命令進(jìn)行相應(yīng)測(cè)試。我們先新建了一個(gè)表x,它有1個(gè)int型屬性a,然后查找表x中的所有屬性,最后刪除表x,然后退出。HiveQL命令與SQL命令很相似,所以,讀者如果有SQL基礎(chǔ)的話,會(huì)很快上手。關(guān)于HiveQL命令的使用方法會(huì)在第4節(jié)詳細(xì)介紹。注意:命令最后需要加“;”。(二)使用MySQL數(shù)據(jù)庫(kù)的方式1.首先我們需要安裝MySQL(如果本機(jī)上已經(jīng)安裝MySQL,請(qǐng)?zhí)^(guò)此步驟)??梢詤⒖季W(wǎng)址(/downloads/mysql/)進(jìn)行下載安裝,也可以用apt-get命令下載,這里我們選擇后者。(1)查看并卸載系統(tǒng)自帶的MySQL相關(guān)安裝包,命令如下:$rpm-qa|grepmysql若沒(méi)有安裝rpm工具,系統(tǒng)會(huì)有提示,按照提示安裝即可。接下來(lái)查看是否有系統(tǒng)自帶的MySQL相關(guān)安裝包,若有,按下面命令刪除:$sudorpm-e--nodepsmysql-libs-xxxxxx(2)安裝MySQL,命令如下:$sudoapt-getinstallmysql-server(3)啟動(dòng)設(shè)置MySQL,命令如下:$sudoservicemysqlstart#啟動(dòng)mysql服務(wù)$sudochkconfigmysqlon#設(shè)置為開(kāi)機(jī)自啟動(dòng)$sudo
/usr/bin/mysqladmin-urootpassword'123'#設(shè)置root用戶登錄密碼$mysql-uroot-p#登錄mysql(4)創(chuàng)建hive用戶,數(shù)據(jù)庫(kù)等,命令如下:$insertintomysql.user(Host,User,Password)values("localhost","hive",password("hive"));#創(chuàng)建hive用戶$createdatabasehive;#創(chuàng)建hive數(shù)據(jù)庫(kù)$grantallonhive.*tohive@'%'identifiedby'hive';$grantallonhive.*tohive@'localhost'identifiedby'hive';$flushprivileges;$exit#退出mysql$mysql-uhive-phive#驗(yàn)證hive用戶$showdatabases;看到以下信息,則說(shuō)明創(chuàng)建成功。2.配置Hive,修改hive-site.xml文件,修改后的結(jié)果如下:<?xmlversion="1.0"encoding="UTF-8"standalone="no"?><?xml-stylesheettype="text/xsl"href="configuration.xsl"?><configuration><property><name>hive.metastore.warehouse.dir</name><value>/usr/local/hive/warehouse</value><description>locationofdefaultdatabaseforthewarehouse</description></property><property><name>javax.jdo.option.ConnectionURL</name><value>jdbc:mysql://localhost:3306/hive;createDatebaseIfNotExist=true</value><description>JDBCconnectstringforaJDBCmetastore</description></property><property><name>javax.jdo.option.ConnectionDriverName</name><value>com.mysql.jdbc.Driver</value><description>DriverclassnameforaJDBCmetastore</description></property><property><name>javax.jdo.option.ConnectionPassword</name><value>hive</value></property><property><name>javax.jdo.option.ConnectionUserName</name><value>hive</value><description>Usernametouseagainstmetastoredatabase</description></property></configuration>修改完hive-site.xml文件后,我們需要把JDBC驅(qū)動(dòng)放置在lib目錄下(JDBC驅(qū)動(dòng)程序mysql-connector-java-x.x.x-bin.jar文件的下載地址為http://www.mysql.com/downloads/connector/j/),命令如下:$mv~/下載/mysql-connector-java-5.1.30-bin.jar/usr/local/hive/lib/#拷貝mysql-connector-java-5.1.30-bin.jar到hive的lib下$cp/usr/local/hive/lib/jline-2.12.jar/usr/local/hadoop/share/hadoop/yarn/lib#把jline-2.12.jar拷貝到hadoop相應(yīng)目錄下$mkdir
-p/usr/local/hive/tmp#創(chuàng)建hive臨時(shí)文件夾$sudochmoda+rwx/usr/local/hive/tmp#修改文件權(quán)限接下來(lái),啟動(dòng)測(cè)試Hive。首先啟動(dòng)Hadoop后,執(zhí)行Hive命令“hive”,并輸入”showdatabases;“進(jìn)行測(cè)試。hiveclient常用命令可以通過(guò)hive--help查看。下面再介紹一些hiveclient常用命令,用戶可以自行測(cè)試:$showtables;#查看所有表名$showtables'ad*';#查看以'ad'開(kāi)頭的表名$set命令#設(shè)置變量與查看變量$set–v;#查看所有的變量$sethive.stats.atomic;#查看hive.stats.atomic變量$sethive.stats.atomic=false;#設(shè)置hive.stats.atomic變量$dfs-ls;#查看hadoop所有文件路徑$dfs-ls/usr/local/hive/warehouse/;#查看hive所有文件$sourcefile<filepath>#在client里執(zhí)行一個(gè)hive腳本文件$quit;#退出交互式shell$exit#退出交互式shell$reset#重置配置為默認(rèn)值$!ls#從Hiveshell執(zhí)行一個(gè)shell命令四、Hive的常用HiveQL操作(一)Hive基本數(shù)據(jù)類型首先,我們簡(jiǎn)單敘述一下HiveQL的基本數(shù)據(jù)類型。Hive支持基本數(shù)據(jù)類型和復(fù)雜類型,基本數(shù)據(jù)類型主要有數(shù)值類型(INT、FLOAT、DOUBLE)、布爾型和字符串,復(fù)雜類型有三種:ARRAY、MAP和STRUCT。
1.基本數(shù)據(jù)類型
TINYINT:1個(gè)字節(jié)
SMALLINT:2個(gè)字節(jié)
INT:4個(gè)字節(jié)
BIGINT:8個(gè)字節(jié)
BOOLEAN:TRUE/FALSE
FLOAT:4個(gè)字節(jié),單精度浮點(diǎn)型
DOUBLE:8個(gè)字節(jié),雙精度浮點(diǎn)型STRING字符串
2.復(fù)雜數(shù)據(jù)類型
ARRAY:有序字段
MAP:無(wú)序字段
STRUCT:一組命名的字段(二)常用的HiveQL操作命令Hive常用的HiveQL操作命令主要包括:數(shù)據(jù)定義、數(shù)據(jù)操作。接下來(lái)詳細(xì)介紹一下這些命令即用法(想要了解更多請(qǐng)參照《Hive編程指南》一書)。1.數(shù)據(jù)定義主要用于創(chuàng)建修改和刪除數(shù)據(jù)庫(kù)、表、視圖、函數(shù)和索引。(1)創(chuàng)建、修改和刪除數(shù)據(jù)庫(kù)$createdatabaseifnotexistshive;#創(chuàng)建數(shù)據(jù)庫(kù)$showdatabases;#查看Hive中包含數(shù)據(jù)庫(kù)$showdatabaseslike'h.*';#查看Hive中以h開(kāi)頭數(shù)據(jù)庫(kù)$describedatabases;#查看hive數(shù)據(jù)庫(kù)位置等信息$alterdatabasehivesetdbproperties;#為hive設(shè)置鍵值對(duì)屬性$usehive;#切換到hive數(shù)據(jù)庫(kù)下$dropdatabaseifexistshive;#刪除不含表的數(shù)據(jù)庫(kù)$dropdatabaseifexistshivecascade;#刪除數(shù)據(jù)庫(kù)和它中的表注意:除dbproperties屬性外,數(shù)據(jù)庫(kù)的元數(shù)據(jù)信息都是不可更改的,包括數(shù)據(jù)庫(kù)名和數(shù)據(jù)庫(kù)所在的目錄位置,沒(méi)有辦法刪除或重置數(shù)據(jù)庫(kù)屬性。(2)創(chuàng)建、修改和刪除表$createtableifnotexistshive.usr(#創(chuàng)建內(nèi)部表(管理表)namestringcomment'username',pwdstringcomment'password',addressstruct<street:string,city:string,state:string,zip:int>,comment'homeaddress',identifymap<int,tinyint>comment'number,sex')comment'descriptionofthetable'tblproperties('creator'='me','time'='2016.1.1');$createexternaltableifnotexistsusr2(#創(chuàng)建外部表namestring,pwdstring,addressstruct<street:string,city:string,state:string,zip:int>,identifymap<int,tinyint>)rowformatdelimitedfieldsterminatedby','location'/usr/local/hive/warehouse/hive.db/usr';$createtableifnotexistsusr3(#創(chuàng)建分區(qū)表namestring,pwdstring,addressstruct<street:string,city:string,state:string,zip:int>,identifymap<int,tinyint>)partitionedby(citystring,statestring);$createtableifnotexistshive.usr1likehive.usr;#復(fù)制usr表的表模式$showtablesinhive;#查看hive數(shù)據(jù)庫(kù)中所有表$showtables'u.*';#查看hive中以u(píng)開(kāi)頭的表$describehive.usr;#查看usr表相關(guān)信息$altertableusrrenametocustom;#重命名表$altertableusr2addifnotexists#為表增加一個(gè)分區(qū)partition(city=”beijing”,state=”China”)location'/usr/local/hive/warehouse/usr2/China/beijing';$altertableusr2partition(city=”beijing”,state=”China”)#修改分區(qū)路徑setlocation'/usr/local/hive/warehouse/usr2/CH/beijing';$altertableusr2dropifexistspartition(city=”beijing”,state=”China”)#刪除分區(qū)$altertableusrchangecolumnpwdpasswordstringafteraddress;#修改列信息$altertableusraddcolumns(hobbystring);#增加列$altertableusrreplacecolumns(unamestring);#刪除替換列$altertableusrsettblproperties('creator'='liming');#修改表屬性$altertableusr2partition(city=”beijing”,state=”China”)#修改存儲(chǔ)屬性setfileformatsequencefile;$usehive;#切換到hive數(shù)據(jù)庫(kù)下$droptableifexistsusr1;#刪除表$dropdatabaseifexistshivecascade;#刪除數(shù)據(jù)庫(kù)和它中的表(3)視圖和索引的創(chuàng)建、修改和刪除主要語(yǔ)法如下,用戶可自行實(shí)現(xiàn)。$createviewview_nameas;#創(chuàng)建視圖$alterviewview_namesettblproperties(…);#修改視圖因?yàn)橐晥D是只讀的,所以對(duì)于視圖只允許改變?cè)獢?shù)據(jù)中的tblproperties屬性。$dropviewifexistsview_name;#刪除視圖$createindexindex_nameontabletable_name(partition_name/column_name)#創(chuàng)建索引as'pact.CompactIndexHandler'withdeferredrebuild;這里'pact.CompactIndexHandler'是一個(gè)索引處理器,即一個(gè)實(shí)現(xiàn)了索引接口的Java類,另外Hive還有其他的索引實(shí)現(xiàn)。$alterindexindex_nameontabletable_namepartition(...)rebulid;#重建索引如果使用deferredrebuild,那么新索引成空白狀態(tài),任何時(shí)候可以進(jìn)行第一次索引創(chuàng)建或重建。$showformattedindexontable_name;#顯示索引$dropindexifexistsindex_nameontabletable_name;#刪除索引(4)用戶自定義函數(shù)在新建用戶自定義函數(shù)(UDF)方法前,先了解一下Hive自帶的那些函數(shù)。“showfunctions;”命令會(huì)顯示Hive中所有的函數(shù)名稱:若想要查看具體函數(shù)使用方法可使用describefunction函數(shù)名;首先編寫自己的UDF前需要繼承UDF類并實(shí)現(xiàn)evaluate()函數(shù),或是繼承GenericUDF類實(shí)現(xiàn)initialize()函數(shù)、evaluate()函數(shù)和getDisplayString()函數(shù),還有其他的實(shí)現(xiàn)方法,感興趣的用戶可以自行學(xué)習(xí)。另外,如果用戶想在Hive中使用該UDF需要將我們編寫的Java代碼進(jìn)行編譯,然后將編譯后的UDF二進(jìn)制類文件(.class文件)打包成一個(gè)JAR文件,然后在Hive會(huì)話中將這個(gè)JAR文件加入到類路徑下,在通過(guò)createfunction語(yǔ)句定義好使用這個(gè)Java類的函數(shù)。$addjar<jar文件的絕對(duì)路徑>;#創(chuàng)建函數(shù)$createtemporaryfunctionfunction_name;$droptemporaryfunctionifexistsfunction_name;#刪除函數(shù)2.數(shù)據(jù)操作主要實(shí)現(xiàn)的是將數(shù)據(jù)裝載到表中(或是從表中導(dǎo)出),并進(jìn)行相應(yīng)查詢操作,對(duì)熟悉SQL語(yǔ)言的用戶應(yīng)該不會(huì)陌生。(1)向表中裝載數(shù)據(jù)這里我們以只有兩個(gè)屬性的簡(jiǎn)單表為例來(lái)介紹。首先創(chuàng)建表stu和course,stu有兩個(gè)屬性id與name,course有兩個(gè)屬性cid與sid。$createtableifnotexistshive.stu(idint,namestring)rowformatdelimitedfieldsterminatedby'\t';$createtableifnotexistshive.course(cidint,sidint)rowformatdelimitedfieldsterminatedby'\t';向表中裝載數(shù)據(jù)有兩種方法:從文件中導(dǎo)入和通過(guò)查詢語(yǔ)句插入。a.從文件中導(dǎo)入假如這個(gè)表中的記錄存儲(chǔ)于文件stu.txt中,該文件的存儲(chǔ)路徑為usr/local/hadoop/examples/stu.txt,內(nèi)容如下,stu.txt:1 xiapi2 xiaoxue3 qingqing下面我們把這個(gè)文件中的數(shù)據(jù)裝載到表stu中,操作如下:$loaddatalocalinpath'/usr/local/hadoop/examples/stu.txt'overwriteintotablestu;如果stu.txt文件存儲(chǔ)在HDFS上,則不需要local關(guān)鍵字。b.通過(guò)查詢語(yǔ)句插入使用如下命令,創(chuàng)建stu1表,它和stu表屬性相同,我們要把從stu表中查詢得到的數(shù)據(jù)插入到stu1中:$createtablestu1asselectid,namefromstu;上面是創(chuàng)建表,并直接向新表插入數(shù)據(jù);若表已經(jīng)存在,向表中插入數(shù)據(jù)需執(zhí)行以下命令:$insertoverwritetablestu1selectid,namefromstuwhere(條件);這里關(guān)鍵字overwrite的作用是替換掉表(或分區(qū))中原有數(shù)據(jù),換成into關(guān)鍵字,直接追加到原有內(nèi)容后。(2)從表中導(dǎo)出數(shù)據(jù)a.可以簡(jiǎn)單拷貝文件或文件夾命令如下:$hadoopfs-cpsource_pathtarget_path;b.寫入臨時(shí)文件命令如下:$insertoverwritelocaldirectory'/usr/local/hadoop/tmp/stu'selectid,namefromstu;(3)查詢操作和SQL的查詢完全一樣,這里不再贅述。主要使用select...from...where...等語(yǔ)句,再結(jié)合關(guān)鍵字groupby、having、like、rlike等操作。這里我們簡(jiǎn)單介紹一下SQL中沒(méi)有的case...when...then...句式、join操作和子查詢操作。case...when...then...句式和if條件語(yǔ)句類似,用于處理單個(gè)列的查詢結(jié)果,語(yǔ)句如下:$selectid,name,casewhenid=1then'first'whenid=2then'second'else'third'endfromstu;結(jié)果如下:連接(join)是將兩個(gè)表中在共同數(shù)據(jù)項(xiàng)上相互匹配的那些行合并起來(lái),HiveQL的連接分為內(nèi)連接、左向外連接、右向外連接、全外連接和半連接5種。a.內(nèi)連接(等值連接)
內(nèi)連接使用比較運(yùn)算符根據(jù)每個(gè)表共有的列的值匹配兩個(gè)表中的行。首先,我們先把以下內(nèi)容插入到course表中(自行完成)。1 32 13 1
下面,查詢stu和course表中學(xué)號(hào)相同的所有行,命令如下:$selectstu.*,course.*fromstujoincourseon(stu.id=course.sid);執(zhí)行結(jié)果如下:b.左連接
左連接的結(jié)果集包括“LEFTOUTER”子句中指定的左表的所有行,而不僅僅是連接列所匹配的行。如果左表的某行在右表中沒(méi)有匹配行,則在相關(guān)聯(lián)的結(jié)果集中右表的所有選擇列均為空值,命令如下:$selectstu.*,course.*fromstuleftouterjoincourseon(stu.id=course.sid);執(zhí)行結(jié)果如下:c.右連接
右連接是左向外連接的反向連接,將返回右表的所有行。如果右表的某行在左表中沒(méi)有匹配行,則將為左表返回空值。命令如下:$selectstu.*,course.*fromsturightouterjoincourseon(stu.id=course.sid);執(zhí)行結(jié)果如下:d.全連接
全連接返回左表和右表中的所有行。當(dāng)某行在另一表中沒(méi)有匹配行時(shí),則另一個(gè)表的選擇列表包含空值。如果表之間有匹配行,則整個(gè)結(jié)果集包含基表的數(shù)據(jù)值。命令如下:$selectstu.*,course.*fromstufullouterjoincourseon(stu.id=course.sid);執(zhí)行結(jié)果如下:e.半連接
半連接是Hive
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年陜西寧陜縣文化旅游投資開(kāi)發(fā)有限責(zé)任公司招聘筆試參考題庫(kù)附帶答案詳解
- 2025年版?zhèn)€人房產(chǎn)出售交易資金監(jiān)管及風(fēng)險(xiǎn)控制合同
- 2025年全球及中國(guó)阻燃塑料膜行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025-2030全球3D激光雷達(dá)掃描儀行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025-2030全球低截止光纖行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025年全球及中國(guó)有機(jī)硅柔性皮膚粘合劑行業(yè)頭部企業(yè)市場(chǎng)占有率及排名調(diào)研報(bào)告
- 2025版無(wú)證二手房交易合同糾紛調(diào)解及賠償協(xié)議3篇
- 委托接送子女上下學(xué)合同
- 教育政策解讀與匯報(bào)策略
- 二零二五年度廚師個(gè)人工作室聘用合同規(guī)范4篇
- 三年級(jí)數(shù)學(xué)(上)計(jì)算題專項(xiàng)練習(xí)附答案
- 中醫(yī)診療方案腎病科
- 2025年安慶港華燃?xì)庀薰菊衅腹ぷ魅藛T14人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 人教版(2025新版)七年級(jí)下冊(cè)數(shù)學(xué)第七章 相交線與平行線 單元測(cè)試卷(含答案)
- 玩具有害物質(zhì)風(fēng)險(xiǎn)評(píng)估-洞察分析
- 2024年河南省公務(wù)員錄用考試《行測(cè)》真題及答案解析
- 企業(yè)合規(guī)管理實(shí)務(wù)
- T-CHSA 020-2023 上頜骨缺損手術(shù)功能修復(fù)重建的專家共識(shí)
- Hypermesh lsdyna轉(zhuǎn)動(dòng)副連接課件完整版
- 小學(xué)六年級(jí)數(shù)學(xué)計(jì)算題100道(含答案)
評(píng)論
0/150
提交評(píng)論