Hive基础

hive的基础部分大致有四部分:Hive数据类型、Hive运算符、Hive数据存储、Hive表存储格式。这四部分是学习hive必须掌握的知识。

一、Hive数据类型

        整体概述

1,hive的数据类型指的是表中列字段类型,类似于编程语言中对变量类型的定义如:浮点型、整型、布尔型等等。

2,hive的数据类型分为两大类:基本数据类型和复杂数据类型。

        基本数据类型包括:数值类型、布尔类型、字符串类型、时间日期类型。

        复杂数据类型包括:Array数组、Map映射、Struct结构体。

        基本数据类型

2字节、4字节、8字节的有符号整数的取值范围:https://blog.csdn.net/m0_48011056/article/details/125153980

基本数据类型

描述

示例

Tinyint

1字节有符号整数

80

Smallint

2字节有符号整数

80

Int

4字节有符号整数

80

Bigint

8字节有符号整数

80

Boolean

布尔类型,True或者False

True,False

Float

单精度浮点数

3.14159

Double

双精度浮点数

3.14159

Decimal

任意精度的带符号小数

Decimal(5,2)用于存储-999.99~999.99的5位数值,小数点后2位

String

变长字符串。使用单引号或双引号

'now is the time',"for all good men"

Varchar

变长字符串

"a",'b'

Char

固定长度字符串

"a",'b'

Date

日期,对应年、月、日

'2021-03-29'

TimeStamp

时间戳

不包含任务的时区信息

Binary

字节数组

用于存储变长的二进制数据

        复杂数据类型

复杂数据类型描述示例
Array一组具有相同数据类型的数据的集合数组friends['Bill','Linus'],第2个元素可以通过friends[1]进行访问
Map一组键值对元组的集合如果字段children的数据类型是Map,其中键值对是'Paul'->18,那么可以通过字段名children['Paul']访问这个元素
Struct封装一组有名字的字段,其类型可以是任意的基本数据类型如果字段address的数据类型是Struct{first String, last String},那么第1个元素可以通过address.first来访问

注意事项:

Hive SQL中,数据类型英文字母大小写不敏感;

除SQL数据类型外,还支持Java数据类型,比如字符串string;

复杂数据类型的使用通常需要和分隔符指定语法配合使用;

如果定义的数据类型和文件不一致,Hive会尝试隐式转换,但是不保证成功。

隐式转换:

与标准SQL类似,HQL支持隐式和显式类型转换。 原生类型从窄类型到宽类型的转换称为隐式转换,反之,则不允许。 下表描述了类型之间允许的隐式转换:

显示转换:

显式类型转换使用CAST函数。 例如,CAST(‘100’ as INT)会将100字符串转换为100整数值。 如果强制转换失败,例如CAST(‘Allen‘ as INT),该函数返回NULL。

二、Hive运算符

Hive有4种类型的运算符:算术运算符、比较运算符、逻辑运算符和复杂运算符。

算数运算符:

比较运算符:

逻辑运算符:

复杂运算符:

三、Hive存储路径

默认存储路径

Hive表默认存储路径是由 ${HIVE_HOME}/conf/hive-site.xml配置文件的hive.metastore.warehouse.dir属性指定,默认值是:/user/hive/warehouse。

Databases 数据库

Hive作为一个数据仓库,在结构上积极向传统数据库看齐,也分数据库(Schema),每个数据库下面有各自的表组成。默认数据库default。

Hive的数据都是存储在HDFS上的,默认有一个根目录,在hive-site.xml中,由参数hive.metastore.warehouse.dir指定。默认值为/user/hive/warehouse。 因此,Hive中的数据库在HDFS上的存储路径为: ${hive.metastore.warehouse.dir}/databasename.db

比如,名为itcast的数据库存储路径为: /user/hive/warehouse/itcast.db

数据模型概念

数据模型:用来描述数据、组织数据和对数据进行操作,是对现实世界数据特征的描述。

Hive的数据模型类似于RDBMS库表结构,此外还有自己特有模型。

Hive中的数据可以在粒度级别上分为三类: Table 表、 Partition 分区、 Bucket 分桶,如图:

四、Hive表存储格式

hive表的存储格式有两类:行式存储、列式存储。

对于这两种的存储格式,其查询方法也不同,基于存储格式可以分为下面这两种查询分时。

行式查询:适用于查一整行,TextFile、SequenceFile使用行存储。

列式查询:适用于查某一列,ORC、Parquet使用列存储。

对于这两种查询方式举个简单例子:(a)为逻辑表,(b)为行式存储,(c)为列式存储

文件格式-TextFile

1、TextFile是Hive中默认的文件格式,存储形式为按行存储

2、工作中最常见的数据文件格式就是TextFile文件,几乎所有的原始数据生成都是TextFile格式,所以Hive设计时考虑到为了避免各种编码及数据错乱的问题,选用了TextFile作为默认的格式。

3、建表时不指定存储格式即为TextFile,导入数据时把数据文件拷贝至HDFS不进行处理。

文件格式-SequenceFile

1,SequenceFile是Hadoop里用来存储序列化的键值对即二进制的一种文件格式。

2,SequenceFile文件也可以作为MapReduce作业的输入和输出,hive也支持这种格式。

文件格式-Parquet

1,Parquet是一种支持嵌套结构的列式存储文件格式,最早是由Twitter和Cloudera合作开发,2015年5月从Apache孵化器里毕业成为Apache顶级项目。

2,是一种支持嵌套数据模型对的列式存储系统,作为大数据系统中OLAP查询的优化方案,它已经被多种查询引擎原生支持,并且部分高性能引擎将其作为默认的文件存储格式

3,通过数据编码和压缩,以及映射下推和谓词下推功能,Parquet的性能也较之其它文件格式有所提升。

Parquet的特点: 高效的数据编码和压缩

文件格式-ORC

1,ORC(OptimizedRC File)文件格式也是一种Hadoop生态圈中的列式存储格式;

2,它的产生早在2013年初,最初产生自Apache Hive,用于降低Hadoop数据存储空间和加速Hive查询速度;

3,2015年ORC项目被Apache项目基金会提升为Apache顶级项目。

1,ORC不是一个单纯的列式存储格式,仍然是首先根据行组分割整个表,在每一个行组内进行按列存储

2,ORC文件是自描述的,它的元数据使用Protocol Buffers序列化,并且文件中的数据尽可能的压缩以降低存储空间的消耗,目前也被Hive、Spark SQL、Presto等查询引擎支持。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/614020.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Beauty algorithm(七)瘦脸

瘦脸的实现采用局部平移法。 一、skills 前瞻 局部平移 二、目标区域定位 左脸: 关键点选择3、5点,基点30 rmax:计算两点5-3间的距离, |x-c|:图像任一点到固定基点c的距离 |m-c|:两固定点距离 右脸: 关键点选择

【MySQL】锁机制

文章目录 一、表级锁和行级锁二、排他锁和共享锁三、InnoDB行级锁行级锁间隙锁意向共享锁和意向排他锁 四、InnoDB表级锁五、死锁六、锁的优化建议 一、表级锁和行级锁 表级锁: 对整张表加锁。开销小,加锁快,不会出现死锁;锁粒度…

STL-list的使用简介

目录 ​编辑 一、list的底层实现是带头双向循环链表 二、list的使用 1、4种构造函数(与vector类似)​编辑 2、迭代器iterator 3、容量(capicity)操作 4、element access 元素获取 5、增删查改 list modifiers 6、list的迭…

Linxu每日智囊

每日分享三个Linux命令,悄悄培养读者的Linux技能。 欢迎关注公众号(NLP Research) apt 作用 包管理器 语法 apt [选项] 软件包 参数: -h:帮助-y:当安装过程提示选择全部为"yes"-q:不显示安装的过程案例 列出所有可更新的软件清单命令sudo apt update升级软…

ROS2——Parameters

节点可以使用参数来配置各项操作,这些参数可以说布尔值、整数、字符串等类型。节点在启动时会读取参数。我们将参数单独列出来,而不是写在源文件中,这样做可以方便我们调试,因为在不同的机器人、环境中,我们需要的参数…

【Unity】Joystick Pack摇杆插件实现锁四向操作

Joystick Pack ​ 简介:一款Unity摇杆插件,非常轻量化 ​ 摇杆移动类型:圆形、横向、竖向 ​ 摇杆类型: Joystick描述Fixed固定位置Floating浮动操纵杆从用户触碰的地方开始,一直固定到触碰被释放。Dynamic动态操纵…

网卡高级设置-提高网络环境

网卡高级设置,提高网络质量排除一些连接问题 一、有线网卡 1、关闭IPv6; 可以关闭协议版本6,因为它会引起一些网络连接问题,而且现在几乎用不到IP6。 2、关闭节约电源模式; 右击计算机->设备->设备管理器-&…

开源C语言库Melon:数据恢复算法

本文讲述开源C语言库Melon中的里德所罗门纠错码的使用。 关于 Melon 库,这是一个开源的 C 语言库,它具有:开箱即用、无第三方依赖、安装部署简单、中英文文档齐全等优势。 Github repo 简介 里德所罗门编码是一种纠错码技术,…

微信小程序的生命周期函数有哪些?

面试官:说说微信小程序的生命周期函数有哪些? 一、是什么 跟vue、react框架一样,微信小程序框架也存在生命周期,实质也是一堆会在特定时期执行的函数 小程序中,生命周期主要分成了三部分: 应用的生命周期…

MacOS安装Miniforge、Tensorflow、Jupyter Lab等(2024年最新)

大家好,我是邵奈一,一个不务正业的程序猿、正儿八经的斜杠青年。 1、世人称我为:被代码耽误的诗人、没天赋的书法家、五音不全的歌手、专业跑龙套演员、不合格的运动员… 2、这几年,我整理了很多IT技术相关的教程给大家&#xff0…

MySQL数据库导入导出远程备份

一 navcat导入导出 导入 选择数据库 选择自己需要的的脚本进行导入 18万的sql脚本数据 导入时间33秒左右 导出 选择表右击----转存SQL文件---结构和数据 导出时间比较快 二 mysqldump 导入导出 先进入mysql的安装bin目录下,先将所要导入的脚本放入该bin目录下…

从优化设计到智能制造:生成式AI在可持续性3D打印中的潜力和应用

可持续性是现代工业中一个紧迫的问题,包括 3D 打印领域。为了满足环保制造实践日益增长的需求,3D 打印已成为一种有前景的解决方案。然而,要使 3D 打印更具可持续性,还存在一些需要解决的挑战。生成式人工智能作为一股强大的力量&…

Java虚拟机类加载机制探究:生命周期、初始化、使用与验证

一、java虚拟机与程序的生命周期 在如下几种情况之下,java虚拟机将结束生命周期: 执行了System.exit()方法程序正常执行结束程序在执行过程中遇到了异常或者错误而异常终止由于操作系统用出现错误而导致java虚拟机进程终止 二、类的加载,链…

基于ssm运动会管理系统的设计与实现 【附源码】

基于ssm运动会管理系统的设计与实现 【附源码】 🍅 作者主页 央顺技术团队 🍅 欢迎点赞 👍 收藏 ⭐留言 📝 🍅 文末获取源码联系方式 📝 项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuil…

CSS 圆形分割按钮动画 带背景、图片

<template><view class="main"><view class="up"> <!-- 主要部分上 --><button class="card1"><image class="imgA" src="../../static/A.png"></image></button><butt…

NIO通信代码示例

NIO通信架构图 1.Client NioClient package nio;import constant.Constant;import java.io.IOException; import java.util.Scanner;public class NioClient {private static NioClientHandle nioClientHandle;public static void start() {nioClientHandle new NioClientHa…

3 快速前端开发

3 前端JavaScript 3 前端JavaScript1. JavaScript1.1 代码位置1.2 注释1.3 变量1.4 字符串类型案例&#xff1a;跑马灯 1.5 数组案例&#xff1a;动态数据 1.6 对象&#xff08;字典&#xff09;案例&#xff1a;动态表格 1.7 条件语句1.8 函数 2.DOM2.1 事件的绑定 3.知识点的…

redis中的string相关的部分命令

redis命令手册 redis中文官网查看文档 挨个进行输出调试 Redis Setnx 命令 Redis Getrange 命令 Redis Mset 命令 redis 127.0.0.1:6379> MSET key1 "Hello" key2 "World" OK redis 127.0.0.1:6379> GET key1 "Hello" redis 127.0.0.1:…

LLVM的安装步骤实战

目录 1. 准备环境 1.1 安装必备软件包 1.2 配置Git 2. 用CMake构建 2.1 克隆代码库 2.2 创建构建目录 2.3 生成构建系统文件 3. 自定义构建 3.1 CMake定义的变量 3.2 LLVM定义的变量 4. 总结 1. 准备环境 首先操作系统可以是Linux、FreeBSD、macOS或Windows。 同…

2.【CPP】入门(宏||内联函数||拷贝构造||析构函数||构造函数)

0x01.引言 1.实现一个宏函数ADD #define ADD(x,y) ((x)(y))//宏是预编译阶段完成替换&#xff0c;注意括号2.宏的优缺点 优点&#xff1a; 1.增强代码的复用性 2.宏函数不用建立栈帧&#xff0c;提高性能 缺点&#xff1a; 1.不方便调试 2.没有安全检查 0x02.内联函数 1.以空…