首页常见问题正文

Hive中Serde有哪些种类?Hive预定义表属性

更新时间:2022-11-08 来源:黑马程序员 浏览量:

Serde是Serializer and Deserializer(序列化和反序列化)的简称,Hive 通过Serde处理Hive数据表中每一行数据的读取和写入,例如查询Hive数据表数据时,HDFS中存放的数据表数据会通过Serializer序列化为字节流便于数据传输;向Hive数据表插入数据时,会通过Deserializer将数据反序列化成Hive数据表的每一行值,方便将数据加载到数据表中,不需要对数据进行转换。

自定义Serde和内置Serde

Hive的Serde分为自定义 Serde和内置Serde,其中使用自定义 Serde 时需要在CREATE TABLE句式中指定ROW FORMAT子句的 row_format值为 Serde,并根据Serde类型指定实现类;内置 Serde需要在 CREATE TABLE句式中指定 ROW FORMAT子句的row_format值为DELIMITED。Hive中常用的自定义Serde和内置Serde如表1和表2所示。

表1 常用的自定义Serde

自定义Serde

介绍

ROW FORMAT SERDE
'org.apache.hadoop.hive.serde2.RegexSerDe'
WITH SERDEPROPERTIES
(
"input,regex"="regex"
)
STORED AS TEXTFILE;
使用正则表达式序列化/反序列
化数据表的每一行数据,其中
regex用于指定正则表达式
ROW FORMAT SERDE
'org.apache.hive.heatalog.data.JsonSerDe
STORED AS TEXTFILE
使用JSON格式序列化/反序列
化数据表的每一行数据
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格式序列化/反序列化数据表的每一行数据,其中separatorChar用于指定CSV 文件的分隔符:quoteChar用于指定CSV文件的应用符;escapeChar用于指定CSV文件的转义符

表2 常用的内置Serde

内置Serde

介绍

FIELDS TERMINATED BY char [ESCAPED
BY char]
FIELDS TERMINATED指定字段分隔符:ESCAPED指定转义符,避免数据中存在与字段分隔符一样的字符,造成混淆
COLLECTION ITEMS TERMINATED
BY char
使用JSON格式序列化/反序列
化数据表的每一行数据
MAP KYS TERMINATED BY char指定MAP中Key和Value 的分隔符
LINES TERMINATED BY char指定行分隔符
NULL. DEFINED AS char自定义空值格式dive默认为'\N'

表属性

通过CREATETABLE句式创建数据表时可以使用TBLPROPERTIES子句指定表属性,Hive表属性分为自定义属性和预定义属性,其中使用自定义属性时,用户可以自定义属性名称(property_name)和属性值(property_value),用于为创建的数据表指定自定义标签,例如指定创建表的作者、创建表的时间等;使用预定义属性时,需要根据Hive规定的属性名称和属性值使用,用于为创建的数据表指定相关配置,有关Hive预定义属性如表3所示。

图3 Hive预定义属性

属性

描述

commenttable_comment表描述
hbase,table,nametable_name集成HBase
immutabletrue 或 false防止意外更新,若为true,则无法通过lnsert实现数据的更新和插入
orc,compressZLIB 或 SNAPPY或 NONE指定ORC压缩方式
transactionaltrue 或 false指定表是否支持ACID(更新、插入、删除)
NO_AUTO_COMPACTIONtrue 或 false表事务属性,指定表是否支持自动紧缩
compactor.mapreduce.map.memory.mbmapper_memory表事务属性,指定紧缩map(内存/MB)作业的属性
compactorthreshold.hive
.compactor,delta,num,threshold
threshold_num表事务属性,如果有超过threshold_num 个
增量目录,则触发轻度紧缩
compactorthreshold.hive
.compactor,delta,num,threshold
threshold_pet表事务属性,如果增量文件的大小与基础文
件的大小比率大于threshold_pet(区间为
0~1).则触发深度紧缩
auto.purgetrue 或 false若为trae,则删除或者覆盖的数据会不经过
回收站直接被删除
EXTERNALtrue 或 false内部表和外部表的转换


分享到:
在线咨询 我要报名
和我们在线交谈!