關(guān)于hive表的存儲格式ORC格式的使用詳解
hive表的源文件存儲格式:
1、TEXTFILE
默認格式,建表時不指定默認為這個格式,導(dǎo)入數(shù)據(jù)時會直接把數(shù)據(jù)文件拷貝到hdfs上不進行處理。源文件可以直接通過hadoop fs -cat 查看
2、SEQUENCEFILE
一種Hadoop API提供的二進制文件,使用方便、可分割、可壓縮等特點。 SEQUENCEFILE將數(shù)據(jù)以<key,value>的形式序列化到文件中。序列化和反序列化使用Hadoop 的標準的Writable 接口實現(xiàn)。key為空,用value 存放實際的值, 這樣可以避免map 階段的排序過程。
三種壓縮選擇:NONE, RECORD, BLOCK。 Record壓縮率低,一般建議使用BLOCK壓縮。使用時設(shè)置參數(shù),
- SET hive.exec.compress.output=true;
- SET io.seqfile.compression.type=BLOCK; -- NONE/RECORD/BLOCK
- create table test2(str STRING) STORED AS SEQUENCEFILE;
3、RCFILE
一種行列存儲相結(jié)合的存儲方式。首先,其將數(shù)據(jù)按行分塊,保證同一個record在一個塊上,避免讀一個記錄需要讀取多個block。其次,塊數(shù)據(jù)列式存儲,有利于數(shù)據(jù)壓縮和快速的列存取。理論上具有高查詢效率(但hive官方說效果不明顯,只有存儲上能省10%的空間,所以不好用,可以不用)。 RCFile結(jié)合行存儲查詢的快速和列存儲節(jié)省空間的特點
1)同一行的數(shù)據(jù)位于同一節(jié)點,因此元組重構(gòu)的開銷很低;
2) 塊內(nèi)列存儲,可以進行列維度的數(shù)據(jù)壓縮,跳過不必要的列讀取。
查詢過程中,在IO上跳過不關(guān)心的列。實際過程是,在map階段從遠端拷貝仍然拷貝整個數(shù)據(jù)塊到本地目錄,也并不是真正直接跳過列,而是通過掃描每一個row group的頭部定義來實現(xiàn)的。
但是在整個HDFS Block 級別的頭部并沒有定義每個列從哪個row group起始到哪個row group結(jié)束。所以在讀取所有列的情況下,RCFile的性能反而沒有SequenceFile高。
4、ORC
hive給出的新格式,屬于RCFILE的升級版。
5、自定義格式
用戶的數(shù)據(jù)文件格式不能被當前 Hive 所識別的,時通過實現(xiàn)inputformat和outputformat來自定義輸入輸出格式
注意:
只有TEXTFILE表能直接加載數(shù)據(jù),必須,本地load數(shù)據(jù),和external外部表直接加載運路徑數(shù)據(jù),都只能用TEXTFILE表。 更深一步,hive默認支持的壓縮文件(hadoop默認支持的壓縮格式),也只能用TEXTFILE表直接讀取。其他格式不行??梢酝ㄟ^TEXTFILE表加載后insert到其他表中。
換句話說,SequenceFile、RCFile表不能直接加載數(shù)據(jù),數(shù)據(jù)要先導(dǎo)入到textfile表,再從textfile表通過insert select from 導(dǎo)入到SequenceFile,RCFile表。 SequenceFile、RCFile表的源文件不能直接查看,在hive中用select看。
RCFile源文件可以用 hive --service rcfilecat /xxxxxxxxxxxxxxxxxxxxxxxxxxx/000000_0查看,但是格式不同,很亂。
ORC格式
ORC是RCfile的升級版,性能有大幅度提升, 而且數(shù)據(jù)可以壓縮存儲,壓縮比和Lzo壓縮差不多,比text文件壓縮比可以達到70%的空間。而且讀性能非常高,可以實現(xiàn)高效查詢。 具體介紹https://cwiki.apache.org/confluence/display/Hive/LanguageManual+ORC
建表語句如下: 同時,將ORC的表中的NULL取值,由默認的\N改為'',
方式一:
create table if not exists test_orc( ? advertiser_id string, ? ad_plan_id string, ? cnt BIGINT ) partitioned by (day string, type TINYINT COMMENT '0 as bid, 1 as win, 2 as ck', hour TINYINT) STORED AS ORC; alter table test_orc set serdeproperties('serialization.null.format' = '');
查看結(jié)果
hive> show create table test_orc; CREATE ?TABLE `test_orc`( ? `advertiser_id` string,? ? `ad_plan_id` string,? ? `cnt` bigint) PARTITIONED BY (? ? `day` string,? ? `type` tinyint COMMENT '0 as bid, 1 as win, 2 as ck',? ? `hour` tinyint) ROW FORMAT DELIMITED? ? NULL DEFINED AS ''? STORED AS INPUTFORMAT? ? 'org.apache.hadoop.hive.ql.io.orc.OrcInputFormat'? OUTPUTFORMAT? ? 'org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat' LOCATION ? 'hdfs://namenode/hivedata/warehouse/pmp.db/test_orc' TBLPROPERTIES ( ? 'last_modified_by'='pmp_bi',? ? 'last_modified_time'='1465992624',? ? 'transient_lastDdlTime'='1465992624')
方式二:
drop table test_orc; create table if not exists test_orc( advertiser_id string, ad_plan_id string, cnt BIGINT ) partitioned by (day string, type TINYINT COMMENT '0 as bid, 1 as win, 2 as ck', hour TINYINT) ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.orc.OrcSerde' with serdeproperties('serialization.null.format' = '') STORED AS ORC;
查看結(jié)果
hive> show create table test_orc; CREATE TABLE `test_orc`( `advertiser_id` string, `ad_plan_id` string, `cnt` bigint) PARTITIONED BY ( `day` string, `type` tinyint COMMENT '0 as bid, 1 as win, 2 as ck', `hour` tinyint) ROW FORMAT DELIMITED NULL DEFINED AS '' STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.orc.OrcInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat' LOCATION 'hdfs://namenode/hivedata/warehouse/pmp.db/test_orc' TBLPROPERTIES ( 'transient_lastDdlTime'='1465992726')
方式三:
drop table test_orc; create table if not exists test_orc( advertiser_id string, ad_plan_id string, cnt BIGINT ) partitioned by (day string, type TINYINT COMMENT '0 as bid, 1 as win, 2 as ck', hour TINYINT) ROW FORMAT DELIMITED NULL DEFINED AS '' STORED AS ORC;
查看結(jié)果
hive> show create table test_orc; CREATE TABLE `test_orc`( `advertiser_id` string, `ad_plan_id` string, `cnt` bigint) PARTITIONED BY ( `day` string, `type` tinyint COMMENT '0 as bid, 1 as win, 2 as ck', `hour` tinyint) ROW FORMAT DELIMITED NULL DEFINED AS '' STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.orc.OrcInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat' LOCATION 'hdfs://namenode/hivedata/warehouse/pmp.db/test_orc' TBLPROPERTIES ( 'transient_lastDdlTime'='1465992916')
到此這篇關(guān)于關(guān)于hive表的存儲格式ORC格式的使用詳解的文章就介紹到這了,更多相關(guān)hive表的ORC格式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
neo4j實現(xiàn)創(chuàng)建多個數(shù)據(jù)庫
這篇文章主要介紹了neo4j實現(xiàn)創(chuàng)建多個數(shù)據(jù)庫方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-02-02你應(yīng)該知道的區(qū)塊鏈運作7個核心技術(shù)
這篇文章主要為大家詳細介紹了你應(yīng)該知道的區(qū)塊鏈運作7個核心技術(shù),具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-01-01Linux下開啟和配置OpenGauss數(shù)據(jù)庫遠程連接的教程詳解
openGauss是一款開源關(guān)系型數(shù)據(jù)庫管理系統(tǒng),采用木蘭寬松許可證v2發(fā)行,本文主要為大家介紹了Linux系統(tǒng)中如何開啟和配置OpenGauss數(shù)據(jù)庫的遠程連接,需要的小伙伴可以參考下2023-12-12使用Navicat生成ER關(guān)系圖并導(dǎo)出的方法
這篇文章主要介紹了使用Navicat生成ER關(guān)系圖并導(dǎo)出的方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11問個高難度的復(fù)雜查詢(在一個時間段內(nèi)的間隔查詢)
問個高難度的復(fù)雜查詢(在一個時間段內(nèi)的間隔查詢)...2007-04-04一次數(shù)據(jù)庫查詢超時優(yōu)化問題的實戰(zhàn)記錄
當MySQL服務(wù)器出現(xiàn)異常(慢),首先要考慮是否因SQL語句引起數(shù)據(jù)庫慢,下面這篇文章主要給大家介紹了一次數(shù)據(jù)庫查詢超時優(yōu)化問題的實戰(zhàn)記錄,需要的朋友可以參考下2021-10-10