詳解hive常見表結(jié)構(gòu)
hive簡介
hive是基于Hadoop的一個數(shù)據(jù)倉庫工具,用來進行數(shù)據(jù)提取、轉(zhuǎn)化、加載,這是一種可以存儲、查詢和分析存儲在Hadoop中的大規(guī)模數(shù)據(jù)的機制。hive數(shù)據(jù)倉庫工具能將結(jié)構(gòu)化的數(shù)據(jù)文件映射為一張數(shù)據(jù)庫表,并提供SQL查詢功能,能將SQL語句轉(zhuǎn)變成MapReduce任務(wù)來執(zhí)行。Hive的優(yōu)點是學習成本低,可以通過類似SQL語句實現(xiàn)快速MapReduce統(tǒng)計,使MapReduce變得更加簡單,而不必開發(fā)專門的MapReduce應(yīng)用程序。hive十分適合對數(shù)據(jù)倉庫進行統(tǒng)計分析。 [1]
1.外部表
當文件已經(jīng)存在或位于遠程位置時,我們可以使用外部表,外部表的存儲由自己指定。
特點:刪除表,數(shù)據(jù)依然存在
建表語句
CREATE EXTERNAL TABLE tmp_xx(id int,name String);
2.內(nèi)部表
hive管理控制表的整個生命周期,存儲位置在hive.metastore.warehouse.dir目錄下。
特點:刪除表時,數(shù)據(jù)也被刪除
建表語句
CREATE TABLE tmp_xx(id int,name String);
3.分區(qū)表
把一個表的數(shù)據(jù)以分區(qū)字段的值作為目錄去存儲。
特點:
- 縮小了硬盤掃描數(shù)據(jù)的區(qū)域,減少磁盤IO
- 將表數(shù)據(jù)存儲在多個分區(qū)目錄,便于獨立管理(創(chuàng)建,刪除)數(shù)據(jù)
存儲結(jié)構(gòu)如下
1.靜態(tài)分區(qū)
在執(zhí)行前就知道分區(qū)的值
- 可以根據(jù)PARTITIONED BY創(chuàng)建分區(qū)表,一個表可以擁有一個或者多個分區(qū),每個分區(qū)以文件夾的形式單獨存在表文件夾的目錄下。
- 分區(qū)是以字段的形式在表結(jié)構(gòu)中存在,通過describe table命令可以查看到字段存在,但是該字段不存放實際的數(shù)據(jù)內(nèi)容,僅僅是分區(qū)的表示。
- 分區(qū)建表分為2種,一種是單分區(qū),也就是說在表文件夾目錄下只有一級文件夾目錄。另外一種是多分區(qū),表文件夾下出現(xiàn)多文件夾嵌套模式。
單分區(qū)相關(guān)語法
#單分區(qū)表創(chuàng)建 CREATE TABLE tmp_xx(id int,name String) partitioned by (d string); #添加分區(qū) ALTER TABLE tmp_partition ADD IF NOT EXISTS PARTITION (d='20220628') #刪除分區(qū) ALTER TABLE tmp_partition DROP IF EXISTS PARTITION (d='20220628') #數(shù)據(jù)寫入 INSERT OVERWRITE TABLE tmp_xx PARTITION (d='20220629') SELECT id, name FROM tmp_yy limit 10; #查看分區(qū)數(shù)據(jù) select * from tmp_xx where d='20220629' #查看表分區(qū) show partitions table; #查看目錄 hadoop dfs -du -h /user/hive/warehouse/tmp_xxx
多分區(qū)相關(guān)語法
#多分區(qū)表創(chuàng)建 CREATE TABLE tmp_xx(id int,name String) partitioned by (d String,h String); #數(shù)據(jù)寫入 INSERT OVERWRITE TABLE tmp_xx PARTITION (d='20220629',h='15') SELECT id, name FROM tmp_yy limit 10; #查看分區(qū)數(shù)據(jù) select * from tmp_xx where d='20220629' and h='15'
2.動態(tài)分區(qū)
執(zhí)行時才知道分區(qū)的值,相比于靜態(tài)分區(qū)可以一次寫入多個分區(qū)數(shù)據(jù),而不用在每次分區(qū)寫入的時候一次執(zhí)行多次insert,其他的地方和靜態(tài)分區(qū)都是一樣的。
官方文檔:https://cwiki.apache.org/confluence/display/Hive/DynamicPartitions
特點:
- 在INSERT … SELECT …查詢中,必須在SELECT語句中的列中最后指定動態(tài)分區(qū)列,并按PARTITION()子句中出現(xiàn)的順序進行排列
- 如果動態(tài)分區(qū)和靜態(tài)分區(qū)一起使用,必須是靜態(tài)分區(qū)的字段在前,動態(tài)分區(qū)的字段在后。
想要使用動態(tài)分區(qū)需要hive開啟動態(tài)分區(qū),參數(shù)如下
set hive.exec.dynamic.partition=true; --開啟動態(tài)分區(qū) 默認為false,不開啟 set hive.exec.dynamic.partition.mode=nonstrict; --指定動態(tài)分區(qū)模式,默認為strict 下面參數(shù)可選 SET hive.exec.max.dynamic.partitions=2048; SET hive.exec.max.dynamic.partitions.pernode=256; SET hive.exec.max.created.files=10000; SET hive.error.on.empty.partition=true;
語法:
#寫入數(shù)據(jù) INSERT overwrite TABLE tmp_partition PARTITION(d) SELECT id,NAME,d FROM tmp_xxx #寫入多分區(qū)數(shù)據(jù) INSERT overwrite TABLE tmp_partition PARTITION(d,h) SELECT id,NAME,d,h FROM tmp_xxx #混合分區(qū)使用,使用動態(tài)分區(qū)和靜態(tài)分區(qū),靜態(tài)分區(qū)必須在前 INSERT overwrite TABLE tmp_partition PARTITION(d='20220629',h) SELECT id,NAME,h FROM tmp_xxx
4.分桶表
對比分區(qū)表,分桶表是對數(shù)據(jù)進行更加細粒度的劃分。一般用的比較少,在數(shù)據(jù)量比較小的時候使用分桶表可能性能更差。
分桶表將整個數(shù)據(jù)內(nèi)容按照分桶字段的哈希值進行區(qū)分,使用該哈希值除以桶的個數(shù)得到取余數(shù),bucket_id = column.hashcode % bucket.num,余數(shù)決定了該條記錄會被分在哪個桶中。余數(shù)相同的記錄會分在一個桶里。需要注意的是,在物理結(jié)構(gòu)上,一個桶對應(yīng)一個文件,而分區(qū)表只是一個目錄,至于目錄下有多少數(shù)據(jù)是不確定的。
分桶表和分區(qū)表的區(qū)別
分區(qū)表 | 分桶表 | |
存儲結(jié)構(gòu) | 文件 | 目錄/文件夾 |
創(chuàng)建語句 | partitioned by | clustered by,指定桶個數(shù) |
數(shù)量 | 分區(qū)個數(shù)可增長 | 分桶數(shù)指定后不在增長 |
用途 | 避免掃描全表,通過分區(qū)列指定查詢目錄提高查詢速度 | 抽樣及大表join時提高效率 |
想要使用分桶表需要開啟分桶機制,默認開啟
set hive.enforce.bucketing=true
建表
CREATE TABLE tmp_bucket(id INT,NAME STRING) clustered BY (id) INTO 4 buckets
寫入數(shù)據(jù)之后查看文件結(jié)構(gòu),發(fā)現(xiàn)表文件夾下有4個文件,說明分桶成功
1.抽樣
#建表 select columns from table tablesample(bucket x out of y on column); -- x:表示從第幾個分桶進行抽樣 -- y:表示每隔幾個分桶取一個分桶,y必須為表bucket的整數(shù)倍或者因子 #從分桶表的建表語句中可知,我們一共分了4個桶,所以我們這里x取1,y取2 一共抽取2(4/2)個桶,從第一個桶開始,每隔2個桶抽取一次,即第一個桶和 第三個桶。 SELECT id,NAME FROM tmp_bucket tablesample(bucket 1 OUT of 2 ON id) LIMIT 10
2.map-side join
獲得更高的查詢處理效率。桶為表加上了額外的結(jié)構(gòu),Hive 在處理有些查詢時能利用這個結(jié)構(gòu)。
具體而言,連接兩個在(包含連接列的)相同列上劃分了桶的表,可以使用 Map 端連接 (Map-side join)高效的實現(xiàn)。比如JOIN操作。對于JOIN操作兩個表有一個相同的列,如果對這兩個表都進行了桶操作。那么將保存相同列值的桶進行JOIN操作就可以,可以大大較少JOIN的數(shù)據(jù)量。
需要注意的是這種方式只適用于大表,小表不適用,表的大小至少得幾個G或幾個T,此功能未做測試。
5.表的文件存儲格式
- STORED AS 指定表的文件存儲格式默認TEXT FILE(文本文件)格式存儲,
- 默認存儲格式可通過hive.default.fileformat配置修改
- 其它常用存儲格式 Parquet(列式),Avro,ORC(列式),Sequence File,INPUT FORMAT & OUTPUT FORMAT (二進制)
1.TEXTFILE
STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
純文本文件存儲,TEXTFILE默認是hive的默認存儲方式,用戶可以通過配置 hive.default.fileformat 來修改。
在HDFS上可直接查看數(shù)據(jù),可結(jié)合Gzip、Bzip2使用(系統(tǒng)自動檢查,執(zhí)行查詢時自動解壓),但是使用這種方式,hive不會對數(shù)據(jù)進行切分,無法對數(shù)據(jù)進行并行操作。
存儲方式:行存儲
優(yōu)勢:可使用任意的分割符進行分割;在hdfs上可查可標記;加載速度較快;
劣勢:不會對數(shù)據(jù)進行壓縮處理,存儲空間較大、磁盤開銷大、數(shù)據(jù)解析開銷大。
2.SEQUENCEFILE
STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.SequenceFileInputFormat' OUTPUTFORMAT 'org.apache.hadoop.mapred.SequenceFileOutputFormat'
存儲為壓縮的序列化文件。是hadoop中的標準序列化文件,可壓縮,可分塊。SequenceFile是一個由二進制序列化過的key/value的字節(jié)流組成的文本存儲文件,它可以在map/reduce過程中的input/output 的format時被使用。
SequenceFile 有三種壓縮態(tài):
- Uncompressed – 未進行壓縮的狀
- record compressed - 對每一條記錄的value值進行了壓縮(文件頭中包含上使用哪種壓縮算法的信息)
- block compressed – 當數(shù)據(jù)量達到一定大小后,將停止寫入進行整體壓縮,整體壓縮的方法是把所有的keylength,key,vlength,value 分別合在一起進行整體壓縮,塊的壓縮效率要比記錄的壓縮效率高 hive中通過設(shè)置SET mapred.output.compression.type=BLOCK;來修改SequenceFile壓縮方式。
存儲方式:行存儲
優(yōu)勢:存儲時候會對數(shù)據(jù)進行壓縮處理,存儲空間??;支持文件切割分片;查詢速度比TestFile速度快;
劣勢:無法可視化展示數(shù)據(jù);不可以直接使用load命令對數(shù)據(jù)進行加載;自身的壓縮算法占用一定的空間
3.RCFILE
STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.RCFileInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.RCFileOutputFormat'
文件存儲方式為二進制文件。以RcFile文件格式存儲的表也會對數(shù)據(jù)進行壓縮處理,在HDFS上以二進制格式存儲,不可直接查看。
RCFILE是一種行列存儲相結(jié)合的存儲方式,該存儲結(jié)構(gòu)遵循的是“先水平劃分,再垂直劃分”的設(shè)計里面。首先,將數(shù)據(jù)按行分塊形成行組,這樣可以使同一行的數(shù)據(jù)在一個節(jié)點上。然后,把行組內(nèi)的數(shù)據(jù)列式存儲,將列維度的數(shù)據(jù)進行壓縮,并提供了一種lazy解壓技術(shù)。
Rcfile在進行數(shù)據(jù)讀取時會順序處理HDFS塊中的每個行組,讀取行組的元數(shù)據(jù)頭部和給定查詢需要的列,將其加載到內(nèi)存中并進行解壓,直到處理下一個行組。但是,rcfile不會解壓所有的加載列,解壓采用lazy解壓技術(shù),只有滿足where條件的列才會被解壓,減少了不必要的列解壓。
在rcfile中每一個行組的大小是可變的,默認行組大小為4MB。行組變大可以提升數(shù)據(jù)的壓縮效率,減少并發(fā)存儲量,但是在讀取數(shù)據(jù)時會占用更多的內(nèi)存,可能影響查詢效率和其他的并發(fā)查詢。用戶可根據(jù)具體機器和自身需要調(diào)整行組大小。
存儲方式:行列混合的存儲格式,將相近的行分塊后,每塊按列存儲。
優(yōu)勢:基于列存儲,壓縮快且效率更高,;占用的磁盤存儲空間小,讀取記錄時涉及的block少,IO小;查詢列時,讀取所需列只需讀取列所在塊的頭部定義,讀取速度快(在讀取全量數(shù)據(jù)時,性能與Sequence沒有明顯區(qū)別);
劣勢:無法可視化展示數(shù)據(jù);導入數(shù)據(jù)時耗時較長;不能直接使用load命令對數(shù)據(jù)進行加載;自身的壓縮算法占用一定空間,但比SequenceFile所占空間稍??;
4.ORC
ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.orc.OrcSerde' STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.orc.OrcInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat'
ORC (Optimized Record Columnar)是RC File 的改進,主要在壓縮編碼、查詢性能上進行了升級; ORC具備一些高級特性,如:update操作,支持ACID,支持struct、array復雜類型。Hive1.x版本后支持事務(wù)和update操作,就是基于ORC實現(xiàn)的(目前其他存儲格式暫不支持)。
存儲方式:按行組分割整個表,行組內(nèi)進行列式存儲。數(shù)據(jù)按行分塊,每塊按照列存儲
文件結(jié)構(gòu):
首先做一些名詞注釋:
ORC文件:保存在文件系統(tǒng)上的普通二進制文件,一個ORC文件中包含多個stripe,每個stripe包含多條記錄,這些記錄按照列進行獨立存儲。
文件級元數(shù)據(jù):包括文件的描述信息postscript、文件meta信息(包括整個文件的統(tǒng)計信息)、所有的stripe的信息和schema信息。
Stripe:一組行形成一個stripe,每次讀取文件是以行組為單位的,一般為hdfs的塊大小,保存了每一列的索引和數(shù)據(jù)。
Stripe元數(shù)據(jù):保存stripe的位置、每個列在該stripe的統(tǒng)計信息以及所有的stream類型和位置。
Row group:索引的最小單位,一個stripe中包含多個row group,默認為10000個值組成。
Stream:一個stream表示文件中的一段有效的數(shù)據(jù),包括索引和數(shù)據(jù)。索引stream保存每一個row group的位置和統(tǒng)計信息,數(shù)據(jù)stream包括多種類型的數(shù)據(jù),具體情況由該列類型和編碼方式?jīng)Q定。
在ORC文件中保存了三個層級的統(tǒng)計信息,分別為文件級別、stripe級別和row group級別,他們可以根據(jù)下發(fā)的搜索參數(shù)判斷是否可以跳過某些數(shù)據(jù)。在這些統(tǒng)計信息中包含成員數(shù)和是否有null值,且對不同類型的數(shù)據(jù)設(shè)置了特定統(tǒng)計信息。
ORC的文件結(jié)構(gòu)如下:
文件級別:
在ORC文件的末尾記錄了文件級別的統(tǒng)計信息,包括整個文件的列統(tǒng)計信息。這些信息主要是用于查詢的優(yōu)化,也可以為一些簡單的聚合查詢?nèi)鏼ax、min、sum輸出結(jié)果。
Stripe級別:
保留行級別的統(tǒng)計信息,用于判斷該Stripe中的記錄是否符合where中的條件,是否需要被讀取。
Row group級別:
進一步避免讀取不必要的數(shù)據(jù),在邏輯上將一個column的index分割成多個index組(默認為10000,可配置)。以這些index記錄為一個組,對數(shù)據(jù)進行統(tǒng)計。在查詢時可根據(jù)組級別的統(tǒng)計信息過濾掉不必要的數(shù)據(jù)。
優(yōu)勢:具有很高的壓縮比,且可切分;由于壓縮比高,在查詢時輸入的數(shù)據(jù)量小,使用的task減少,所以提升了數(shù)據(jù)查詢速度和處理性能;每個task只輸出單個文件,減少了namenode的負載壓力;在ORC文件中會對每一個字段建立一個輕量級的索引,如:row group index、bloom filter index等,可以用于where條件過濾;可使用load命令加載,但加載后select * from xx;無法讀取數(shù)據(jù);查詢速度比rcfile快;支持復雜的數(shù)據(jù)類型;
劣勢:無法可視化展示數(shù)據(jù);讀寫時需要消耗額外的CPU資源用于壓縮和解壓縮,但消耗較少;對schema演化支持較差;
5.Parquet
ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
Parquet 最初的設(shè)計動機是存儲嵌套式數(shù)據(jù),,比如Protocolbuffer,thrift,json等,將這類數(shù)據(jù)存儲成列式格式,以方便對其高效壓縮和編碼,且使用更少的IO操作取出需要的數(shù)據(jù)??偟膩碚fParquet與orc相比的主要優(yōu)勢是對嵌套結(jié)構(gòu)的支持,orc的多層級嵌套表達復雜底層未采用google dremel類似實現(xiàn),性能和空間損失較大。
存儲方式:列式存儲
優(yōu)勢:具有高效壓縮和編碼,是使用時有更少的IO取出所需數(shù)據(jù),速度比ORC快;其他方面類似于ORC;
劣勢:不支持update;不支持ACID;不支持可視化展示數(shù)據(jù)
ORC | Parquet | |
存儲方式 | 列存儲 | 列存儲 |
嵌套式結(jié)構(gòu) | orc的多層級嵌套表達復雜且底層未采用google dremel類似實現(xiàn),性能和空間損失較大 | 支持比較完美 |
ACID | 支持 | 不支持 |
update操作 | 支持 | 不支持 |
索引 | 粗粒度索引,block/group/chuck級別統(tǒng)計信息 | 粗粒度索引,file/stripe/row級別統(tǒng)計信息,不能精確到列建索引。 |
查詢性能 | 比parquet稍高 | 比ORC稍低 |
壓縮 | 高 | 低 |
6.總結(jié)
需要查看到所存儲的具體數(shù)據(jù)內(nèi)容的小型查詢,可以采用默認文件格式textfile。不需要查看具體數(shù)據(jù)的小型查詢時可使用sequencefile文件格式。當用于大數(shù)據(jù)量的查詢時,可以使用rcfile、ORC、parquet,一般情況下推薦使用ORC,若字段數(shù)較多,不涉及到更新且取部分列查詢場景多的情況下建議使用parquet。
需要通過sqoop+hive與關(guān)系型數(shù)據(jù)庫交互時,import和export的hive表需要是textfile格式。如果需要操作的表不是此存儲格式,需要insert到textfile格式的表中再操作。
一、ORC與Parquet總結(jié)對比 1、orc不支持嵌套結(jié)構(gòu)(但可通過復雜數(shù)據(jù)類型如map<k,v>間接實現(xiàn)),parquet支持嵌套結(jié)構(gòu) 2、orc與hive的兼容性強,作為hive的常用存儲格式 3、orc相比parquet的存儲壓縮率較高,如下圖 4、orc導入數(shù)據(jù)和數(shù)據(jù)查詢的的速度比parquet快
5.表的行存儲格式(row format)
ROW FORMAT:控制文件數(shù)據(jù)和hive表中Row數(shù)據(jù)的轉(zhuǎn)換,有DELIMITED和SERDE兩種值,可以將ROW FORMAT看做FileFormat的功能支持或?qū)崿F(xiàn),我們設(shè)置了FileFormat后,底層數(shù)據(jù)格式的轉(zhuǎn)換是依賴SerDe來做的。
DELIMITED:表示使用默認的LazySimpleSerDe類來處理數(shù)據(jù),一般用于用分隔符分隔的文本文,默認使用native Serde
SERDE:Serde是 Serializer/Deserializer的簡寫。hive使用Serde進行行對象的序列與反序列化。Hive使用SerDe讀取和寫入行對象。讀取就是hdfs文件反序列化成對象,寫入就是對象序列化存儲hdfs
read:HDFS files --> InputFileFormat --> <key, value> --> Deserializer --> Row object write: row object --> Serializer --> <key, value> --> OutputFileFormat --> HDFS files
一般用于比較復雜格式的文本文件,比如JSON格式行、正則表達式可以匹配出的行,像訪問日志。
6.表屬性
1.壓縮
1.為什么要壓縮
可以提高吞吐量和性能,大量減少磁盤存儲空間。同時壓縮也會減少文件在磁盤間的傳輸及IO消耗,但是壓縮和截壓縮會帶來額外的CPU開銷,但是可以節(jié)省更多的IO消耗和內(nèi)存使用。
2.壓縮常見的格式
壓縮方式 | 壓縮后大小 | 壓縮速度 | 是否可切分 |
GZIP | 中 | 中 | 否 |
BZIP2 | 小 | 慢 | 是 |
LZO | 大 | 快 | 是 |
Snappy | 大 | 快 | 否 |
3.壓縮性能比較
壓縮算法 原始文件大小 壓縮文件大小 壓縮速度 解壓速度
gzip 8.3GB 1.8GB 17.5MB/S 58MB/S
bzip2 8.3GB 1.1GB 2.4MB/S 9.5MB/S
lzo 8.3GB 2.9GB 49.3MB/S 74.6MB/S
tblproperties ('orc.compress'='snappy') tblproperties ('parquet.compression'='snappy');
3)開啟MAP輸出階段壓縮 (1)開啟hive中間傳輸數(shù)據(jù)壓縮功能
hive (default)>set hive.exec.compress.intermediate=true;
(2)開啟mapreduce中map輸出壓縮功能
hive (default)>set mapreduce.map.output.compress=true;
(3)設(shè)置mapreduce中map輸出數(shù)據(jù)的壓縮方式
hive (default)>set mapreduce.map.output.compress.codec=
org.apache.hadoop.io.compress.SnappyCodec;
4)開啟REDUCE輸出階段壓縮,比map端壓縮事兒多 (1)開啟hive最終輸出數(shù)據(jù)壓縮功能
hive (default)>set hive.exec.compress.output=true;
(2)開啟mapreduce最終輸出數(shù)據(jù)壓縮
hive (default)>set mapreduce.output.fileoutputformat.compress=true;
(3)設(shè)置mapreduce最終數(shù)據(jù)輸出壓縮方式
hive (default)> set mapreduce.output.fileoutputformat.compress.codec =
org.apache.hadoop.io.compress.SnappyCodec;
(4)設(shè)置mapreduce最終數(shù)據(jù)輸出壓縮為塊壓縮
hive (default)> set mapreduce.output.fileoutputformat.compress.type=BLOCK;
在生產(chǎn)環(huán)境中,常用的HIVE存儲格式:列式存儲的orc和parquet
HIVE壓縮格式:冷數(shù)據(jù)-----gzip壓縮(壓縮比高,壓縮解壓縮速度高,不可切割);
非冷數(shù)據(jù)------lzo(可切割)和snappy(不可切割)
LZO支持切片,Snappy不支持切片。 ORC和Parquet都是列式存儲。 ORC和Parquet 兩種存儲格式都是不能直接讀取的,一般與壓縮一起使用,可大大節(jié)省磁盤空間。 選擇:ORC文件支持Snappy壓縮,但不支持lzo壓縮,所以在實際生產(chǎn)中,使用Parquet存儲 + lzo壓縮的方式更為常見,這種情況下可以避免由于讀取不可分割大文件引發(fā)的數(shù)據(jù)傾斜。 但是,如果數(shù)據(jù)量并不大(預測不會有超大文件,若干G以上)的情況下,使用ORC存儲,snappy壓縮的效率還是非常高的。
ORC支持三種壓縮:ZLIB,SNAPPY,NONE。最后一種就是不壓縮,orc默認采用的是ZLIB壓縮。
Parquet支持的壓縮:UNCOMPRESSED、 SNAPPY、GZP和LZO,默認UNCOMPRESSED不壓縮
到此這篇關(guān)于hive常見表結(jié)構(gòu)的文章就介紹到這了,更多相關(guān)hive表結(jié)構(gòu)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Maven nexus 安裝nexus私服出現(xiàn)的問題和解決辦法
本文主要介紹安裝nexus私服的時候出現(xiàn)問題的解決辦法,這里整理了兩種問題并詳細說明了解決辦法,有需要的朋友可以參考下2016-08-08SQL知識點之列轉(zhuǎn)行Unpivot函數(shù)
這篇文章主要給大家介紹了關(guān)于SQL知識點之列轉(zhuǎn)行Unpivot函數(shù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用SQL具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧2019-09-09你應(yīng)該知道的區(qū)塊鏈運作7個核心技術(shù)
這篇文章主要為大家詳細介紹了你應(yīng)該知道的區(qū)塊鏈運作7個核心技術(shù),具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-01-01將sqlite3中數(shù)據(jù)導入到mysql中的實戰(zhàn)教程
最近因為工作的需求,需要將sqlite3中的數(shù)據(jù)導入到mysql中去,發(fā)現(xiàn)網(wǎng)上的一些教程都不夠詳細,索性自己寫一篇,下面這篇文章主要給大家介紹了關(guān)于將sqlite3數(shù)據(jù)庫中的數(shù)據(jù)導入到mysql數(shù)據(jù)庫中的相關(guān)資料,需要的朋友可以參考下。2017-07-07一款高顏值且免費的 SQL 開發(fā)工具之Beekeeper Studio詳解
今天給大家推薦一款適用于Windows,Linux和Mac的跨平臺免費的開源SQL編輯器和數(shù)據(jù)庫管理應(yīng)用程序 —— beekeeper-studio。對Beekeeper Studio 安裝使用教程感興趣的朋友一起看看吧2021-09-09數(shù)據(jù)庫系統(tǒng)結(jié)構(gòu)詳解之三級模式結(jié)構(gòu)
這篇文章主要為大家介紹了數(shù)據(jù)庫系統(tǒng)的結(jié)構(gòu),文中通過圖文的方式詳細的解析了數(shù)據(jù)庫系統(tǒng)結(jié)構(gòu)的三級模式結(jié)構(gòu),有需要的朋友可以借鑒參考下2021-09-09