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. flink scala 从Oracle同步数据到MySql

    pom <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> ...

  2. KingbaseES 扩展插件src_restrict 介绍

    插件简介 src_restrict是KingbaseES的一个扩展插件,主要用于支持来源限制功能,该功能通过黑白名单来实现.插件src_restrict默认已经加载. 查看插件是否加载 show sh ...

  3. KingbaseES V8R6集群运维系列 -- 修改ssh通信为 sys_securecmdd 通信

    一.适用于: 本文档使用于KingbaseES V008R006版本. 二.关于SYS_SECURECMDD: sys_securecmdd是KingbaseES集群自带的工具,集群监控.管理集群时通 ...

  4. #dp,模型转换,排列组合#AT1983 [AGC001E] BBQ Hard

    题目 有两个长度为\(n\)的序列\(a,b\),需要求 \[\sum_{i=1}^n\sum_{j=i+1}^nC(a_i+b_i+a_j+b_j,a_i+a_j) \] 其中\(n\leq 200 ...

  5. 面向OpenHarmony终端的密码安全关键技术

      本文转载自 OpenHarmony TSC 官方微信公众号<峰会回顾第17期 | 面向OpenHarmony终端的密码安全关键技术> 演讲嘉宾 | 何道敬 回顾整理 | 廖   涛 排 ...

  6. HMS Core 3D精准室内定位技术,打造“店铺级”出行体验

    2022年4月28日,在华为折叠旗舰及全场景新品发布上,华为Mate Xs 2折叠屏手机搭载由HMS Core定位服务(Location Kit)提供的3D精准室内定位技术,为用户提供了"店 ...

  7. Python操作临时文件---tempfile

    # 使用标准库中 tempfile 下的 TemporaryFile,NamedTemporaryFile # TemporaryFile(mode='w+b', bufsize=1, suffix= ...

  8. HDC2021技术分论坛:DevEco Testing,新增分布式测试功能

    作者:lixiao,华为终端软件测试首席架构师:mindelong,华为终端软件测试工程师 HarmonyOS自诞生以来,致力于提供全场景智慧解决方案,打造分布式流转.多设备协同的分布式体验.全新解决 ...

  9. mock数据模拟和使用

    安装mock,和案axios npm i mockjs npm i axios 后再vue组件中使用 <script>import axios from 'axios'import Moc ...

  10. SELECT...FROM 表 a,( SELECT...FROM...WHERE...) tc...的一些注意以及多字段之间的模糊查询

    将sql查询结果作为一个表来查询的时候的一些注意事项 因为工作,发现了这种sql的写法,但是有的时候感觉并不是自己想要的结果,自己试着玩了属于是 简单来说,这个查询并不是拼接结果的,而是将结果按照一个 ...