首頁(yè)常見問(wèn)題正文

Hive中Serde有哪些種類?Hive預(yù)定義表屬性

更新時(shí)間:2022-11-08 來(lái)源:黑馬程序員 瀏覽量:

Serde是Serializer and Deserializer(序列化和反序列化)的簡(jiǎn)稱,Hive 通過(guò)Serde處理Hive數(shù)據(jù)表中每一行數(shù)據(jù)的讀取和寫入,例如查詢Hive數(shù)據(jù)表數(shù)據(jù)時(shí),HDFS中存放的數(shù)據(jù)表數(shù)據(jù)會(huì)通過(guò)Serializer序列化為字節(jié)流便于數(shù)據(jù)傳輸;向Hive數(shù)據(jù)表插入數(shù)據(jù)時(shí),會(huì)通過(guò)Deserializer將數(shù)據(jù)反序列化成Hive數(shù)據(jù)表的每一行值,方便將數(shù)據(jù)加載到數(shù)據(jù)表中,不需要對(duì)數(shù)據(jù)進(jìn)行轉(zhuǎn)換。

自定義Serde和內(nèi)置Serde

Hive的Serde分為自定義 Serde和內(nèi)置Serde,其中使用自定義 Serde 時(shí)需要在CREATE TABLE句式中指定ROW FORMAT子句的 row_format值為 Serde,并根據(jù)Serde類型指定實(shí)現(xiàn)類;內(nèi)置 Serde需要在 CREATE TABLE句式中指定 ROW FORMAT子句的row_format值為DELIMITED。Hive中常用的自定義Serde和內(nèi)置Serde如表1和表2所示。

表1 常用的自定義Serde

自定義Serde

介紹

ROW FORMAT SERDE
'org.apache.hadoop.hive.serde2.RegexSerDe'
WITH SERDEPROPERTIES
(
"input,regex"="regex"
)
STORED AS TEXTFILE;
使用正則表達(dá)式序列化/反序列
化數(shù)據(jù)表的每一行數(shù)據(jù),其中
regex用于指定正則表達(dá)式
ROW FORMAT SERDE
'org.apache.hive.heatalog.data.JsonSerDe
STORED AS TEXTFILE
使用JSON格式序列化/反序列
化數(shù)據(jù)表的每一行數(shù)據(jù)
CREATE TABLE my_table(a string, b string, ….)
ROW FORMAT SERDE
'org.apache.hadoop.hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES (
  "separatorChar" = "\t",
  "quoteChar       ="'"
  "escapeChar"       ="\\"
)
STORED AS TEXTFILE;
使用CSV格式序列化/反序列化數(shù)據(jù)表的每一行數(shù)據(jù),其中separatorChar用于指定CSV 文件的分隔符:quoteChar用于指定CSV文件的應(yīng)用符;escapeChar用于指定CSV文件的轉(zhuǎn)義符

表2 常用的內(nèi)置Serde

內(nèi)置Serde

介紹

FIELDS TERMINATED BY char [ESCAPED
BY char]
FIELDS TERMINATED指定字段分隔符:ESCAPED指定轉(zhuǎn)義符,避免數(shù)據(jù)中存在與字段分隔符一樣的字符,造成混淆
COLLECTION ITEMS TERMINATED
BY char
使用JSON格式序列化/反序列
化數(shù)據(jù)表的每一行數(shù)據(jù)
MAP KYS TERMINATED BY char指定MAP中Key和Value 的分隔符
LINES TERMINATED BY char指定行分隔符
NULL. DEFINED AS char自定義空值格式dive默認(rèn)為'\N'

表屬性

通過(guò)CREATETABLE句式創(chuàng)建數(shù)據(jù)表時(shí)可以使用TBLPROPERTIES子句指定表屬性,Hive表屬性分為自定義屬性和預(yù)定義屬性,其中使用自定義屬性時(shí),用戶可以自定義屬性名稱(property_name)和屬性值(property_value),用于為創(chuàng)建的數(shù)據(jù)表指定自定義標(biāo)簽,例如指定創(chuàng)建表的作者、創(chuàng)建表的時(shí)間等;使用預(yù)定義屬性時(shí),需要根據(jù)Hive規(guī)定的屬性名稱和屬性值使用,用于為創(chuàng)建的數(shù)據(jù)表指定相關(guān)配置,有關(guān)Hive預(yù)定義屬性如表3所示。

圖3 Hive預(yù)定義屬性

屬性

描述

commenttable_comment表描述
hbase,table,nametable_name集成HBase
immutabletrue 或 false防止意外更新,若為true,則無(wú)法通過(guò)lnsert實(shí)現(xiàn)數(shù)據(jù)的更新和插入
orc,compressZLIB 或 SNAPPY或 NONE指定ORC壓縮方式
transactionaltrue 或 false指定表是否支持ACID(更新、插入、刪除)
NO_AUTO_COMPACTIONtrue 或 false表事務(wù)屬性,指定表是否支持自動(dòng)緊縮
compactor.mapreduce.map.memory.mbmapper_memory表事務(wù)屬性,指定緊縮map(內(nèi)存/MB)作業(yè)的屬性
compactorthreshold.hive
.compactor,delta,num,threshold
threshold_num表事務(wù)屬性,如果有超過(guò)threshold_num 個(gè)
增量目錄,則觸發(fā)輕度緊縮
compactorthreshold.hive
.compactor,delta,num,threshold
threshold_pet表事務(wù)屬性,如果增量文件的大小與基礎(chǔ)文
件的大小比率大于threshold_pet(區(qū)間為
0~1).則觸發(fā)深度緊縮
auto.purgetrue 或 false若為trae,則刪除或者覆蓋的數(shù)據(jù)會(huì)不經(jīng)過(guò)
回收站直接被刪除
EXTERNALtrue 或 false內(nèi)部表和外部表的轉(zhuǎn)換


分享到:
在線咨詢 我要報(bào)名
和我們?cè)诰€交談!