Hive_10. Hive中常用的 SerDe 和 当前社区的状态

本文介绍了Hive中的SerDe,包括其在数据读写过程中的作用,以及如何使用JSON SerDe处理数据。讨论了LazySimpleSerDe、ColumnarSerDe、RegexSerDe、HBaseSerDe、AvroSerDe、ParquetHiveSerDe和OpenCSVSerDe等常见SerDe,并提供了Jira链接查看其社区状态。
摘要由CSDN通过智能技术生成
最近在 Google 上看到一篇在 Hive 中利用正则表达式来自定义反序列化处理文本文件。百度后发现这块知识目前还没有人系统的总结一下。

所以我就不才把之前记录的资料跟大家分享一下:

SerDe 是Serializer 和 Deserializer 的简称。它是 Hive用来处理记录并且将它们映射到 Hive 表中的字段数据类型。为了更好的阐述使用 SerDe 的场景,我们需要了解一下 Hive 是如何读数据的(类似于 HDFS 中数据的读写操作):
1. 从 HDFS 读取数据
2. 通过 InputFormat 来处理数据,根据定义的数据类型来将文件分割成键值对记录。在 Hive 中,我们可以通过 Create Table。。。Stored As <File_Format> 来指定使用哪种 InputFormat 来读取数据。
3. SerDe 中 JAVA 的 Deserializer 会被调用来格式化数据并且映射到表中对应的字段和数据类型。

对于数据读取,我们希望使用 JSON SerDe 来从 HDFS 中读取文本文件格式数据,并且根据正确的 schema 将 JSON每一行的属性和值与 Hive 表中的行进行转换。
如果写入数据:
1. 写入的数据(例如 Insert 语句)会通过 SerDe 定义的 Serlializer 类进行转换成 OutputFormat 类能够读取的格式。
2. 数据会被OutputFormat 继承类进行处理,创建 RecordWrite 对象。类似于 InputFormat 的实现。OutputFormat 的实现方法跟表写入数据的方式相同。
3.  将数据写入到表中(数据将保存在 HDFS)

在实际写入数据的时候,我们可以使用 JSON SerDe来 Hive 表中一个 行列转数据转换成 JSON 文本,保存到 HDFS 中。
Hive 近期发布的 org.apache.hadoop.hive.serde2 库,之前的的 org.apache.hadoop.hive.serde2 库已经摒弃不建议使用了。接下来我们将详细介绍一下 Hive 中常用的 SerDe :

SerDe 类型
具体应用
LazySimpleSerDe: 内置SerDe(org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe) ,用来处理文本文件格式:TEXTFILE 

jdbc:hive2://> CREATE TABLE test_serde_lz
. . . . . . .> STORED AS TEXTFILE AS
. . . . . . .> SELECT name from employee;
No rows affected (32.665 seconds)
ColumnarSerDe: 用来处理 RCFile 的内置 SerDe jdbc:hive2://> CREATE TABLE test_serde_cs
. . . . . . .> ROW FORMAT SERDE

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值