HIVE Row Formats和SerDe

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HIVE Row Formats和SerDe相关的知识,希望对你有一定的参考价值。

参考技术A

Serde是 Serializer/Deserializer的简写。hive使用Serde进行行对象的序列与反序列化。

序列化是对象转换为字节序列的过程。
序列化是字节序列恢复为对象的过程。
对象的序列化主要有两种用途:对象的持久化,即把对象转换成字节序列后保存到文件中;对象数据的网络传送。
除了上面两点, hive的序列化的作用还包括:Hive的反序列化是对key/value反序列化成hive table的每个列的值。Hive可以方便的将数据加载到表中而不需要对数据进行转换,这样在处理海量数据时可以节省大量的时间。

SerDe说明hive如何去处理一条记录,包括Serialize/Deserilize两个功能, Serialize把hive使用的java object转换成能写入hdfs的字节序列,或者其他系统能识别的流文件。Deserilize把字符串或者二进制流转换成hive能识别的java object对象。比如:select语句会用到Serialize对象, 把hdfs数据解析出来;insert语句会使用Deserilize,数据写入hdfs系统,需要把数据序列化。

当是读取hdfs文件时key部分将会被忽略,在写入hdfs时key总是一个常量,一般的行的数据是存储在value中的。

你可以创建表时使用用户 自定义的Serde或者native Serde 如果 ROW FORMAT没有指定或者指定了 ROW FORMAT DELIMITED就会使用native Serde。 hive已经实现了许多自定义的Serde,之前我们在介绍stored时也涉及到:

使用正则来序列化行数据,如下例子:

按照json格式存储text文件

按照 CSV / TSV格式来存储text文件。
ROW FORMAT SERDE
‘org.apache.hadoop.hive.serde2.OpenCSVSerde’
STORED AS TEXTFILE

如下例子创建tsv文件,默认是csv文件的分隔符

hive的CSVSerde基于 csv-serde 实现。

最后附上 Hive User Meeting August 2009 Facebook 对serde的讲解。

以上是关于HIVE Row Formats和SerDe的主要内容,如果未能解决你的问题,请参考以下文章

Hive分析窗体函数之NTILE,ROW_NUMBER,RANK和DENSE_RANK

hive的row_number()rank()和dense_rank()的区别以及具体使用

用python 实现 hive sql join和row_number

在 HIVE 中增加现有的 row_sequence

[HIVE] rank() dense_rank() row_number()的学习

Hive ROW_NUMBER TopN 性能优化