柚子快報(bào)激活碼778899分享:數(shù)據(jù)倉(cāng)庫(kù)技術(shù)及應(yīng)用
柚子快報(bào)激活碼778899分享:數(shù)據(jù)倉(cāng)庫(kù)技術(shù)及應(yīng)用
1.Hive入門
主要內(nèi)容:
數(shù)據(jù)倉(cāng)庫(kù)的與傳統(tǒng)數(shù)據(jù)庫(kù)不同:
數(shù)據(jù)倉(cāng)庫(kù)的數(shù)據(jù)規(guī)模大,數(shù)據(jù)更穩(wěn)定
Hive真實(shí)數(shù)據(jù)存儲(chǔ)格式:
TEXTFILE,文本文件
SEQUENCEFILE,二進(jìn)制序列化過(guò)的文本存儲(chǔ)格式
RCFILE,面向列的數(shù)據(jù)存儲(chǔ)格式
ORCFILE,對(duì)RCFILE的優(yōu)化格式
Hive數(shù)據(jù)單元:
數(shù)據(jù)庫(kù)
表:有外部表和內(nèi)部表,內(nèi)部表由hive管理,外部表不由hive管理
分區(qū):用于提高查詢效率
分桶
Hive基本數(shù)據(jù)類型:
整數(shù):TINYING,SMALLINT,INT,BIGINT
小數(shù):F.LOAT,DOUBLE,DECIMAL;
文本:STRING,CHAR,VARCHAR
布爾:BOOLEAN
二進(jìn)制:BINARY
時(shí)間:DATE,TIMESTAMP,INTERVAL(DATE:日期.TIMESETAMP:納秒級(jí)別的時(shí)間戳,INTERVAL:時(shí)間間隔)
Hive復(fù)雜數(shù)據(jù)類型:
ARRAY:同類型變量
MAP:鍵值對(duì)
STRUCT:一組有名字的任意基本類型字段
UNIONTYPE:類型JAVA泛型,任一時(shí)刻只有一種類型生效
Hive分區(qū)和分桶:
分區(qū)的目的:提高查詢性能
分桶的目的:提高分布式查詢的效率
分區(qū):PARTITIONED BY
分桶:CLUSTERED BY
Hive元數(shù)據(jù):
DBS:存儲(chǔ)Hive中所有數(shù)據(jù)庫(kù)的基本信息
DATABASE_PARAMS:該表存儲(chǔ)數(shù)據(jù)庫(kù)的相關(guān)參數(shù)
TBLS:存儲(chǔ)Hive表、視圖、索引表的基本信息
TABLE_PARAMS:該表存儲(chǔ)表/視圖的屬性信息
Hive數(shù)據(jù)連接
內(nèi)關(guān)聯(lián)([inner] join):只返回關(guān)聯(lián)上的結(jié)果
左關(guān)聯(lián)(left [outer] join):以左表為主
右關(guān)聯(lián)(right [outer] join):以右表為主
全關(guān)聯(lián)(full [outer] join):以兩個(gè)表的記錄為基準(zhǔn),返回兩個(gè)表的記錄去重之和,關(guān)聯(lián)不上的字段為NULL
Hive數(shù)據(jù)排序
order by(全局排序) order by會(huì)對(duì)輸入做全局排序,因此只有一個(gè)Reducer(多個(gè)Reducer無(wú)法保證全局有序),然而只有一個(gè)reducer,會(huì)導(dǎo)致當(dāng)輸入規(guī)模較大時(shí),消耗較長(zhǎng)的計(jì)算時(shí)間 降序:desc 升序:asc 不需要指定,默認(rèn)是升序
sort by(分區(qū)內(nèi)排序) 不是全局排序,其在數(shù)據(jù)進(jìn)入reducer前完成排序,也就是說(shuō)它會(huì)在數(shù)據(jù)進(jìn)入reduce之前為每個(gè)reducer都產(chǎn)生一個(gè)排序后的文件。因此,如果用sort by進(jìn)行排序,并且設(shè)置mapreduce.job.reduces>1,則sort by只保證每個(gè)reducer的輸出有序,不保證全局有序。
distribute by(數(shù)據(jù)分發(fā)) distribute by是控制在map端如何拆分?jǐn)?shù)據(jù)給reduce端的。類似于MapReduce中分區(qū)partationer對(duì)數(shù)據(jù)進(jìn)行分區(qū) hive會(huì)根據(jù)distribute by后面列,將數(shù)據(jù)分發(fā)給對(duì)應(yīng)的reducer,默認(rèn)是采用hash算法+取余數(shù)的方式。
cluster by cluster by除了具有distribute by的功能外還兼具sort by的功能。但是排序只能是升序排序,不能指定排序規(guī)則為ASC或者DESC 當(dāng)分區(qū)字段和排序字段相同cluster by可以簡(jiǎn)化distribute by+sort by 的SQL 寫法,也就是說(shuō)當(dāng)distribute by和sort by 字段相同時(shí),可以使用cluster by 代替distribute by和sort by
hive窗口函數(shù)
窗口函數(shù)指定了函數(shù)工作的數(shù)據(jù)窗口大小(當(dāng)前行的上下多少行),這個(gè)數(shù)據(jù)窗口大小可能會(huì)隨著行的變化而變化
窗口函數(shù)最重要的關(guān)鍵字是 partition by 和 order by。 具體語(yǔ)法:over (partition by xxx order by xxx)
row_number() over():對(duì)相等的值不進(jìn)行區(qū)分 rank() over():相等的值排名相同,序號(hào)從1到n不連續(xù) dense_rank() over():對(duì)相等的值排名相同,序號(hào)從1到n連續(xù) ntile(n) over():可以看作是把有序的數(shù)據(jù)集合平均分配到指定的數(shù)據(jù)n的桶中,將桶號(hào)分配給每一行,排序?qū)?yīng)的數(shù)據(jù)為桶號(hào) paercent_rank():排名計(jì)算公式:(current rank - 1)/(total number of rows -1),說(shuō)明:分組內(nèi)當(dāng)前行的rank值-1/分組內(nèi)總行數(shù)-1 cume_dist:如按升序排列,則統(tǒng)計(jì);小于等于當(dāng)前值的行數(shù)/總行數(shù)(number of rows ≤ current row)/(total number of rows),如果是降序比例,則統(tǒng)計(jì):大于等于當(dāng)前值的行數(shù)/總行數(shù) lead(value_expr[,offset[default]]):用于統(tǒng)計(jì)窗口內(nèi)往下第n行值 lag(value_expr[,offset[,default]]):與lead相反,用于統(tǒng)計(jì)窗口內(nèi)往上第n行值
柚子快報(bào)激活碼778899分享:數(shù)據(jù)倉(cāng)庫(kù)技術(shù)及應(yīng)用
精彩鏈接
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。