柚子快報激活碼778899分享:數(shù)據(jù)倉庫學習筆記三
1. 掌握Hive數(shù)據(jù)存儲模型
1.1 Hive存儲格式
????????Hive中的數(shù)據(jù)分為真實數(shù)據(jù)與元數(shù)據(jù),一般來說Hive存儲格式是指真實數(shù)據(jù)的存儲格式。元數(shù)據(jù)表示真實數(shù)據(jù)與Hive表的映射關系。
? ? ? ? Hive常用的存儲格式包括以下4種:TEXTFILE ,SEQUENCEFILE,RCFILE,ORCFILE。
①.TEXTFILE:文本文件格式
????????常見的txt、csV、tsv等文件都屬于TEXTFILE。?Hive認存儲格式為TEXTFILE,即創(chuàng)建灰時如果不單獨指定存儲格式,則默認為存儲格式為TEXTFILE存儲格式為按行存儲,內(nèi)容為普通的文術格式,一般可以使用cat命令直接查看。TEXTFILE格式的數(shù)據(jù)文件無須任何處理即可導入Hive,文件每行為一條記錄,記錄可用任意分隔符進行列分割,記錄之間須以行結束符分割。Hive將TEXTFILE映射為表的過程中,將會逐個字符地判斷是否為列分隔符或行分隔符。 ????????TEXTFILE支持使用Gzip壓縮,但Gzip壓縮后的文件將不再支持MapReduce分割機制,這意味著壓縮后的文件不論有多少個HDFS塊都只能被一一個Map任務處理,即失去了使用集群并行處理的優(yōu)勢。 ②.?SEQUENCEFILE:二進制優(yōu)化過的文本存儲文件格式 ????????SEQUENCEFILE?是Hadoop提供的一種由?“二進制序列化過的Key/Value字節(jié)流”組成的文本存儲文件格式。其由于內(nèi)容為二進制字節(jié),所以無法通過cat命令查看原始字符,這可以抽象地理解為,在SEQUENCEFILE中每條記錄均以鍵位對的方式進行存儲,僅支持追加。與TEXTILE類似,SEQUENCEFILE同樣按行存儲。 ????????Hive無法直接導入SEUENCEFILE格式的數(shù)據(jù)文件。數(shù)據(jù)須首先導入至TEXTILE格式的表中,然后再從TEXTFLE格式的表中采用插入方式導入至SEQUENCEFILE格式的表。 ????????SEQUENCEILE是可分割的文件格式,支持3種壓縮選項。
? ? ? ? (1)NONE:不壓縮
? ? ? ? (2)RECORD(默認選項):記錄級壓縮,壓縮率低
? ? ? ? (3)BLOCK:塊級壓縮,壓縮率高。
③.RCFILE:面向列的數(shù)據(jù)存儲格式
????????RCFILE?(Record-Columnar?File)是Facebook開發(fā)的一種?專門面向列的數(shù)據(jù)存儲格式,不同于TEXTFILE和SEQUENCEFILE,?RCFILE?是基于行列混合存儲思想的設計。 ????????RCFILE遵循“先水平劃分,再垂直劃分-的設計理念:首先把Hive表水平切分成多個行組,保證同一行的數(shù)據(jù)位于同一節(jié)點,?其次在行組內(nèi)按照“列”垂直切分,實現(xiàn)列與列的數(shù)據(jù)在磁盤上呈現(xiàn)為連續(xù)的存儲塊。使用RCFILE的優(yōu)勢是既保證了每條記錄所有列在同一一個HDFS塊,也可以做到當查詢僅針對表中的少數(shù)幾列時,可跳過不必要的列進行數(shù)據(jù)讀收。 ????????RCFILE是可分割的文件格式,即在每個行組中,元數(shù)據(jù)頭部(Metadata?Header)和表格數(shù)據(jù)段會較分別壓縮。對于元數(shù)據(jù)頭部而言,RCFILE會使用行程長度編碼(RunLength?Encoding.?RLE)?算法壓縮數(shù)據(jù),面對于表格數(shù)據(jù)段而言,其每個列會通過Gzip壓縮算法獨立壓縮。
④.ORCFILE:對RCFILE的優(yōu)化
????????ORCFILE?Optimized?Row-Columnar?File)?是對RCFILE的優(yōu)化,可以提供種高效的方法來存儲Hive數(shù)據(jù)。ORCFILE?的特點是:支持壓縮比很高的壓縮算法,文件可切分,提供多種索引,支持復雜的數(shù)據(jù)結構。
1.2 Hive數(shù)據(jù)單元
①.數(shù)據(jù)庫 ????????數(shù)據(jù)庫Catabases)類似于RDBMS中的數(shù)據(jù)庫,在HIDFS中表現(xiàn)為hive?metastore warehouse.dir?目錄下的一個文件夾,其本質(zhì)是用于避免表、視圖、分區(qū)、列等命久的命名空間。 ②.表 ????????表(Tables)由列構成,在表上可以進行過濾、映射、連接和聯(lián)合操作。表在HDFS中表現(xiàn)為所屬數(shù)據(jù)庫目錄下的子目錄,具體又分內(nèi)部表和外部表。內(nèi)部表類似于RDBNIS中的表,由Hive管理。外部表指向已經(jīng)存在HDFS中的數(shù)據(jù),與內(nèi)部表元數(shù)據(jù)組織是相同的,但其數(shù)據(jù)存放位置是任意的。外部表的真實數(shù)據(jù)不被Hive管理,即當刪除一-張內(nèi)部表時,元數(shù)據(jù)以及HDFS上的真實數(shù)據(jù)均被刪除,而刪除外部表則只會刪除元數(shù)據(jù)而不會刪除真實數(shù)據(jù)。 ③.分區(qū) ????????每個表都可以按指定的鍵分為多個分區(qū)(Partitions)。?分區(qū)的作用是提高查詢的效率,其在HDFS中表現(xiàn)為表目錄下的子目錄。 ④.分桶 ????????根據(jù)表中某一-列的哈?希值可將數(shù)據(jù)劃分為多個分桶(Buckets),?在HDFS中分桶表現(xiàn)為同一個目錄下根據(jù)哈希散列之后的多個文件。 ????????
注意:
????????可以看到,Hive中的數(shù)據(jù)單元劃分與RDBMS的物理模型非常類似。但在Hive?數(shù)據(jù)單元劃分過程中還必須注意以下幾點。 ①.Hive表沒有主鍵。 ②.Hive表(0.14?版本前)不支持行級操作,新版本中行級操作效率也比較低。
③.Hive表不支持批量update操作,但可以先刪除、再添加。 ④.Hive分區(qū)和分桶可以極大提升數(shù)據(jù)查詢效率。
1.3 Hive存儲模型
按照數(shù)據(jù)單元的劃分結果,Hive數(shù)據(jù)在HDFS的典型存儲結構中表現(xiàn)為以下形式:
①? /數(shù)據(jù)倉庫地址/數(shù)據(jù)庫?名稱/表名稱/數(shù)據(jù)文件(或分桶數(shù)據(jù)文件)。 ②? /數(shù)據(jù)倉庫?地址/數(shù)據(jù)庫名稱/表名稱/分區(qū)鍵/數(shù)據(jù)文件(或分桶數(shù)據(jù)文件)。
2. 熟悉數(shù)據(jù)類型
2.1 基本數(shù)據(jù)類型
????????Hive中的基本數(shù)據(jù)類型也稱為原始類型,包括整數(shù),小數(shù),文本,布爾,二進制以及時間類型。
整數(shù)類型:(4種)(在使用整數(shù)變量是,默認情況為INT,如果要聲明為其他類型,須通過后綴來標識)
? ? ? ?TINYINT:對應Java中的byte,字節(jié)長度為1字節(jié),后綴為‘Y’
? ? ? ?SMALLINT:對應Java中的short,字節(jié)長度為2字節(jié),后綴為‘S’
? ? ? ? INT:對應Java中的int,字節(jié)長度為4字節(jié)
? ? ? ? BIGINT:對應Java中的long,字節(jié)長度為8字節(jié),后綴為‘L’
小數(shù)類型:
????????小數(shù)類型也稱為浮點類型,包括FLOAT和DOUBLE兩種,對應Java中的loat和double,分
別為32位和64位浮點數(shù)。此外,Hive?還可以使用DECIMAL?米表示任意精度的小數(shù),類似于
Java?中的BigDecimal,其通常在貨幣當中使用。
文本類型:(文本類型也稱為字符串類型,使用單引號或雙引號來指定。Hive?有3種類型用于存儲?文本) ?????????STRING存儲可變長的文本,對長度沒有限制。理論上STRING的存儲空間為2GB,但是
存儲特別大的對象時效率會受影響,此時可以考慮使用Sqoop提供的大對象支持。
????????VARCHAR與STRING類似,但其存儲字符串的長度要求在1~65355之間,超出部分將被截
斷,例如VARCHAR(20)。 ????????CHAR以固定長度來存儲字符串,最大固定長度為255,例如CHAR(20)。
布爾及二進制類型:
????????布爾(BOOLEAN):類型值有true和false兩種
????????二進制類型BINARY用于存儲變長的二進制數(shù)據(jù)
時間類型:
?????????DATE:用于描述特定的年月日,以yy-MM-dd格式表示(DATE類型不包含時間,所表示的日期范圍為0000-01-01至9999-12-31)
????????TIMESTAMP:存儲納米級別的時間戳,TIMESTAMP與地區(qū)無關
????????INTERVAL:表示時間間隔,其僅被Hive1.2.0之后的版本支持
2.2 復雜數(shù)據(jù)類型
????????Hive?的表字段不僅可以是基礎數(shù)據(jù)類型,還可以是復雜數(shù)據(jù)類型(Complex?Types)。Hive?有4種常用的復雜數(shù)據(jù)類型,分別是數(shù)組(ARRAY)、映射(MAP)、結構體(STRUCT)和聯(lián)合體(UNIONTYPE)。 ARRAY?和MAP: ????????ARRAY是具有相同類型變量的集合。這些變量稱為數(shù)組的元素,每個數(shù)組元素都有一個索引
編號,編號從零開始。 ????????MAP是一組鍵值對集合,key?只能是基本類型,值可以是任意類型。 STRUCT: ????????STRUCT封裝了-?-組有名字的字段(Named?Field),其類型可以是任意的基本類型,結構體內(nèi)的
元素使用“.”來訪問。
UNIONTYPE: ????????在給定的任何一個時刻,UNIONTYPE?類型可以保存指定數(shù)據(jù)類型中的任意一種其類似于
Java中的泛型,在任一-時刻只有其中的一一個類型生效。
????????????????
????????
????????
柚子快報激活碼778899分享:數(shù)據(jù)倉庫學習筆記三
推薦文章
本文內(nèi)容根據(jù)網(wǎng)絡資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。
轉載請注明,如有侵權,聯(lián)系刪除。