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

下載本文檔

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

文檔簡介

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

據(jù)

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

據(jù)

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

據(jù)

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

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論