HIVE Row Formats和SerDe
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HIVE Row Formats和SerDe相关的知识,希望对你有一定的参考价值。
参考技术ASerde是 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