hive遍历_从Hive中的stored as file_foramt看hive调优
一、行式數(shù)據(jù)庫和列式數(shù)據(jù)庫的對比
1、存儲比較
行式數(shù)據(jù)庫存儲在hdfs上式按行進(jìn)行存儲的,一個block存儲一或多行數(shù)據(jù)。而列式數(shù)據(jù)庫在hdfs上則是按照列進(jìn)行存儲,一個block可能有一列或多列數(shù)據(jù)。
2、壓縮比較
對于行式數(shù)據(jù)庫,必然按行壓縮,當(dāng)一行中有多個字段,各個字段對應(yīng)的數(shù)據(jù)類型可能不一致,壓縮性能壓縮比就比較差。
對于列式數(shù)據(jù)庫,必然按列壓縮,每一列對應(yīng)的是相同數(shù)據(jù)類型的數(shù)據(jù),故列式數(shù)據(jù)庫的壓縮性能要強(qiáng)于行式數(shù)據(jù)庫。
3、查詢比較
假設(shè)執(zhí)行的查詢操作是:select id,name from table_emp;
對于行式數(shù)據(jù)庫,它要遍歷一整張表將每一行中的id,name字段拼接再展現(xiàn)出來,這樣需要查詢的數(shù)據(jù)量就比較大,效率低。
對于列式數(shù)據(jù)庫,它只需找到對應(yīng)的id,name字段的列展現(xiàn)出來即可,需要查詢的數(shù)據(jù)量小,效率高。
假設(shè)執(zhí)行的查詢操作是:select * from table_emp;
對于這種查詢整個表全部信息的操作,由于列式數(shù)據(jù)庫需要將分散的行進(jìn)行重新組合,行式數(shù)據(jù)庫效率就高于列式數(shù)據(jù)庫。
但是,在大數(shù)據(jù)領(lǐng)域,進(jìn)行全表查詢的場景少之又少,進(jìn)而我們使用較多的還是列式數(shù)據(jù)庫及列式儲存。
二、stored as file_format 詳解
1、建一張表時,可以使用“stored as file_format”來指定該表數(shù)據(jù)的存儲格式,hive中,表的默認(rèn)存儲格式為TextFile。
2、TEXTFILE、SEQUENCEFILE、RCFILE、ORC等四種儲存格式及它們對于hive在存儲數(shù)據(jù)和查詢數(shù)據(jù)時性能的優(yōu)劣比較
TEXTFILE: 只是hive中表數(shù)據(jù)默認(rèn)的存儲格式,它將所有類型的數(shù)據(jù)都存儲為String類型,不便于數(shù)據(jù)的解析,但它卻比較通用。不具備隨機(jī)讀寫的能力。支持壓縮。
SEQUENCEFILE: 這種儲存格式比TEXTFILE格式多了頭部、標(biāo)識、信息長度等信息,這些信息使得其具備隨機(jī)讀寫的能力。支持壓縮,但壓縮的是value。(存儲相同的數(shù)據(jù),SEQUENCEFILE比TEXTFILE略大)
RCFILE(Record Columnar File): 現(xiàn)在水平上劃分為很多個Row Group,每個Row Group默認(rèn)大小4MB,Row Group內(nèi)部再按列存儲信息。由facebook開源,比標(biāo)準(zhǔn)行式存儲節(jié)約10%的空間。
ORC: 優(yōu)化過后的RCFile,現(xiàn)在水平上劃分為多個Stripes,再在Stripe中按列存儲。每個Stripe由一個Index Data、一個Row Data、一個Stripe Footer組成。每個Stripes的大小為250MB,每個Index Data記錄的是整型數(shù)據(jù)最大值最小值、字符串?dāng)?shù)據(jù)前后綴信息,每個列的位置等等諸如此類的信息。這就使得查詢十分得高效,默認(rèn)每一萬行數(shù)據(jù)建立一個Index Data。ORC存儲大小為TEXTFILE的40%左右,使用壓縮則可以進(jìn)一步將這個數(shù)字降到10%~20%。
ORC這種文件格式可以作用于表或者表的分區(qū),可以通過以下幾種方式進(jìn)行指定:
示例:創(chuàng)建帶壓縮的ORC存儲表
PARQUET: 存儲大小為TEXTFILE的60%~70%,壓縮后在20%~30%之間。
注意:
總結(jié)
以上是生活随笔為你收集整理的hive遍历_从Hive中的stored as file_foramt看hive调优的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于登录tomcat8一直登录不进去问题
- 下一篇: 适用mac微信用户的免登陆多开防撤回插件