Hive中的FileFormat、RowFormat和SerDe总结
Hive如何读写数据?
我们知道,hive表的数据是存储在hdfs文件系统中的。那么Hive是如何将hdfs上的数据文件,映射成一张张表呢,今天就来理清楚这个问题。
官方文档中对于Hive读数据的流程如下:

精炼一下:Hive的执行引擎首先通过InputFormat读取一条一条的数据记录,接着调用Serde.destrialize()来执行记录的反序列化,即将各种格式的数据反序列化为行对象,其中就包括切分和解析字段。
可以简单理解为:Hive使用FileFormat和SerDe读写数据。以读数据为例:InputFormat用于将数据拆成一条一条的记录,SerDe用于从一条记录中拆分字段。

什么是FileFormat?
FileFormat即文件格式,Hive内置文件格式包括textfile、orc、parquet、avro、jsonfile等,在建表语句中的stored as ...中指定。 其中,textfile是Hive默认的文件存储格式,可以通过hive.default.fileformat配置。
这几种文件格式,都有各自默认的SerDe、InputFormat和OutputFormat,举个例子:当我们指定Stored as orc的时候,等同于指定了下面三个配置:

需要注意的是,同一种文件格式的每一行数据的行格式也会有所不同,这就涉及到另一个概念:RowFormat。
什么是RowFormat?
RowFormat即行格式。比如同样是textFile文件,其中的行格式可以是RegEx正则类型、Json类型、CSV/TSV等。行格式不同,从一条记录中拆分字段的方式也不同。此时就需要指定不同的SerDe。
什么是SerDe?
SerDe是Serialize/Deserilize的简称,用于序列化和反序列化,SerDe能为表解析、拆分列,且对列指定相应的数据。在建表语句中有两种定义行格式方式:row format delimited或serde ,填写delimited表示使用默认的LazySimpleSerDe类来处理数据,对一行记录按照特定分隔符进行分割;填写SerDe表示使用其他的SerDe,甚至是用户自己自定义的SerDe。如果在建表时没有通过row format语法指定分隔符,则采用默认分隔符:\001。
除了内置的文件格式,Hive还支持用户开发的文件格式,此时,需要显式的指定inputformat 和outputformat,此时若不指定SerDe,会使用默认的SerDe。
Hive中的FileFormat、RowFormat和SerDe总结的更多相关文章
- hive中导入json格式的数据(hive分区表)
hive中建立外部分区表,外部数据格式是json的如何导入呢? json格式的数据表不必含有分区字段,只需要在hdfs目录结构中体现出分区就可以了 This is all according to t ...
- hive中的NULL(hive空值处理)
HIVE表中默认将NULL存为\N,可查看表的源文件(hadoop fs -cat或者hadoop fs -text),文件中存储大量\N, 这样造成浪费大量空间.而且用java.python直接进入 ...
- hdfs数据到hive中,以及hdfs数据隐身理解
hdfs数据到hive中: 假设hdfs中已存在好了数据,路径是hdfs:/localhost:9000/user/user_w/hive_g2park/user_center_enterprise_ ...
- Hive中导入Amazon S3中的分区表数据的操作
Hive中创建S3的外部表 数据在S3存放的数据是按时间纬度存放的,每天的数据存放在各自的目录下,目录结构如下截图: 每个目录下面的数据是CSV文件,现在将其导入到Hive中进行查询,通过创建对应的表 ...
- hive中array嵌套map以及行转列的使用
1. 数据源信息 {"student": {"name":"king","age":11,"sex" ...
- hive中创建hive-json格式的表及查询
在hive中对于json的数据格式,可以使用get_json_object或json_tuple先解析然后查询. 也可以直接在hive中创建json格式的表结构,这样就可以直接查询,实战如下(hive ...
- MR案例:MR和Hive中使用Lzo压缩
在MapReduce中使用lzo压缩 1).首先将数据文件在本地使用lzop命令压缩.具体配置过详见配置hadoop集群的lzo压缩 //压缩lzop,解压缩lzop -d [root@ncst wo ...
- 在Hive中使用Avro
作者:过往记忆 | 新浪微博:左手牵右手TEL | 可以转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明博客地址:http://www.iteblog.com/文章标题:<在Hiv ...
- HIVE中join、semi join、outer join
补充说明 left outer join where is not null与left semi join的联系与区别:两者均可实现exists in操作,不同的是,前者允许右表的字段在select或 ...
- Hive中的HiveServer2、Beeline及数据的压缩和存储
1.使用HiveServer2及Beeline HiveServer2的作用:将hive变成一种server服务对外开放,多个客户端可以连接. 启动namenode.datanode.resource ...
随机推荐
- Python 生成二维码的几种方式、生成条形码
一: # 生成地维码 import qrcode import matplotlib.pyplot as plt from barcode.writer import ImageWriter 创建QR ...
- CLion和WSL配置MPI运行及调试环境
本文将介绍 Windows 下,使用 CLion 和 WSL 配置 MPI 运行及调试环境的方法. 0. 前提 阅读本文前,请确保: Windows 下已启用 WSL2,并安装了任一 Linux 发行 ...
- ARM之AXI总线协议初试
AXI总线协议的学习 1.AXI总线的初步认识 What is AXI? AXI is part of ARM AMBA, a family of micro controller buses fir ...
- java基础 韩顺平老师的 面向对象(高级) 自己记的部分笔记
373,类变量引出 代码就提到了问题分析里的3点 package com.hspedu.static_; public class ChildGame { public static void mai ...
- X-Y问题
什么是X-Y问题 X-Y问题就是有人想解决问题X,他觉得Y可能是解决X的方法但不知道Y怎么做:在我们的工作中,需求方给出的来的是Y,而软件工程师不知道需要解决的X是什么. 我理解的X-Y问题是没有找到 ...
- druid开启sql监控平台
1.maven导入依赖 <dependency> <groupId>com.alibaba</groupId> <artifactId>druid< ...
- oracle_fdw扩展使用中异常问题
Oracle_fdw 的使用介绍已经在之前的文章中介绍过了,具体见:https://www.cnblogs.com/kingbase/p/14846479.html. 本篇文章介绍一下可能碰到的问题处 ...
- #排列组合,容斥#洛谷 5684 [CSPJX2019]非回文串
题目 分析 那显然就是\(n!\)减去回文串的方案数 首先如果有超过一个出现奇数次字母那肯定不存在回文串 如果有且仅有一个首先要在次数中选择一个然后其它当偶数处理 偶数那就是首先字母位置选好但顺序可以 ...
- HMS Core Discovery第16期直播预告|与虎墩一起,玩转AI新“声”态
[导读] 随着人工智能不断发展,机器学习技术也开始被广泛地应用到教育.金融.零售.交通.医疗等各个领域,给我们的生活带来巨大的便利.本期Discovery直播以<与虎墩一起,玩转AI新" ...
- zbar:Qt调用zbar做条码识别
编译: zbar Windows编译:https://gitee.com/vvvj/zbar-windows 下载下来后,直接使用vs来编译就可以了. zbar官网:https://zbar.sour ...