版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
廣電用戶數(shù)據(jù)存儲任務背景新媒體的飛速發(fā)展,對傳統(tǒng)媒體造成了巨大沖擊。日益復雜、激烈的競爭,使得廣電公司的用戶流失問題變得異常突出。廣電公司需要通過大數(shù)據(jù)分析技術(shù),把握用戶群體的特征和收視行為,了解用戶的實際特征和實際需求。在進行數(shù)據(jù)分析之前,需要對廣電業(yè)務數(shù)據(jù)進行存儲操作,以奠定基礎(chǔ)。本章將介紹如何將數(shù)據(jù)存儲在Hive中,并結(jié)合廣電業(yè)務實現(xiàn)創(chuàng)建廣電數(shù)據(jù)庫和業(yè)務數(shù)據(jù)表、將業(yè)務數(shù)據(jù)從CSV文件中導入Hive表。創(chuàng)建業(yè)務數(shù)據(jù)表將數(shù)據(jù)導入Hive表中任務描述只有在Hive中創(chuàng)建了相關(guān)的業(yè)務數(shù)據(jù)表,才能進行業(yè)務數(shù)據(jù)的導入和后續(xù)的分析工作。本任務主要介紹Hive數(shù)據(jù)庫的創(chuàng)建與管理、Hive的數(shù)據(jù)類型、Hive表的創(chuàng)建與管理,以及結(jié)合廣電業(yè)務數(shù)據(jù)類型,設計表的結(jié)構(gòu),并在Hive中創(chuàng)建相應的業(yè)務數(shù)據(jù)表。操作Hive數(shù)據(jù)庫在Hive中數(shù)據(jù)庫本質(zhì)上是表的目錄或命名空間,可通過數(shù)據(jù)庫將表組織成邏輯組。這對于具有很多組和用戶的大集群來說,可以有效避免表命名沖突。HQL是Hive查詢語言,和普遍使用的SQL一樣,它不完全遵守任何一種ANSISQL標準的修訂版。Hive不支持行級插入操作、更新操作和刪除操作,也不支持事務?;贖adoop,Hive可以提供更高性能的擴展,以及一些個性化的擴展,甚至還增加了一些外部程序。Hive數(shù)據(jù)定義語言(DataDefinitionLanguage,DDL)可用于創(chuàng)建、修改和刪除數(shù)據(jù)庫、表、視圖、函數(shù)和索引。對數(shù)據(jù)庫的操作主要包括數(shù)據(jù)庫的創(chuàng)建與管理,管理操作包括切換、修改、刪除等。操作Hive數(shù)據(jù)庫1.創(chuàng)建數(shù)據(jù)庫用戶可使用CREATE語句創(chuàng)建數(shù)據(jù)庫。CREATE(DATABASE|SCHEMA)[IFNOTEXISTS][database_name][COMMENTdatabase_comment][LOCATIONhdfs_path][WITHDBPROPERTIES(property_name=property_value,...)];操作Hive數(shù)據(jù)庫CREATE語句的部分關(guān)鍵字介紹如下表。關(guān)鍵字說明CREATE(DATABASE|SCHEMA)該關(guān)鍵字表示創(chuàng)建一個新數(shù)據(jù)庫,其中DATABASE和SCHEMA關(guān)鍵字的功能相同,按個人習慣選擇其中一個即可,本書統(tǒng)一使用DATABASEIFNOTEXISTS該關(guān)鍵字是可選的,使用該關(guān)鍵字可以避免因數(shù)據(jù)庫已存在而拋出異常的情況COMMENT該關(guān)鍵字是可選的,表示可以給數(shù)據(jù)庫加上描述,類似于注釋LOCATION該關(guān)鍵字是可選的,表示在創(chuàng)建數(shù)據(jù)庫時指定該數(shù)據(jù)庫映射到HDFS的文件路徑,數(shù)據(jù)庫所在的目錄位置為hive-site.xml文件屬性hive.metastore.warehouse.dir所指定的頂層目錄的下一級,默認是映射到/user/hive/warehouse目錄下WITHDBPROPERTIES該關(guān)鍵字是可選的,可用于設置數(shù)據(jù)庫的屬性,如添加創(chuàng)建人、創(chuàng)建時間等操作Hive數(shù)據(jù)庫例如,創(chuàng)建數(shù)據(jù)庫TestDB,同時使用IFNOTEXISTS關(guān)鍵字避免因數(shù)據(jù)庫已存在而拋出異常,在創(chuàng)建完成后使用“SHOWDATABASES;”命令查看Hive中所有數(shù)據(jù)庫,運行結(jié)果如下圖。其中,DEFAULT數(shù)據(jù)庫是默認的數(shù)據(jù)庫,且需要注意的是,在Hive環(huán)境中,HQL對大小寫不敏感,但為了美觀和方便閱讀,在本書中,HQL語句的關(guān)鍵字采用大寫的形式。操作Hive數(shù)據(jù)庫Hive會為每個數(shù)據(jù)庫創(chuàng)建一個目錄。數(shù)據(jù)庫中的表將會以該數(shù)據(jù)庫目錄的子目錄形式存儲。有一個例外就是DEFAULT數(shù)據(jù)庫中的表,DEFAULT數(shù)據(jù)庫沒有存儲目錄,因此DEFAULT數(shù)據(jù)庫中的表將存儲在/user/hive/warehouse目錄下。當創(chuàng)建數(shù)據(jù)庫TestDB時,Hive將會對應地創(chuàng)建一個HDFS目錄/use/hive/warehouse/TestDB.db(數(shù)據(jù)庫文件的擴展名是.db)。在瀏覽器登錄“http://master:9870”,單擊“Utilities”,選擇“Browsethefilesystem”,查看“/use/hive/warehouse”,數(shù)據(jù)庫列表如下圖。操作Hive數(shù)據(jù)庫2.管理數(shù)據(jù)庫USE語句用于將某個數(shù)據(jù)庫設置為用戶當前的工作數(shù)據(jù)庫,與在文件系統(tǒng)中切換工作目錄類似,其語法介紹如下。USEdatabase_name;USEDEFAULT;操作Hive數(shù)據(jù)庫如果用戶沒有顯式指定數(shù)據(jù)庫,那么將會使用默認數(shù)據(jù)庫DEFAULT。在Hive中并沒有設置可以讓用戶查看當前所在的數(shù)據(jù)庫的語句,在不確認當前數(shù)據(jù)庫的情況下,可重復使用USE語句。同時可以通過設置hive.cli.print.current.db屬性值為true(Hive0.8.0以上版本支持設置),在提示符顯示當前所在的數(shù)據(jù)庫,如下圖。操作Hive數(shù)據(jù)庫用戶可以使用ALTER語句對數(shù)據(jù)庫的DBPROPERTIES設置鍵值對(Key-Value)等屬性值。ALTER(DATABASE|SCHEMA)database_nameSETDBPROPERTIES(property_name=property_value,...);--(Note:SCHEMAaddedinHive0.14.0)ALTER(DATABASE|SCHEMA)database_nameSETOWNER[USER|ROLE]user_or_role;--(Note:Hive0.13.0andlater;SCHEMAaddedinHive0.14.0)ALTER(DATABASE|SCHEMA)database_nameSETLOCATIONhdfs_path;--(Note:Hive2.2.1,2.4.0andlater)ALTER(DATABASE|SCHEMA)database_nameSETMANAGEDLOCATIONhdfs_path;--(Note:Hive4.0.0andlater)操作Hive數(shù)據(jù)庫需要注意的是其他元數(shù)據(jù)庫信息不可修改,如數(shù)據(jù)庫名和數(shù)據(jù)庫所在目錄。使用“ALTERDATABASE...SETLOCATION”不會將舊目錄的內(nèi)容移動到新的指定目錄下,僅會在增加新表時將新表存儲在新的指定目錄下。操作Hive數(shù)據(jù)庫用戶可使用DROP語句刪除數(shù)據(jù)庫。DROP(DATABASE|SCHEMA)[IFEXISTS]database_name[RESTRICT|CASCADE];DROP語句語法的部分關(guān)鍵字介紹如下表。關(guān)鍵字說明DROP(DATABASE|SCHEMA)表示刪除數(shù)據(jù)庫,DATABASE和SCHEMA的功能相同,本書統(tǒng)一使用DATABASEIFEXISTS可選,用于判斷數(shù)據(jù)庫是否存在RESTRICT|CASCADE可選,表示當數(shù)據(jù)庫中存在表時是否可以刪除數(shù)據(jù)庫,默認為RESTRICT,表示存在表時,不執(zhí)行刪除操作;CASCADE表示存在表時,仍執(zhí)行刪除操作了解Hive數(shù)據(jù)類型Hive數(shù)據(jù)類型主要分為基礎(chǔ)數(shù)據(jù)類型和復合數(shù)據(jù)類型?;A(chǔ)數(shù)據(jù)類型有數(shù)值類型(整型、浮點型)、時間類型、字符串類型、其他類型(布爾類型、二進制)等;復合數(shù)據(jù)類型有數(shù)組類型、映射類型、結(jié)構(gòu)體類型和聯(lián)合體類型等。Hive數(shù)據(jù)類型說明如下表。分類類型大類類型小類說明舉例基礎(chǔ)數(shù)據(jù)類型整型TINYINT1字節(jié)有符號整數(shù)20SMALLINT2字節(jié)有符號整數(shù)20INT4字節(jié)有符號整數(shù)20BIGINT8字節(jié)有符號整數(shù)20布爾類型BOOLEAN布爾值true了解Hive數(shù)據(jù)類型分類類型大類類型小類說明舉例基礎(chǔ)數(shù)據(jù)類型浮點型FLOAT單精度浮點數(shù)3.14159DOUBLE雙精度浮點數(shù)3.14159DECIMAL高精度浮點數(shù),精度為38位DECIMAL(12,2)NUMERIC同DECIMAL,從Hive3.0開始提供NUMERIC(20,2)字符串類型STRING、CHAR、VARCHAR字符串'helloworld'二進制BINARY字節(jié)數(shù)組01時間類型TIMESTAMP時間戳1327882394INTERVAL表示時間間隔INTERVAL'1'DAYDATE以年/月/日形式描述的日期,格式為YYYY-MM-DD2023-10-26了解Hive數(shù)據(jù)類型續(xù)上表分類類型大類類型小類說明舉例復合數(shù)據(jù)類型數(shù)組類型ARRAY一組有序字段,字段的數(shù)據(jù)的類型必須相同user[1]映射類型MAP一組無序的鍵值對,鍵的類型必須是基礎(chǔ)數(shù)據(jù)類型,值可以是任何類型的。同一個映射的鍵的類型必須相同,值的類型也必須相同user['name']STRUCT一組命名的字段,字段類型可以不同user.age結(jié)構(gòu)體類型聯(lián)合體類型UNIONTYPE在有限取值范圍內(nèi)的一個值{1:{"col1":2,"col2":"b"}}了解Hive數(shù)據(jù)類型1.基礎(chǔ)數(shù)據(jù)類型Hive的基礎(chǔ)數(shù)據(jù)類型也稱為原始數(shù)據(jù)類型,Hive的基礎(chǔ)數(shù)據(jù)類型都是參照Java接口進行定義的,具體使用細節(jié)和Java中相應類型基本一致,如STRING類型實現(xiàn)的是Java中的字符串(string),F(xiàn)LOAT類型實現(xiàn)的是Java定義的浮點數(shù)(float)。另外,值得注意的是,Hive中所有類型數(shù)據(jù)的定義名稱均為系統(tǒng)保留字,不可作為變量使用。了解Hive數(shù)據(jù)類型2.復合數(shù)據(jù)類型在關(guān)系數(shù)據(jù)庫中,字段的設計原則是通常不能再分解,且一般要滿足第一范式(一個關(guān)系模式中的所有屬性都是不可分的基礎(chǔ)數(shù)據(jù)項)要求,而Hive則有所不同,Hive的表字段不僅可以是基礎(chǔ)數(shù)據(jù)類型,還可以是復雜數(shù)據(jù)類型。Hive有4種常用的復雜數(shù)據(jù)類型,分別是數(shù)組(ARRAY)、映射(MAP)、結(jié)構(gòu)體(STRUCT)和聯(lián)合體(UNIONTYPE),相關(guān)說明如下。了解Hive數(shù)據(jù)類型2.復合數(shù)據(jù)類型ARRAYARRAY是具有相同類型變量的集合,集合內(nèi)的變量稱為數(shù)組元素,每個數(shù)組元素都有一個索引,索引從0開始。定義示例:ARRAY<STRING>。數(shù)據(jù)格式:'Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday'。使用示例:a[0]='Monday',a[2]='Wednesday。其中,a表示表字段名,該字段的類型為數(shù)組,允許存儲的數(shù)據(jù)數(shù)據(jù)為STRING,起始索引為0。了解Hive數(shù)據(jù)類型MAPMAP是鍵值對的集合,其中鍵只能是基礎(chǔ)數(shù)據(jù)類型,值可以是任意類型。定義示例:MAP<STRING,STRING>。數(shù)據(jù)格式:{'B':'Banana','W':Watermelon}。使用示例:b['B']='Banana'。其中,b表示表字段名,該字段的類型為映射,允許存儲一個<STRING,STRING>類型的鍵值對,直接按鍵名訪問即可。了解Hive數(shù)據(jù)類型STRUCTSTRUCT封裝了一組有名字的字段(NamedField),其類型可以是任意的基礎(chǔ)數(shù)據(jù)類型,結(jié)構(gòu)體內(nèi)的元素使用“.”來訪問。定義示例:STRUCT<fruit:STRING,weight:INT>。數(shù)據(jù)格式:{'Banana',10}。使用示例:c.weight=10。其中,c表示表字段名,該字段的類型為STRUCT,包含兩個元素“fruit”和“weight”,元素的訪問方式與在Java中訪問對象屬性的方式一致。了解Hive數(shù)據(jù)類型UNIONTYPE在給定的任意時刻,UNIONTYPE可以用于保存指定數(shù)據(jù)類型中的任意一種,類似于Java中的泛型,在任意時刻只有其中的一個類型生效。定義示例:UNIONTYPE<data_type,data_type,...>。UNIONTYPE數(shù)據(jù)類型是在Hive0.7.0中引入的,但Hive對此類型的完全支持仍然不完整。在JOIN、WHERE和GROUPBY子句中引用UNIONTYPE字段的查詢將失敗,并且Hive沒有定義語法用于提取UNIONTYPE的標記或值字段,這意味著UNIONTYPE實際上僅用于傳遞。創(chuàng)建與管理Hive表根據(jù)存儲位置,Hive表可分為內(nèi)部表(也稱為管理表)和外部表;根據(jù)表的分類方式,Hive表可分為分區(qū)表和分桶表;根據(jù)表的存活時間,Hive表可分為臨時表和永久表(如內(nèi)部表)。與Hive數(shù)據(jù)庫的操作類似,可通過DDL實現(xiàn)Hive表的創(chuàng)建、修改、刪除等操作。創(chuàng)建與管理Hive表1.創(chuàng)建表用戶可使用CREATE語句創(chuàng)建表。CREATE[TEMPORARY][EXTERNAL]TABLE[IFNOTEXISTS][db_name.]table_name[(col_namedata_type[column_constraint_specification][COMMENTcol_comment],...[constraint_specification])][COMMENTtable_comment][PARTITIONEDBY(col_namedata_type[COMMENTcol_comment],...)][CLUSTEREDBY(col_name,col_name,...)[SORTEDBY(col_name[ASC|DESC],...)]INTOnum_bucketsBUCKETS][ROWFORMATrow_format][STOREDASfile_format][LOCATIONhdfs_path]創(chuàng)建與管理Hive表CREATE語句的主要關(guān)鍵字說明如下表。關(guān)鍵字說明CREATETABLE用于創(chuàng)建指定名字的表。如果相同名字的表已經(jīng)存在,那么拋出異常,用戶可以用IFNOTEXISTS選項忽略該異常TEMPORARY用于創(chuàng)建臨時表。臨時表是Hive表的一種特殊形式,臨時表只對當前會話可見,被存儲在用戶的臨時目錄,并在會話結(jié)束時被刪除EXTERNAL用于創(chuàng)建外部表,在創(chuàng)建表的同時指定一個指向?qū)嶋H數(shù)據(jù)的路徑(LOCATION)。Hive在創(chuàng)建內(nèi)部表時,會將數(shù)據(jù)移動到Hive指向的路徑;若創(chuàng)建外部表,則僅記錄數(shù)據(jù)所在的路徑,不對數(shù)據(jù)的位置做任何改變PARTITIONEDBY用于創(chuàng)建分區(qū)表,使用該關(guān)鍵字時需要加上分區(qū)字段的名稱。一個表可以擁有一個或多個分區(qū),并根據(jù)分區(qū)字段中的每個值創(chuàng)建一個單獨的數(shù)據(jù)目錄。分區(qū)以字段的形式存在于表中,通過DESCRIBE語句可以查看字段,但是該字段不存放實際的數(shù)據(jù)內(nèi)容,僅僅是分區(qū)的表示創(chuàng)建與管理Hive表關(guān)鍵字說明CLUSTEREDBY用于創(chuàng)建桶表,使用該關(guān)鍵字時需要加上字段的名稱。對于每一個內(nèi)部表、外部表或分區(qū)表,Hive均可以進一步將其組織成桶,即桶是更細粒度的數(shù)據(jù)范圍劃分ROWFORMAT用于設置創(chuàng)建的表在加載數(shù)據(jù)時支持的列分隔符。Hive默認的分隔符是\001,屬于不可見字符STOREDAS如果文件數(shù)據(jù)是純文本,那么用戶可以使用STOREDASTEXTFILE語句。如果數(shù)據(jù)需要壓縮,那么用戶可以使用STOREDASSEQUENCEFILE語句LOCATION用于指定加載數(shù)據(jù)路徑(指定在HDFS上的位置)。針對外部表,創(chuàng)建時需要指定存儲路徑,不指定則使用默認路徑。對內(nèi)部表不用指定存儲路徑,默認存儲路徑為/user/hive/warehouse創(chuàng)建與管理Hive表Hive的5種數(shù)據(jù)表,即內(nèi)部表、外部表、分區(qū)表、桶表和臨時表的創(chuàng)建說明如下。(1)創(chuàng)建內(nèi)部表內(nèi)部表是Hive的默認表,表中的數(shù)據(jù)默認存儲在warehouse目錄中,當刪除表時,表中的數(shù)據(jù)和元數(shù)據(jù)會被同時刪除。內(nèi)部表是Hive中比較常見、基礎(chǔ)的表,表的創(chuàng)建方式與數(shù)據(jù)庫的創(chuàng)建方式大致相同,字段間的分隔符默認為制表符“\t”,需要根據(jù)實際情況修改分隔符。創(chuàng)建與管理Hive表例如,在TestDB數(shù)據(jù)庫中創(chuàng)建一個職員信息表(employees),employees表字段說明如下表。字段描述數(shù)據(jù)類型name職員名字STRINGage年齡INTsalary工資FLOATdepartment所屬部門STRINGsubordinates下屬職員ARRAY<STRING>deductions扣款項目MAP<STRING,FLOAT>創(chuàng)建與管理Hive表創(chuàng)建內(nèi)部表employees運行結(jié)果如下圖。創(chuàng)建與管理Hive表(2)創(chuàng)建外部表外部表在導入HDFS上的數(shù)據(jù)后,數(shù)據(jù)并沒有被移動到Hive目錄下,只是與外部數(shù)據(jù)建立一個連接(映射關(guān)系),即外部表中的數(shù)據(jù)并不是由外部表來管理的。外部表被刪除之后,元數(shù)據(jù)會被刪除,但是實際數(shù)據(jù)還存放在原位置。創(chuàng)建外部表employees_external,同時通過LOCATION指定外部表employees_external數(shù)據(jù)的HDFS存儲路徑為“/ext/”(若無此路徑,用戶需要提前創(chuàng)建),運行結(jié)果如下圖。創(chuàng)建與管理Hive表(3)創(chuàng)建分區(qū)表傳統(tǒng)的數(shù)據(jù)庫管理系統(tǒng)一般都具有表分區(qū)的功能,通過表分區(qū)能夠在特定的區(qū)域檢索數(shù)據(jù),減少掃描成本,在一定程度上提高查詢效率,另外還可以通過在分區(qū)上建立索引,進一步提高查詢效率。Hive數(shù)據(jù)倉庫中也有分區(qū)的概念,在邏輯上,分區(qū)表與未分區(qū)表沒有區(qū)別,在物理上,分區(qū)表會將數(shù)據(jù)按照分區(qū)值存儲在表目錄的子目錄中,目錄名為“分區(qū)鍵”,即“鍵值”。其中需要注意的是分區(qū)鍵的值不一定要基于表的某一列(字段),可以指定任意值,只要查詢時指定相應的分區(qū)鍵即可??梢詫Ψ謪^(qū)進行添加、刪除、重命名、清空等操作。創(chuàng)建與管理Hive表分區(qū)表可分為兩類,即靜態(tài)分區(qū)表和動態(tài)分區(qū)表。靜態(tài)分區(qū)表。若分區(qū)數(shù)量和分區(qū)值是確定的,那么該分區(qū)表稱為靜態(tài)分區(qū)表,靜態(tài)分區(qū)表不管表中有沒有數(shù)據(jù)都將創(chuàng)建分區(qū)。例如,創(chuàng)建靜態(tài)分區(qū)表employees_partition,指定靜態(tài)分區(qū)表employees_partition按照country和state的值進行分區(qū)存儲,運行結(jié)果如下圖。創(chuàng)建與管理Hive表動態(tài)分區(qū)表。動態(tài)分區(qū)表的分區(qū)數(shù)量和分區(qū)值是非確定的,由輸入數(shù)據(jù)來確定,動態(tài)分區(qū)表的相關(guān)屬性設置如下表。屬性描述hive.exec.dynamic.partition設置是否開啟動態(tài)分區(qū)模式,true為允許創(chuàng)建動態(tài)分區(qū)hive.exec.dynamic.partition.mode分區(qū)模式設置,默認值為strict。在strict模式中用戶需要指定最少一個分區(qū)為靜態(tài)分區(qū),在nostrict模式中允許所有分區(qū)都是動態(tài)分區(qū)hive.exec.max.dynamic.partitions允許動態(tài)分區(qū)的最大數(shù)量hive.exec.max.dynamic.partitions.pernode單個節(jié)點上的Mapper/Reducer允許創(chuàng)建的最大分區(qū)創(chuàng)建與管理Hive表例如,創(chuàng)建一個動態(tài)分區(qū)表employees_partition_dynamic,運行結(jié)果如下圖。注意,盡量不要創(chuàng)建動態(tài)分區(qū)表,因為創(chuàng)建動態(tài)分區(qū)時,系統(tǒng)將會為每一個動態(tài)分區(qū)分配Reducer數(shù)量,所以當動態(tài)分區(qū)數(shù)量較多時,Reducer數(shù)量也將增加,將加大服務器負荷。創(chuàng)建與管理Hive表(4)創(chuàng)建桶表Hive可以將整體數(shù)據(jù)劃分成多個分區(qū),從而優(yōu)化查詢。但是并非所有的數(shù)據(jù)都可以被合理分區(qū),可能會出現(xiàn)每個分區(qū)數(shù)據(jù)量不一致的問題,有的分區(qū)數(shù)據(jù)量很大,有的分區(qū)數(shù)據(jù)量很小,產(chǎn)生數(shù)據(jù)傾斜。為了解決數(shù)據(jù)傾斜問題,Hive提供了分桶技術(shù)。分桶是指定桶表的某一列,讓該列數(shù)據(jù)按照哈希取模的方式隨機、均勻地分發(fā)到各個桶文件中。因為分桶操作需要根據(jù)某一列具體數(shù)據(jù)進行哈希取模,所以指定的分桶列必須基于表中的某一列(字段)。創(chuàng)建與管理Hive表分桶改變了數(shù)據(jù)的存儲方式,將哈希取模值相同或在某一個區(qū)間的數(shù)據(jù)放在同一個桶文件中,可提高查詢效率。Hive中的數(shù)據(jù)是存儲在HDFS中的,HDFS中的數(shù)據(jù)是不允許修改而只能添加的,那么在Hive中執(zhí)行數(shù)據(jù)修改的命令時,就只能先找到對應的文件,讀取后執(zhí)行修改操作,然后重新寫一份文件。此時若不采用分桶的操作,則當文件比較大時需要大量的IO讀寫,相反,若采用分桶的操作,則只需要找到存放文件對應的桶,然后讀取再修改、寫入即可,從而大大提高效率。創(chuàng)建與管理Hive表創(chuàng)建桶表employees_cluster,指定桶表employees_cluster按照department進行分桶,每個桶中的數(shù)據(jù)按照列age降序(DESC)排列,指定的桶個數(shù)為3,運行結(jié)果如下圖。創(chuàng)建與管理Hive表需注意以下幾點。桶個數(shù)是指在HDFS中桶表的存儲目錄下所生成相應文件的數(shù)量。桶表只能根據(jù)一列字段進行分桶。桶表可以與分區(qū)表同時使用,分區(qū)表的每個分區(qū)下都會有指定個數(shù)的桶。桶表中指定分桶的列可以與排序的列不相同。創(chuàng)建與管理Hive表(5)創(chuàng)建臨時表臨時表也是一種表,因此針對表的操作同樣可以應用于臨時表。臨時表不支持創(chuàng)建分區(qū)列,也不支持創(chuàng)建索引。如果同一數(shù)據(jù)庫中的臨時表與非臨時表名稱一致,那么會話內(nèi)任何操作都會被解析為對臨時表的操作,用戶將無法訪問同名的非臨時表。例如,在數(shù)據(jù)庫TestDB中創(chuàng)建臨時表Course_Temp。創(chuàng)建與管理Hive表執(zhí)行“DESCFORMATTEDTestDB.Course_Temp;”命令,查看數(shù)據(jù)庫TestDB中臨時表Course_Temp的結(jié)構(gòu),如下圖。創(chuàng)建與管理Hive表從上圖中可以看出,臨時表Course_Temp在HDFS中的數(shù)據(jù)存儲路徑為hdfs:/master:9820/tmp/hive/root,該路徑中/tmp/hive/為Hive配置文件hive-site.xml中參數(shù)hive.exec.scratchdir指定的臨時目錄,/root是根據(jù)當前用戶名root創(chuàng)建的目錄。在HiveCLI客戶端中執(zhí)行“exit;”命令退出當前會話,再次登錄時使用HiveCLI客戶端執(zhí)行“USETestDB;”命令進入數(shù)據(jù)庫TestDB,然后執(zhí)行“SHOWTABLES;”命令查看Hive表,發(fā)現(xiàn)數(shù)據(jù)庫TestDB中已經(jīng)不存在臨時表Course_Temp,如下圖。創(chuàng)建與管理Hive表2.管理表Hive支持對表的管理操作,包括修改表、刪除表。查看表結(jié)構(gòu)信息操作有利于用戶了解表的表結(jié)構(gòu)信息,這是管理表的基礎(chǔ)。使用“SHOWTABLES;”命令可以列出當前數(shù)據(jù)庫中的所有表。使用DESCRIBE命令可查看表的詳細的表結(jié)構(gòu)信息。查看employees表的結(jié)構(gòu)信息,運行結(jié)果如下圖。其中DESCRIBE命令可簡寫成“DESC”。創(chuàng)建與管理Hive表(1)修改表可以通過ALTER語句修改表的屬性,該操作會同時修改元數(shù)據(jù),但不會修改數(shù)據(jù)本身。使用ALTER語句進行表重命名的語法如下。ALTERTABLEtable_nameRENAMETOnew_table_name;例如,有一份日志文件log_message,log_message數(shù)據(jù)說明如下表。字段描述數(shù)據(jù)類型hms時間戳INTseverity嚴重程度(ERROR\WARNING\INFO)STRINGserver服務器名字STRINGprocess_id進程IDINTmessage詳細信息STRING創(chuàng)建與管理Hive表創(chuàng)建log_message表運行結(jié)果如下圖。創(chuàng)建與管理Hive表使用ALTER語句將表重命名為log_message_new。使用“showtables;”命令查看當前表,如下圖。創(chuàng)建與管理Hive表使用ALTER語句(通常適用于外部表)增加新的分區(qū),運行結(jié)果如下圖。創(chuàng)建與管理Hive表登錄HDFS網(wǎng)頁端口,查看“/user/hive/warehouse/testdb.db/log_message/2022/01”,如下圖。創(chuàng)建與管理Hive表(2)刪除表用戶可通過DROP語句實現(xiàn)表的刪除操作。DROPTABLE[IFEXISTS]table_name;用戶在刪除表時可選擇是否使用IFEXISTS關(guān)鍵字。如果沒有使用該關(guān)鍵字,且表并不存在時,將會拋出一個異常信息。例如,刪除log_message表,如下圖。任務實現(xiàn)使用CREATE語句創(chuàng)建廣電用戶數(shù)據(jù)庫ZJSM,并使用“IFNOTEXISTS”判斷該數(shù)據(jù)庫是否已經(jīng)存在。接下來將了解業(yè)務數(shù)據(jù)表結(jié)構(gòu),并在數(shù)據(jù)庫ZJSM中完成業(yè)務數(shù)據(jù)表的創(chuàng)建。任務實現(xiàn)原始業(yè)務數(shù)據(jù)主要有用戶基本數(shù)據(jù)、用戶狀態(tài)變更數(shù)據(jù)、賬單數(shù)據(jù)、訂單數(shù)據(jù)和用戶收視行為數(shù)據(jù)等5類數(shù)據(jù),業(yè)務數(shù)據(jù)以CSV文件存儲,相應表的簡要說明如下。用戶基本數(shù)據(jù)表用戶基本數(shù)據(jù)表記錄的是用戶最新狀態(tài)數(shù)據(jù)。用戶基本數(shù)據(jù)表對應的CSV文件名稱為mediamatch_usermsg.csv,數(shù)據(jù)時間范圍是1995年1月至2022年6月。用戶基本數(shù)據(jù)表字段說明如下表。字段描述terminal_no用戶地址編號phone_no用戶編號sm_name品牌名稱任務實現(xiàn)字段描述run_name用戶狀態(tài)sm_code品牌編號owner_name用戶等級名稱owner_code用戶等級編號run_time狀態(tài)變更時間addressoj完整地址force寬帶是否生效open_time開戶時間任務實現(xiàn)用戶狀態(tài)變更數(shù)據(jù)表用戶狀態(tài)變更數(shù)據(jù)表用來記錄用戶所有時段的狀態(tài)數(shù)據(jù)。用戶狀態(tài)變更數(shù)據(jù)表對應的CSV文件名稱為mediamatch_userevent.csv,數(shù)據(jù)時間范圍是1995年1月至2022年6月。用戶狀態(tài)變更數(shù)據(jù)表的字段說明如下表。字段描述sum_name品牌名稱run_name用戶狀態(tài)run_time表狀態(tài)變更時間owner_name用戶等級名稱owner_code用戶等級編號open_time開戶時間任務實現(xiàn)賬單數(shù)據(jù)表賬單數(shù)據(jù)表記錄的是用戶每月的賬單數(shù)據(jù),這些賬單數(shù)據(jù)會在每月1號生成。賬單數(shù)據(jù)表對應的CSV文件名稱為mmconsume_billevents.csv,數(shù)據(jù)時間范圍為2022年1月至2022年7月。賬單數(shù)據(jù)表的字段說明如下表。字段描述terminal_no用戶地址編號phone_no用戶編號fee_code費用類型year_month賬單時間任務實現(xiàn)字段描述owner_name用戶等級名稱owner_code用戶等級編號sm_name品牌名稱should_pay應收金額,單位:元favour_fee優(yōu)惠金額(+代表優(yōu)惠,-代表額外費用)任務實現(xiàn)訂單數(shù)據(jù)表訂單數(shù)據(jù)表記錄的是用戶的訂購產(chǎn)品的數(shù)據(jù),用戶每訂購一個產(chǎn)品,就會有相應的記錄。訂單數(shù)據(jù)表對應的CSV文件名稱為order_index.csv,數(shù)據(jù)時間范圍為2014年1月至2022年5月。訂單數(shù)據(jù)表的字段說明如下表。字段描述phone_no用戶編號owner_name用戶等級名稱optdate產(chǎn)品訂購狀態(tài)更新時間prodname訂購產(chǎn)品名稱sm_name品牌名稱offerid訂購套餐編號任務實現(xiàn)字段描述offername訂購套餐名稱business_name訂購業(yè)務狀態(tài)owner_code用戶等級編號prodprcid訂購產(chǎn)品名稱(帶價格)的編號prodprcname訂購產(chǎn)品名稱(帶價格)effdate產(chǎn)品生效時間任務實現(xiàn)字段描述expdate產(chǎn)品失效時間orderdate產(chǎn)品訂購時間cost訂購產(chǎn)品價格,單位:元mode_time產(chǎn)品標識,輔助標識電視主、附銷售品prodstatus訂購產(chǎn)品狀態(tài)run_name用戶狀態(tài)名orderno訂單編號offertype訂購套餐類型任務實現(xiàn)用戶收視行為數(shù)據(jù)表用戶收視行為數(shù)據(jù)表記錄了用戶觀看電視的數(shù)據(jù),其中觀看方式可分為直播、點播和回看,用戶每切換一個頻道都會生成一條新的記錄。用戶收視行為數(shù)據(jù)表對應的CSV文件名稱是media_index.csv,數(shù)據(jù)時間范圍是2022年5月至2022年7月。用戶收視行為數(shù)據(jù)表的字段說明如下表。字段描述terminal_no用戶地址編號phone_no用戶編號duration觀看時長,單位為毫秒station_name直播頻道名稱任務實現(xiàn)字段描述origin_time觀看行為開始時間end_time觀看行為結(jié)束時間owner_code用戶等級編號owner_name用戶等級名稱vod_cat_tags視頻點播節(jié)目包相關(guān)信息(是一組數(shù)組類型數(shù)據(jù)),按不同的節(jié)目包目錄組織resolution點播節(jié)目的清晰度audio_lang點播節(jié)目的語言類別任務實現(xiàn)字段描述region節(jié)目地區(qū)信息res_name設備名稱res_type節(jié)目類型,0代表直播,1代表點播或回看vod_title視頻點播節(jié)目名稱category_name節(jié)目所屬分類program_title直播節(jié)目名稱sm_name品牌名稱任務實現(xiàn)根據(jù)用戶基本數(shù)據(jù)表創(chuàng)建表mediamatch_usermsg。根據(jù)用戶狀態(tài)變更數(shù)據(jù)表創(chuàng)建表mediamatch_userevent。根據(jù)賬單數(shù)據(jù)表創(chuàng)建表mmconsume_billevents。根據(jù)訂單數(shù)據(jù)表創(chuàng)建表order_index。根據(jù)用戶收視行為數(shù)據(jù)表創(chuàng)建表media_index。創(chuàng)建業(yè)務數(shù)據(jù)表將數(shù)據(jù)導入Hive表中任務描述通過Hive實現(xiàn)數(shù)據(jù)的分析功能,需要將數(shù)據(jù)保存在Hive中。Hive提供了數(shù)據(jù)管理語言(DataManipulationLanguage,DML),使用LOAD語句可實現(xiàn)數(shù)據(jù)的裝載。本任務介紹將數(shù)據(jù)裝載至Hive表,并使用LOAD語句將廣電業(yè)務數(shù)據(jù)導入H
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年貨品物流合作協(xié)議
- 2025年度水電暖管道改造及節(jié)能服務承包合同3篇
- 2025年度汽車經(jīng)銷商與消費者按揭購車協(xié)議書3篇
- 2024版專業(yè)餐廳整體承包協(xié)議樣本版B版
- 2025年度公共設施物業(yè)項目經(jīng)營權(quán)轉(zhuǎn)讓協(xié)議書3篇
- 2025年城市道路照明設施安裝勞務施工合同2篇
- 二零二五年國際工程項目合同標的進度管理協(xié)議3篇
- 2024年版建筑工程咨詢與協(xié)調(diào)合同
- 2025年度工業(yè)自動化生產(chǎn)線職業(yè)健康與環(huán)保合同3篇
- 2025年度二零二五橄欖油種植基地建設與原料采購合同3篇
- 食堂虧損分析報告范文5篇
- 錨桿錨索鉆機操作規(guī)程
- 《錄音技術(shù)與藝術(shù)》課程教學大綱
- 部編版七年級語文上下冊教材解讀分析精編ppt
- InternationalSettlementsLecture3InternationalClearingSystems
- (完整版)景觀園林工程施工規(guī)范和技術(shù)要求
- (完整版)六年級轉(zhuǎn)述句練習題
- 蘇武傳作文素材整理-
- 小學一年級班會課教案匯編 全冊
- 公司董事會、總經(jīng)理辦公會議事清單.docx
- 煤礦礦井供電設計(DOC26頁)
評論
0/150
提交評論