大數(shù)據(jù)技術(shù)及應(yīng)用-基于Python語言 課件 第6章 Hive基礎(chǔ)與應(yīng)用_第1頁
大數(shù)據(jù)技術(shù)及應(yīng)用-基于Python語言 課件 第6章 Hive基礎(chǔ)與應(yīng)用_第2頁
大數(shù)據(jù)技術(shù)及應(yīng)用-基于Python語言 課件 第6章 Hive基礎(chǔ)與應(yīng)用_第3頁
大數(shù)據(jù)技術(shù)及應(yīng)用-基于Python語言 課件 第6章 Hive基礎(chǔ)與應(yīng)用_第4頁
大數(shù)據(jù)技術(shù)及應(yīng)用-基于Python語言 課件 第6章 Hive基礎(chǔ)與應(yīng)用_第5頁
已閱讀5頁,還剩105頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第6章Hive基礎(chǔ)與應(yīng)用本章學(xué)習(xí)目標(biāo)了解數(shù)據(jù)庫與數(shù)據(jù)倉(cāng)庫的區(qū)別,了解Hive在Hadoop平臺(tái)的位置和特征;掌握Hive存儲(chǔ)模型,掌握Hive數(shù)據(jù)表的組織方式;掌握Hive的常用命令,能夠結(jié)合數(shù)據(jù)模型理解和靈活使用DDL實(shí)現(xiàn)數(shù)據(jù)倉(cāng)庫表構(gòu)建、分區(qū)設(shè)置和應(yīng)用等操作;能夠靈活使用DML語言,實(shí)現(xiàn)對(duì)Hive數(shù)據(jù)倉(cāng)庫表數(shù)據(jù)的操縱;掌握Hive-QL命令實(shí)現(xiàn)對(duì)Hive數(shù)據(jù)倉(cāng)庫表的構(gòu)建、分區(qū)應(yīng)用、數(shù)據(jù)操縱和數(shù)據(jù)查詢操作;01Hive簡(jiǎn)介02Hive的存儲(chǔ)模型目錄Contents03Hive初探04Hive的數(shù)據(jù)定義—DDL05Hive的數(shù)據(jù)操縱—DML06Hive的數(shù)據(jù)檢索—Hive-QL07本章小結(jié)Hive簡(jiǎn)介01Hive簡(jiǎn)介ApacheHive是由Facebook開源,用于解決海量結(jié)構(gòu)日志的數(shù)據(jù)倉(cāng)庫軟件。Hive使用類SQL(Hive-QL,HQL)語法進(jìn)行數(shù)據(jù)的讀取、寫入、檢索等操作,本質(zhì)是把HQL轉(zhuǎn)化為MapReduce程序。為什么要用HiveMapReduce的出現(xiàn),極大的簡(jiǎn)化大數(shù)據(jù)編程的難度,使得普通程序員也能從事開發(fā)大數(shù)據(jù)編程。但數(shù)據(jù)分析人員通常使用SQL語言進(jìn)行大數(shù)據(jù)統(tǒng)計(jì)以及分析,而Mapreduce編程是有一定的門檻,如果每次都采用MapReduce開發(fā),則成本太高、效率太低。那么有沒有更簡(jiǎn)單的辦法,可以直接通過SQL在大數(shù)據(jù)平臺(tái)下運(yùn)行進(jìn)行數(shù)據(jù)分析?有的,答案即是Hive。數(shù)據(jù)庫與數(shù)據(jù)倉(cāng)庫對(duì)比角度數(shù)

據(jù)

庫數(shù)據(jù)倉(cāng)庫目的目的在于記錄目的在于分析應(yīng)用處理方法在線事務(wù)處理(OLTP)在線分析處理(OLAP).應(yīng)用范圍數(shù)據(jù)庫用于支持業(yè)務(wù)過程的日?;A(chǔ)操作數(shù)據(jù)倉(cāng)庫使你可以對(duì)業(yè)務(wù)進(jìn)行分析表與連接數(shù)據(jù)庫的表和聯(lián)接是復(fù)雜的,但是它們是規(guī)范化的。數(shù)據(jù)庫的表和聯(lián)接比較簡(jiǎn)單,它們是非規(guī)范化的。面向面向應(yīng)用的數(shù)據(jù)收集面向主題的數(shù)據(jù)收集數(shù)據(jù)庫與數(shù)據(jù)倉(cāng)庫對(duì)比角度數(shù)

據(jù)

庫數(shù)據(jù)倉(cāng)庫存儲(chǔ)限制通常限制于單個(gè)的應(yīng)用范圍所存儲(chǔ)數(shù)據(jù)常被應(yīng)用于多個(gè)應(yīng)用中可用性數(shù)據(jù)是實(shí)時(shí)可用的數(shù)據(jù)只有在需要的時(shí)候再進(jìn)行更新,非實(shí)時(shí)性的模型用ER模型進(jìn)行數(shù)據(jù)庫的設(shè)計(jì)用數(shù)據(jù)建模技術(shù)進(jìn)行模型的構(gòu)建技能捕獲實(shí)時(shí)在線數(shù)據(jù)分析數(shù)據(jù)數(shù)據(jù)庫與數(shù)據(jù)倉(cāng)庫對(duì)比角度數(shù)

據(jù)

庫數(shù)據(jù)倉(cāng)庫數(shù)據(jù)類型數(shù)據(jù)庫中存儲(chǔ)的總是最新的數(shù)據(jù)記錄.當(dāng)前和歷史數(shù)據(jù)都存儲(chǔ)在數(shù)據(jù)倉(cāng)庫,通常情況下都不是最新數(shù)據(jù)數(shù)據(jù)存儲(chǔ)利用扁平的關(guān)系方法進(jìn)行數(shù)據(jù)存儲(chǔ)利用空間規(guī)范化方法作為數(shù)據(jù)存儲(chǔ)結(jié)構(gòu),例如采用星型、雪花型存儲(chǔ)模式查詢類型簡(jiǎn)單的事務(wù)查詢以分析數(shù)據(jù)為目的的復(fù)雜檢索數(shù)據(jù)匯總存儲(chǔ)數(shù)據(jù)的明細(xì)存儲(chǔ)數(shù)據(jù)匯總信息Hive體系結(jié)構(gòu)與接口Hive體系結(jié)構(gòu)與接口元數(shù)據(jù)存儲(chǔ):Hive將元數(shù)據(jù)存儲(chǔ)在數(shù)據(jù)庫中(MySql或者Derby)Hive體系結(jié)構(gòu)Client:用戶接口組件主要包含CLI(命令行接口)、JDBC或ODBC、WEBGUI(以瀏覽器訪問Hive);ThriftServer:Thrift是FaceBook開發(fā)的一個(gè)軟件框架,它用來進(jìn)行可擴(kuò)展且跨語言的服務(wù)的開發(fā),通過該服務(wù)使不同編程語言調(diào)用Hive的接口;Hive簡(jiǎn)介Driver(執(zhí)行引擎):包括Complier、Optimizer和Executor,它們的作用是將Hive-QL語句進(jìn)行語法分析、語法解析、語法優(yōu)化,生成執(zhí)行計(jì)劃,然后提交給HadoopMapReduce計(jì)算框架處理;Metastore服務(wù):元數(shù)據(jù)服務(wù)組件,提供HDFS中存儲(chǔ)的數(shù)據(jù)與對(duì)應(yīng)表結(jié)構(gòu)的關(guān)系。Hive體系結(jié)構(gòu)Hive本身主要存儲(chǔ)數(shù)據(jù)倉(cāng)庫的元數(shù)據(jù),其數(shù)據(jù)可以分布存儲(chǔ)在Hadoop系統(tǒng)的各個(gè)節(jié)點(diǎn)中,這種模式大大減輕了中心服務(wù)器的壓力,從而也為大數(shù)據(jù)處理和數(shù)據(jù)倉(cāng)庫數(shù)據(jù)的快速分析提供了保障。由其體系結(jié)構(gòu)可以看出,Hive提供了多種數(shù)據(jù)訪問方式,可以通過命令行方式直接訪問,也可以通過Thrift客戶端/服務(wù)器的模式進(jìn)行數(shù)據(jù)的存取和訪問。SQL——MapReduceHive特征Hive的數(shù)據(jù)存儲(chǔ)在HDFS上;Hive數(shù)據(jù)分析的底層實(shí)現(xiàn)是MapReduce;Hive的執(zhí)行程序運(yùn)行在Yarn上;Hive的存儲(chǔ)模型02Hive存儲(chǔ)模型Hive存儲(chǔ)模型數(shù)據(jù)庫(Database)表(Table)分區(qū)(Partition)桶(Bucket)數(shù)據(jù)庫(database)數(shù)據(jù)庫起到命名空間的作用,主要用于避免表、視圖、分區(qū)、列等基本元素的命名沖突。同時(shí),數(shù)據(jù)庫在概念上對(duì)基本元素進(jìn)行隔離,所以還可為用戶或用戶組實(shí)施安全性定義提供支持。表(Table)表是具有相同模式的同構(gòu)數(shù)據(jù)單位,但是表的具體數(shù)據(jù)存儲(chǔ)可以有不同的方式。Hive表的概念與關(guān)系型數(shù)據(jù)庫中表的概念具有相似之處。分區(qū)(partitions)每個(gè)表可以有一個(gè)或多個(gè)分區(qū)鍵,可用于確定數(shù)據(jù)的存儲(chǔ)方式。分區(qū)除了作為存儲(chǔ)單元外,還允許用戶有效地識(shí)別滿足指定條件的行。例如,STRING類型的date_partition和STRING類型的country_partition,其分區(qū)鍵的每個(gè)唯一值定義了表的一個(gè)分區(qū)例如,日期為“2009-12-23”中的所有國(guó)家為“US”的數(shù)據(jù)都是page_views表的一個(gè)分區(qū)。因此,如果只對(duì)日期為“2009-12-23”的國(guó)家為“US”的數(shù)據(jù)進(jìn)行分析,則只需在表的相關(guān)分區(qū)上運(yùn)行該查詢,從而大大加快了分析速度。分區(qū)(partitions)需要注意的是,一個(gè)分區(qū)被命名為“2009-12-23”并不意味著該分區(qū)包含所有或僅包含該日期的數(shù)據(jù),分區(qū)以日期命名是為了方便進(jìn)行數(shù)據(jù)的組織和識(shí)別,但是Hive并不確保數(shù)據(jù)的分區(qū)組織。分區(qū)列是虛擬列,它們不是數(shù)據(jù)本身的一部分,而是在加載時(shí)派生的。這也就要求數(shù)據(jù)倉(cāng)庫系統(tǒng)設(shè)計(jì)和分區(qū)數(shù)據(jù)導(dǎo)入前能夠?qū)?shù)據(jù)進(jìn)行一定的檢查,從而確保數(shù)據(jù)能夠在邏輯上滿足分區(qū)的設(shè)置。桶或集群(bucket或clusters)每個(gè)分區(qū)中的數(shù)據(jù)可以根據(jù)表中某一列的哈希函數(shù)值依次分配到桶。例如,page_views表可以由userid來分隔,userid是page_view表的一列,而不是partitions列。桶的應(yīng)用會(huì)大大加快數(shù)據(jù)的檢索速度。Hive初探03Hive初探Hive安裝完成后,首先把$HIVE_HOME設(shè)置到當(dāng)前的Hive安裝目錄,并把$HIVE_HOME/bin加入$PATH中。設(shè)置完成后在命令行直接運(yùn)行“hive”命令啟動(dòng)Hive。接下來我們開始構(gòu)造第一個(gè)Hive數(shù)據(jù)庫。Hive初探首先,我們通過ssh連接到Hive服務(wù)器上,之后運(yùn)行hive,便會(huì)進(jìn)入Hive的命令行交互程序,其運(yùn)行過程如下。若在本機(jī)上,則無須使用ssh連接Hive初探步驟1:構(gòu)造Database/SchemaHive初探用CLI和Web方式查看所創(chuàng)建的數(shù)據(jù)庫文件夾,其中“db_city_aq.db”雖然包含了“.db”作為后綴,但其實(shí)際上是一個(gè)文件夾。當(dāng)前并未往數(shù)據(jù)庫中添加任何數(shù)據(jù)表,所以文件夾為空。Hive初探采用Web方式查看數(shù)據(jù)庫文件夾Hive初探步驟2:創(chuàng)建數(shù)據(jù)表首先利用USE命令把“db_city_aq”設(shè)置為當(dāng)前的數(shù)據(jù)庫,以保證我們所創(chuàng)建的數(shù)據(jù)表包含在該數(shù)據(jù)庫中。之后,利用“CREATETABLE”創(chuàng)建一個(gè)數(shù)據(jù)表數(shù)據(jù)表創(chuàng)建完成后,利用SHOW命令查看數(shù)據(jù)庫中的數(shù)據(jù)表Hive初探Hive初探步驟3:數(shù)據(jù)文件的加載,并確認(rèn)Hive初探步驟4:數(shù)據(jù)的插入操作Hive初探步驟5:數(shù)據(jù)的查詢,分組求平均值Hive初探本節(jié)內(nèi)容完整的展示了一個(gè)Hive數(shù)據(jù)庫創(chuàng)建、數(shù)據(jù)表創(chuàng)建并導(dǎo)入數(shù)據(jù)、以及數(shù)據(jù)查看的整個(gè)流程,希望這個(gè)簡(jiǎn)單的Hive應(yīng)用過程能夠讓讀者對(duì)Hive形成直觀認(rèn)識(shí),使其不再是抽象的概念。接下來的章節(jié)中將對(duì)Hive的數(shù)據(jù)定義語言、數(shù)據(jù)操縱語言和數(shù)據(jù)查詢語言逐一展開介紹。Hive的數(shù)據(jù)定義—DDL04Hive的數(shù)據(jù)定義--DDLHive的數(shù)據(jù)定義主要通過其數(shù)據(jù)定義語言(DDL:DataDefinitionLanguage)完成。DDL中的主要操作包括CREATE、DROP、SHOW、TRUNCATE、DESCRIBE、ALTER等,其操作對(duì)象可以是DATABASE,SCHEME,TABLE,VIEW等。數(shù)據(jù)庫的相關(guān)操作1.創(chuàng)建數(shù)據(jù)庫創(chuàng)建Database的操作命令是CREATE,其語法定義如下:CREATE(DATABASE|SCHEMA)[IFNOTEXISTS]database_name[COMMENTdatabase_comment][LOCATIONhdfs_path][MANAGEDLOCATIONhdfs_path][WITHDBPROPERTIES(property_name=property_value,...)]數(shù)據(jù)庫的相關(guān)操作【例6.1】通過指定外部表存儲(chǔ)位置的方法建立城市空氣質(zhì)量數(shù)據(jù)庫“db_city_aq”,同時(shí)為該數(shù)據(jù)庫增加說明文字。數(shù)據(jù)庫的相關(guān)操作通過show查看Hive中的數(shù)據(jù)庫,從查詢結(jié)果中可以看到剛剛創(chuàng)建的數(shù)據(jù)庫db_city_aq數(shù)據(jù)庫的相關(guān)操作再通過HDFS文件系統(tǒng)上查看數(shù)據(jù)庫對(duì)應(yīng)的文件生成情況,利用ls查看hdfs上的文件夾發(fā)現(xiàn)數(shù)據(jù)庫db_city_aq對(duì)應(yīng)的目錄數(shù)據(jù)庫的相關(guān)操作2.刪除數(shù)據(jù)庫刪除數(shù)據(jù)庫的命令是DROP,其語法定義如下:DROP(DATABASE|SCHEMA)[IFEXISTS]database_name[RESTRICT|CASCADE];[RESTRICT|CASCADE]選項(xiàng)沒有明確指定時(shí),缺省值是RESTRICE,表示數(shù)據(jù)庫不為空時(shí)不能刪除數(shù)據(jù)庫;若指定為CASCADE,則會(huì)級(jí)聯(lián)刪除數(shù)據(jù)庫中的所有數(shù)據(jù)表,因此應(yīng)慎重使用。數(shù)據(jù)庫的相關(guān)操作【例6.2】刪除空數(shù)據(jù)庫db_city_aq,再利用show命令查看現(xiàn)有數(shù)據(jù)庫,刪除成功。數(shù)據(jù)庫的相關(guān)操作3.使用數(shù)據(jù)庫使用數(shù)據(jù)庫USE命令的含義是指在交互操作過程中,使用該指令設(shè)置指定數(shù)據(jù)庫為當(dāng)前數(shù)據(jù)庫。其語法定義如下:USEdatabase_name;USEDEFAULT;DEFAULT是缺省情況下特指某個(gè)數(shù)據(jù)庫,可以用DEFAULT代替具體的DATABASE名稱,以方便使用。數(shù)據(jù)表的創(chuàng)建Hive的數(shù)據(jù)組織采用文件夾、文件的方式進(jìn)行,其數(shù)據(jù)文件存儲(chǔ)格式可以具體指定,例如文件存儲(chǔ)格式可以是:SEQUENCEFILE|TEXTFILE|RCFILE|ORC|PARQUET|AVRO|JSONFILE|INPUTFORMATinput_format_clsnameOUTPUTFORMAToutput_format_clsname。其中TEXTFILE為缺省文件格式,具體缺省值由hive.default.fileformat指定;JSONFILE文件格式需要Hive4.0.0及以上版本才能支持。數(shù)據(jù)表的創(chuàng)建內(nèi)部表與外部表(ManagedandExternalTables):缺省情況下,Hive創(chuàng)建的表都是內(nèi)部表(也稱管理表),即文件、元數(shù)據(jù)和相關(guān)統(tǒng)計(jì)信息由Hive進(jìn)行管理和處理,內(nèi)部表刪除后,相關(guān)數(shù)據(jù)文件也將被刪除;外部表是指所創(chuàng)建的數(shù)據(jù)表存放在非Hive的缺省存儲(chǔ)位置,Hive維護(hù)指向該外部數(shù)據(jù)文件的鏈接,外部表常被多個(gè)應(yīng)用共享,從而避免數(shù)據(jù)表被誤刪除。刪除內(nèi)部表會(huì)直接刪除元數(shù)據(jù)及存儲(chǔ)數(shù)據(jù),刪除外部表則僅僅刪除元數(shù)據(jù),HDFS上的文件并不會(huì)被刪除;對(duì)內(nèi)部表的修改會(huì)將修改直接同步給元數(shù)據(jù),而對(duì)外部表的表結(jié)構(gòu)和分區(qū)進(jìn)行修改,則需要修復(fù)(MSCKREPAIRTABLEtable_name)。Hive基本數(shù)據(jù)類型數(shù)據(jù)表的創(chuàng)建1.創(chuàng)建數(shù)據(jù)表的核心語法定義數(shù)據(jù)表的創(chuàng)建【例6.4】如下創(chuàng)建一個(gè)內(nèi)部表,并在創(chuàng)建完成后查看其對(duì)應(yīng)的文件夾。數(shù)據(jù)表的創(chuàng)建2.創(chuàng)建帶分區(qū)的數(shù)據(jù)表【例6.5】假設(shè)數(shù)據(jù)包含五列(cdate4query,chour,aq_type,city,value)為了創(chuàng)建基于cdate的分區(qū)表,在數(shù)據(jù)表中以"cdate4query"作為列名,確保cdate屬性可以同時(shí)用于分區(qū)和查詢。若在數(shù)據(jù)表中沒有以"cdate4query"作為列名設(shè)置對(duì)日期進(jìn)行存儲(chǔ),那么對(duì)該數(shù)據(jù)表進(jìn)行查詢時(shí),將不會(huì)返回對(duì)應(yīng)日期值。若有查詢包含條件"WHEREdate='...'",Hive將會(huì)利用分區(qū)加快查詢效率,同時(shí)列"cdate4query"將會(huì)返回date的原有值。數(shù)據(jù)表的創(chuàng)建分區(qū)的插入數(shù)據(jù)insertoverwritetablecity_aq_with_partitionpartition(cdate='2021-01-01')values('20210303',0,'AQI','fuzhou',40);數(shù)據(jù)表的創(chuàng)建3.利用Select查詢創(chuàng)建數(shù)據(jù)表Hive數(shù)據(jù)表也可以通過查詢創(chuàng)建(create-table-as-select:CTAS)操作進(jìn)行創(chuàng)建。由CTAS創(chuàng)建數(shù)據(jù)表的過程是一個(gè)執(zhí)行事務(wù)的過程,無論該表有多大,數(shù)據(jù)表只有在生成所有查詢結(jié)果并創(chuàng)建表完成后才對(duì)其他用戶可見,這一執(zhí)行過程對(duì)其他用戶而言是透明的。數(shù)據(jù)表的創(chuàng)建【例6.6】利用Hive初探中的city_aq數(shù)據(jù)表為藍(lán)本,所導(dǎo)入數(shù)據(jù)為全部城市空氣質(zhì)量數(shù)據(jù),使用CTAS創(chuàng)建一個(gè)chour=10的數(shù)據(jù)表city_aq_hour10數(shù)據(jù)表的創(chuàng)建4.利用Like創(chuàng)建數(shù)據(jù)表CREATETABLE中的LIKE選項(xiàng)讓用戶可以用源數(shù)據(jù)表結(jié)構(gòu)為模板創(chuàng)建一個(gè)具有相同表結(jié)構(gòu)的新表,而不復(fù)制源數(shù)據(jù)表的數(shù)據(jù)?!纠?.7】使用Like方式復(fù)制了city_aq數(shù)據(jù)表結(jié)構(gòu),新建的tbl_create_like表結(jié)構(gòu)與之相同,但不復(fù)制源表中的數(shù)據(jù)。應(yīng)用Like方式創(chuàng)建新數(shù)據(jù)表,并利用DESC查看新建數(shù)據(jù)表的結(jié)構(gòu)數(shù)據(jù)表的創(chuàng)建數(shù)據(jù)表的創(chuàng)建5.創(chuàng)建臨時(shí)表(TemporaryTables)若一個(gè)表是作為臨時(shí)表創(chuàng)建的,那么該表只在當(dāng)前會(huì)話期間可見,其數(shù)據(jù)被存儲(chǔ)于用戶的臨時(shí)文件夾中,并在會(huì)話結(jié)束后刪除。若臨時(shí)表的表名與數(shù)據(jù)庫已有的永久表的表名相同,那么在這一會(huì)話期間,用戶無法訪問已有的永久表,所有對(duì)同名表的訪問都會(huì)被導(dǎo)向臨時(shí)表。當(dāng)臨時(shí)表被刪除后,才能恢復(fù)對(duì)永久表的訪問指向。與永久表相比,臨時(shí)表有其自身特征:(1)不支持分區(qū);(2)不支持索引。臨時(shí)表的存儲(chǔ)位置可以通過hive.exec.temporary.table.storage配置參數(shù)設(shè)置。數(shù)據(jù)表的創(chuàng)建【例6.8】如下應(yīng)用中創(chuàng)建臨時(shí)數(shù)據(jù)表數(shù)據(jù)表的創(chuàng)建6.表的約束Hive包括未驗(yàn)證的主鍵和外鍵約束的支持。當(dāng)存在約束時(shí),一些SQL工具將會(huì)生成更加高效的查詢。同時(shí),由于這些約束未經(jīng)驗(yàn)證,因此相關(guān)系統(tǒng)需要確保數(shù)據(jù)被載入Hive前的完整性。對(duì)Hive進(jìn)行數(shù)據(jù)檢索時(shí),Hive的約束將會(huì)被用于提高Hive數(shù)據(jù)的查詢優(yōu)化,從而提高數(shù)據(jù)檢索的效率。列約束定義包含主鍵約束、唯一值約束、非空約束等,相關(guān)約束及其定義如下:column_constraint_specification:[PRIMARYKEY|UNIQUE|NOTNULL|DEFAULT[default_value]|CHECK[check_expression]ENABLE|DISABLENOVALIDATERELY/NORELY]數(shù)據(jù)表的創(chuàng)建【例6.9】創(chuàng)建表tbl_pk,其中包含(id1,id2)共同組成該表的primarykey。數(shù)據(jù)表的創(chuàng)建【例6.10】創(chuàng)建表tbl_fk,其中包含外鍵約束關(guān)聯(lián)到tbl_pk表數(shù)據(jù)表和分區(qū)的修改通過ALTER命令可以修改現(xiàn)有數(shù)據(jù)表的結(jié)構(gòu),具體包括增加數(shù)據(jù)列、增加分區(qū)、修改SerDe、增加數(shù)據(jù)表屬性、修改表名等等。類似的,利用ALTER可以修改數(shù)據(jù)表的分區(qū)屬性。數(shù)據(jù)表和分區(qū)的修改1.?dāng)?shù)據(jù)表的修改用法1修改數(shù)據(jù)表名通過ALTERTABLE操作命令,可以修改數(shù)據(jù)表的名稱。數(shù)據(jù)表更名操作不但會(huì)修改數(shù)據(jù)表在Hive中的元數(shù)據(jù)信息,也將更改該數(shù)據(jù)表在HDFS中的存儲(chǔ)位置。ALTERTABLEtable_nameRENAMETOnew_table_name;數(shù)據(jù)表和分區(qū)的修改用法2修改數(shù)據(jù)表的屬性通過ALTERTABLE操作命令可以修改數(shù)據(jù)表的屬性,其中數(shù)據(jù)表的定義為(property_name=property_value,...),因此可以一次性更改多個(gè)數(shù)據(jù)表的屬性值。當(dāng)然,也可以為數(shù)據(jù)表增加新的屬性。所有數(shù)據(jù)表的擴(kuò)展屬性都可以通過“DESCRIBEEXTENDEDTABLE”查看。ALTERTABLEtable_nameSETTBLPROPERTIES(‘db_pro1’=’pro1_value’);數(shù)據(jù)表和分區(qū)的修改用法3修改數(shù)據(jù)表說明通過ALTERTABLE操作命令,可以修改/設(shè)置數(shù)據(jù)表的說明信息。ALTERTABLEtable_nameSETTBLPROPERTIES('comment'=new_comment);數(shù)據(jù)表和分區(qū)的修改2.修改數(shù)據(jù)表約束用法1修改數(shù)據(jù)表的主鍵約束(PRIMARYKEY)ALTERTABLEtable_nameADDCONSTRAINTconstraint_namePRIMARYKEY(column,...)DISABLENOVALIDATE;數(shù)據(jù)表和分區(qū)的修改【例6.16】如下操作先創(chuàng)建一個(gè)數(shù)據(jù)表,之后利用ALTERTABLE增加主鍵約束數(shù)據(jù)表和分區(qū)的修改用法2修改數(shù)據(jù)表的外鍵約束(FOREIGNKEY)ALTERTABLEtable_nameADDCONSTRAINTconstraint_nameFOREIGNKEY(column,...)REFERENCEStable_name(column,...)DISABLENOVALIDATERELY;用法3修改數(shù)據(jù)表的唯一性設(shè)置(UNIQUE)ALTERTABLEtable_nameADDCONSTRAINTconstraint_nameUNIQUE(column,...)DISABLENOVALIDATE;用法4修改數(shù)據(jù)表的非空值約束(NOTNULL)ALTERTABLEtable_nameCHANGECOLUMNcolumn_namecolumn_namedata_typeCONSTRAINTconstraint_nameNOTNULLENABLE;數(shù)據(jù)表和分區(qū)的修改用法5修改數(shù)據(jù)表的缺省值約束(DEFAULT)ALTERTABLEtable_nameCHANGECOLUMNcolumn_namecolumn_namedata_typeCONSTRAINTconstraint_nameDEFAULTdefault_valueENABLE;用法6修改數(shù)據(jù)表的檢查約束(CHECK)ALTERTABLEtable_nameCHANGECOLUMNcolumn_namecolumn_namedata_typeCONSTRAINTconstraint_nameCHECKcheck_expressionENABLE;用法7刪除數(shù)據(jù)表的約束(DROPCONSTRAINT)ALTERTABLEtable_nameDROPCONSTRAINTconstraint_name;數(shù)據(jù)表和分區(qū)的修改3.修改分區(qū)設(shè)置通過ALTERTABLE的PARTITION子句可以對(duì)數(shù)據(jù)表的分區(qū)進(jìn)行修改、增加、改名、移動(dòng)、刪除、存檔等操作。要使元存儲(chǔ)感知添加到HDFS的分區(qū),可以使用元存儲(chǔ)檢查命令(MSCK)進(jìn)行數(shù)據(jù)刷新。數(shù)據(jù)表和分區(qū)的修改用法1:添加新分區(qū)使用下述ALTERTABLEADDPARTITION指令可以增加數(shù)據(jù)表的分區(qū)。其中的分區(qū)值是字符串類型時(shí),需要用單引號(hào)包括,分區(qū)存儲(chǔ)位置必須是數(shù)據(jù)文件所在文件夾。ADDPARTITION會(huì)修改數(shù)據(jù)表的元數(shù)據(jù),但是不會(huì)實(shí)現(xiàn)已有數(shù)據(jù)的重新分區(qū),如果在指定分區(qū)位置不存在對(duì)應(yīng)數(shù)據(jù),那么查詢將不會(huì)返回任何結(jié)果。ALTERTABLEtable_nameADD[IFNOTEXISTS]PARTITIONpartition_spec[LOCATION'location'][,PARTITIONpartition_spec[LOCATION'location'],...];partition_spec:(partition_column=partition_col_value,...)數(shù)據(jù)表和分區(qū)的修改【例6.23】如下實(shí)例首先創(chuàng)建一個(gè)page_view數(shù)據(jù)表,該數(shù)據(jù)表設(shè)置了基于日期dt和國(guó)家country的分區(qū)。之后使用ALTERTABLEADDPARTITION指令在數(shù)據(jù)表中手動(dòng)添加多個(gè)分區(qū),并設(shè)置其對(duì)應(yīng)的文件夾。下列只列出一種用法,其余可參考教材。數(shù)據(jù)表和分區(qū)的修改數(shù)據(jù)表和分區(qū)的修改4.修改數(shù)據(jù)表/分區(qū)本小節(jié)上述內(nèi)容介紹了適用于修改數(shù)據(jù)表和修改數(shù)據(jù)分區(qū)的操作命令,這里介紹的操作指令既適用于數(shù)據(jù)表的修改,也適用于分區(qū)的修改。數(shù)據(jù)表和分區(qū)的修改用法1修改表/分區(qū)文件格式該命令用于修改數(shù)據(jù)表/分區(qū)的文件存儲(chǔ)格式,其可用的file_format選項(xiàng)可以參考CREATETABLE中的文件類型。該命令的修改僅僅作用于數(shù)據(jù)表的元數(shù)據(jù)中,對(duì)文件的實(shí)際數(shù)據(jù)格式修改需要在Hive外進(jìn)行數(shù)據(jù)轉(zhuǎn)換。具體命令如下:ALTERTABLEtable_name[PARTITIONpartition_spec]SETFILEFORMATfile_format;用法2修改表/分區(qū)存儲(chǔ)位置ALTERTABLEtable_name[PARTITIONpartition_spec]SETLOCATION"newlocation";數(shù)據(jù)表和分區(qū)的修改用法3修改表/分區(qū)的保護(hù)機(jī)制對(duì)數(shù)據(jù)的保護(hù)可以設(shè)置于表級(jí)別,也可以設(shè)置于分區(qū)級(jí)別。NO_DROP選項(xiàng)將會(huì)確保數(shù)據(jù)表不被刪除,OFFLINE選項(xiàng)則使得數(shù)據(jù)表/分區(qū)中的數(shù)據(jù)被檢索,而他們的元數(shù)據(jù)仍可被存取訪問。若某個(gè)分區(qū)被設(shè)置為NO_DROP,那么該分區(qū)所在的表也將是不可刪除的;相反,若數(shù)據(jù)表是NO_DROP的,其包含的分區(qū)是可刪除的;若數(shù)據(jù)表設(shè)置為NO_DROPCASCADE,那么其分區(qū)不能被刪除;若要強(qiáng)制刪除分區(qū),則可以使用IGNOREPROTECTION選項(xiàng)。修改數(shù)據(jù)表/分區(qū)的保護(hù)機(jī)制的操作命令如下。ALTERTABLEtable_name[PARTITIONpartition_spec]ENABLE|DISABLENO_DROP[CASCADE];ALTERTABLEtable_name[PARTITIONpartition_spec]ENABLE|DISABLEOFFLINE;數(shù)據(jù)表和分區(qū)的修改5.修改數(shù)據(jù)列注意:Hive中的列名是大小寫敏感的用法1修改列名/類型/存儲(chǔ)位置/說明如下命令允許用戶修改列名、列數(shù)據(jù)類型、說明文字、存儲(chǔ)位置,或者上述屬性的組合情況。CASCADE關(guān)鍵字使得數(shù)據(jù)表元數(shù)據(jù)中的列屬性同時(shí)傳遞變化到所有分區(qū)元數(shù)據(jù)中。RESTRICT為缺省值,限制列的改變只作用于表的元數(shù)據(jù)。ALTERTABLEtable_name[PARTITIONpartition_spec]CHANGE[COLUMN]col_old_namecol_new_namecolumn_type[COMMENTcol_comment][FIRST|AFTERcolumn_name][CASCADE|RESTRICT];數(shù)據(jù)表和分區(qū)的修改【例6.26】如下實(shí)例首先創(chuàng)建一個(gè)簡(jiǎn)單的數(shù)據(jù)表,之后對(duì)其數(shù)據(jù)表的屬性進(jìn)行修改,并調(diào)整位置數(shù)據(jù)表和分區(qū)的修改用法2:添加/替換數(shù)據(jù)列需要添加/替換數(shù)據(jù)列時(shí),可以使用如下操作命令:ALTERTABLEtable_name[PARTITIONpartition_spec]ADD|REPLACECOLUMNS(col_namedata_type[COMMENTcol_comment],...)[CASCADE|RESTRICT]數(shù)據(jù)表的其他操作1.表的刪除DROPTABLE用于刪除數(shù)據(jù)表以及相關(guān)元數(shù)據(jù),其中數(shù)據(jù)表會(huì)被移除到垃圾箱中(系統(tǒng)設(shè)定垃圾箱的前提下),而元數(shù)據(jù)則直接從Hive中刪除。若在刪除數(shù)據(jù)表時(shí)指定了PURGE參數(shù),則會(huì)把數(shù)據(jù)文件直接清除,不可恢復(fù)。刪除數(shù)據(jù)表的語法如下:DROPTABLE[IFEXISTS]table_name[PURGE];數(shù)據(jù)表的其他操作2.表的截?cái)嗯c刪除表不同,截?cái)啾碛糜趧h除表或者分區(qū)中的全部數(shù)據(jù),若設(shè)定了垃圾箱,則數(shù)據(jù)會(huì)被移除到垃圾箱中,否則直接刪除。被截?cái)嗟臄?shù)據(jù)表要求為內(nèi)部表,用戶也可以通過partition_spec來截?cái)嗵囟ǖ姆謪^(qū),移除指定的分區(qū)。缺省情況下,TRUNCATE將會(huì)刪除所有數(shù)據(jù),其定義如下:TRUNCATE[TABLE]table_name[PARTITIONpartition_spec];partition_spec::(partition_column=partition_col_value,partition_column=partition_col_value,...)數(shù)據(jù)表的其他操作3.SHOW命令SHOW提供了一種查看Hive中數(shù)據(jù)的元存儲(chǔ)信息及元數(shù)據(jù)的方法。SHOW命令的詳細(xì)用法請(qǐng)查閱教材數(shù)據(jù)表的其他操作4.Describe命令DESCRIBE命令也是用于顯示數(shù)據(jù)庫、表等基本元素的相關(guān)信息。但是與SHOW不同,DESCRIBE更加側(cè)重從更高的層次上查看總體數(shù)據(jù)情況。DESCRIBE命令的詳細(xì)用法請(qǐng)查閱教材。Hive的數(shù)據(jù)操縱—DML05Hive的數(shù)據(jù)操縱--DMLHive的數(shù)據(jù)操縱主要通過其數(shù)據(jù)操作語言(DML:DataManipulationLanguage)完成,DML中包含有LOAD、INSERT、UPDATE、DELETE、IMPORT/EXPORT、…等。下面將對(duì)其中一些常用命令進(jìn)行介紹。Hive的數(shù)據(jù)操縱--DML1.加載數(shù)據(jù)文件到表(Load)Hive將數(shù)據(jù)文件加載到表時(shí)不進(jìn)行任何轉(zhuǎn)換,其加載操作是一種復(fù)制/移動(dòng)操作,即將數(shù)據(jù)文件移動(dòng)到與Hive表對(duì)應(yīng)的位置。其語法格式如下:LOADDATA[LOCAL]INPATH'filepath'[OVERWRITE]INTOTABLEtablename[PARTITION(partcol1=val1,partcol2=val2...)][INPUTFORMAT'inputformat'SERDE'serde']Hive的數(shù)據(jù)操縱--DML2.把檢索結(jié)果存入表(Insert)除了可以直接把文件加載到表中,Hive還提供把檢索結(jié)果插入表的操作(Insert),該操作的語法如下:語法格式1:INSERTOVERWRITETABLEtablename1[PARTITION(partcol1=val1,partcol2=val2...)[IFNOTEXISTS]]select_statement1FROMfrom_statement;Hive的數(shù)據(jù)操縱--DML2.把檢索結(jié)果存入表(Insert)Hive擴(kuò)展2(多表插入語句):FROMfrom_statementINSERTINTOTABLEtablename1[PARTITION(partcol1=val1,partcol2=val2...)]select_statement1[INSERTINTOTABLEtablename2[PARTITION...]select_statement2][INSERTOVERWRITETABLEtablename2[PARTITION...[IFNOTEXISTS]]select_statement2]...;Hive的數(shù)據(jù)操縱--DML3.把檢索結(jié)果導(dǎo)出到文件(Insert)Hive的檢索結(jié)果可以導(dǎo)出到文件系統(tǒng)中保存成文件,其具體命令與Insert到數(shù)據(jù)表的命令應(yīng)用類似,其語法定義如下:標(biāo)準(zhǔn)語法:INSERTOVERWRITE[LOCAL]DIRECTORYdirectory1[ROWFORMATrow_format][STOREDASfile_format]SELECT...FROM...Hive的數(shù)據(jù)操縱--DML3.把檢索結(jié)果導(dǎo)出到文件(Insert)Hive的檢索結(jié)果可以導(dǎo)出到文件系統(tǒng)中保存成文件,其具體命令與Insert到數(shù)據(jù)表的命令應(yīng)用類似,其語法定義如下:Hive擴(kuò)展語法:FROMfrom_statementINSERTOVERWRITE[LOCAL]DIRECTORYdirectory1select_statement1[INSERTOVERWRITE[LOCAL]DIRECTORYdirectory2select_statement2]...Hive的數(shù)據(jù)操縱--DML4.利用SQL的INSERTINTO把數(shù)據(jù)插入表除了支持將數(shù)據(jù)文件以及Hive檢索結(jié)果數(shù)據(jù)插入表外,Hive還支持SQL的INSERTINTO實(shí)現(xiàn)Hive數(shù)據(jù)插入。其語法定義如下:INSERTINTOTABLEtablename[PARTITION(partcol1[=val1],partcol2[=val2]...)]VALUESvalues_row[,values_row...]values_row=(value[,value...])Hive的數(shù)據(jù)操縱--DML5.?dāng)?shù)據(jù)更新操作(Update)Hive表的數(shù)據(jù)更新操作僅可用于支持ACID的表。其語法定義如下:UPDATEtablenameSETcolumn=value[,column=value...][WHEREexpression]Hive的數(shù)據(jù)操縱--DML6.?dāng)?shù)據(jù)刪除操作(Delete)與Update操作一樣,Delete只能應(yīng)用于支持ACID的表中。其語法格式為:DELETEFROMtablename[WHEREexpression]Hive的數(shù)據(jù)操縱--DML7.?dāng)?shù)據(jù)合并操作(Merge)合并(MERGE)操作是指利用與源數(shù)據(jù)表的連接結(jié)果更新目標(biāo)數(shù)據(jù)表的操作,該操作也僅可用于支持ACID的表上,其語法格式如下:MERGEINTO<targettable>ASTUSING<sourceexpression/table>ASSON<booleanexpression1>WHENMATCHED[AND<booleanexpression2>]THENUPDATESET<setclauselist>WHENMATCHED[AND<booleanexpression3>]THENDELETEWHENNOTMATCHED[AND<booleanexpression4>]THENINSERTVALUES<valuelist>Hive的數(shù)據(jù)檢索—Hive-QL06Hive的數(shù)據(jù)檢索—Hive-QL在完成本小結(jié)內(nèi)容前,我們新增兩個(gè)數(shù)據(jù)表到數(shù)據(jù)庫中,分別對(duì)應(yīng)空氣質(zhì)量檢測(cè)站點(diǎn)信息,以及站點(diǎn)采集數(shù)據(jù)的原始數(shù)據(jù),其建表和數(shù)據(jù)導(dǎo)入過程請(qǐng)參考教科書。上述過程完成后,將會(huì)建立連個(gè)數(shù)據(jù)表(tbl_sites,tbl_site_data),并且導(dǎo)入一定數(shù)量的數(shù)據(jù)。Hive的數(shù)據(jù)檢索—Hive-QLHiveQL提供數(shù)據(jù)檢索的功能。其具體語法如下,H-QL中還提供了部分特有的檢索功能,我們將結(jié)合該操作命令的語法進(jìn)行介紹。SELECT[ALL|DISTINCT]select_expr,select_expr,...FROMtable_reference[WHEREwhere_condition][GROUPBYcol_list][ORDERBYcol_list][CLUSTERBYcol_list|[DISTRIBUTEBYcol_list][SORTBYcol_list]][LIMIT[offset,]rows]Hive的數(shù)據(jù)檢索—Hive-QL(1)SELECTFROM關(guān)于SELECT檢索,其中的FROMtable_reference表示查詢操作的輸入表,這些輸入除了一般的數(shù)據(jù)表外,還可以是一個(gè)視圖、一個(gè)join構(gòu)造,或者一個(gè)子查詢。需要注意的是,Hive查詢語句中的表名和列名是大小寫相關(guān)的。Hive的數(shù)據(jù)檢索—Hive-QL如下檢索只返回PM2.5的相關(guān)測(cè)量數(shù)值,并指定了返回列。Hive的數(shù)據(jù)檢索—Hive-QL(2)WHEREWHERE表示查詢條件,其后連接的是一個(gè)布爾表達(dá)式,例如如下查詢將會(huì)返回?cái)?shù)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論