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总结的更多相关文章

  1. hive中导入json格式的数据(hive分区表)

    hive中建立外部分区表,外部数据格式是json的如何导入呢? json格式的数据表不必含有分区字段,只需要在hdfs目录结构中体现出分区就可以了 This is all according to t ...

  2. hive中的NULL(hive空值处理)

    HIVE表中默认将NULL存为\N,可查看表的源文件(hadoop fs -cat或者hadoop fs -text),文件中存储大量\N, 这样造成浪费大量空间.而且用java.python直接进入 ...

  3. hdfs数据到hive中,以及hdfs数据隐身理解

    hdfs数据到hive中: 假设hdfs中已存在好了数据,路径是hdfs:/localhost:9000/user/user_w/hive_g2park/user_center_enterprise_ ...

  4. Hive中导入Amazon S3中的分区表数据的操作

    Hive中创建S3的外部表 数据在S3存放的数据是按时间纬度存放的,每天的数据存放在各自的目录下,目录结构如下截图: 每个目录下面的数据是CSV文件,现在将其导入到Hive中进行查询,通过创建对应的表 ...

  5. hive中array嵌套map以及行转列的使用

    1. 数据源信息 {"student": {"name":"king","age":11,"sex" ...

  6. hive中创建hive-json格式的表及查询

    在hive中对于json的数据格式,可以使用get_json_object或json_tuple先解析然后查询. 也可以直接在hive中创建json格式的表结构,这样就可以直接查询,实战如下(hive ...

  7. MR案例:MR和Hive中使用Lzo压缩

    在MapReduce中使用lzo压缩 1).首先将数据文件在本地使用lzop命令压缩.具体配置过详见配置hadoop集群的lzo压缩 //压缩lzop,解压缩lzop -d [root@ncst wo ...

  8. 在Hive中使用Avro

    作者:过往记忆 | 新浪微博:左手牵右手TEL | 可以转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明博客地址:http://www.iteblog.com/文章标题:<在Hiv ...

  9. HIVE中join、semi join、outer join

    补充说明 left outer join where is not null与left semi join的联系与区别:两者均可实现exists in操作,不同的是,前者允许右表的字段在select或 ...

  10. Hive中的HiveServer2、Beeline及数据的压缩和存储

    1.使用HiveServer2及Beeline HiveServer2的作用:将hive变成一种server服务对外开放,多个客户端可以连接. 启动namenode.datanode.resource ...

随机推荐

  1. KingbaseES 配置 Hugepage

    前言 大页的作用是为了提升内存管理的效率,减少内存管理资源消耗(节省pagetable的开销),特别是对于大内存的情况,同时,由于hugepage相对与4k的页面,它更不容易被交换出内存,因此,它的作 ...

  2. 《2020年IT行业项目管理调查报告》重磅发布

    近年来,IT行业迅速发展,物联网.敏捷.DevOps等已成为行业的热门话题.为更好地了解行业现状,禅道项目管理软件联合各合作伙伴于2021年1月开展了针对IT行业的问卷调查,并推出了<2020年 ...

  3. 提高生产力!这10个Lambda表达式必须掌握,开发效率嘎嘎上升!

    在Java8及更高版本中,Lambda表达式的引入极大地提升了编程的简洁性和效率.本文将围绕十个关键场景,展示Lambda如何助力提升开发效率,让代码更加精炼且易于理解. 集合遍历 传统的for-ea ...

  4. #状压dp,贪心#CF1316E Team Building

    题目 为了组织一支排球队,你需要为队伍里的\(p\)个不同的位置,从\(n\)个人中选出\(p\)个人, 且每个位置上都恰好有一个人.另外还需要从剩下的人中选出恰好\(k\)个人作为观众. 对于第\( ...

  5. SSM框架整合——书籍管理系统

    1.准备工作: 1.1.环境要求 IDEA MySQL 5.7.19 Tomcat 9 Maven 3.6 1.2.数据库设计 创建一个存放书籍数据的数据库表: CREATE DATABASE `ss ...

  6. VS Qt扩展插件下载地址

    使用vs开发qt项目,需要安装qt插件 QT插件下载地址:https://mirrors.ustc.edu.cn/qtproject/official_releases/vsaddin/

  7. 我为什么选择Wiki.js记笔记?

    很长一段时间里,我都被困扰着,感觉陷入了笔记的泥潭,而积累的如此多的笔记也没有形成我自己的知识体系. 之前的记笔记方式 笔记的来源 微信公众号 技术博客 纸质书籍 官网文档 PDF 自己的零散想法 网 ...

  8. 2、androidStudio调用Unity方法

    1.导入Unity的Classes.jar文件 (1).首先找到这个包在哪 Unity版本为5.0之前时,classes.jar的路径: unity的安装路径\Editor\Data\Playback ...

  9. Hessian反序列化分析

    RPC协议 RPC全称为Remote Procedure Call Protocol(远程调用协议),RPC和之前学的RMI十分类似,都是远程调用服务,它们不同之处就是RPC是通过标准的二进制格式来定 ...

  10. HarmonyOS应用侧与前端页面数据通道建立

    一.  应用侧调用前端页面函数 应用侧可以通过runJavaScript()方法调用前端页面的JavaScript相关函数.在下面的示例中,点击应用侧的"runJavaScript" ...