Hive数据类型及文本文件数据编码

本文参考Apache官网,更多内容请参考:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Types

1. 数值型

类型支持范围
TINYINT1-byte signed integer, from -128 to 127
SMALLINT2-byte signed integer, from -32,768 to 32,767
INT/INTEGER4-byte signed integer, from -2,147,483,648 to 2,147,483,647
BIGINT8-byte signed integer, from -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
FLOAT4-byte single precision floating point number
DOUBLE8-byte double precision floating point number
DOUBLEPRECISION
DECIMALDecimal datatype was introduced in Hive 0.11.0 (HIVE-2693) and revised in Hive 0.13.0 (HIVE-3976)

1. Integral Types (TINYINT, SMALLINT, INT/INTEGER, BIGINT) 
默认情况下,整数型为INT型,当数字大于INT型的范围时,会自动解释执行为BIGINT,或者使用以下后缀进行说明。

类型后缀例子
TINYINTY100Y
SMALLINTS100S
BIGINTL100L

INTEGER is introduced as a synonym for INT in Hive 2.2.0 (HIVE-14950). 
2. Decimals 
Hive的小数型是基于Java BigDecimal做的, BigDecimal在java中用于表示任意精度的小数类型。所有常规数字运算(例如+, - ,*,/)和相关的UDFs(例如Floor,Ceil,Round等等)都使用和支持Decimal。你可以将Decimal和其他数值型互相转换,且Decimal支持科学计数法和非科学计数法。因此,无论您的数据集是否包含如4.004E + 3(科学记数法)或4004(非科学记数法)或两者的组合的数据,可以使用Decimal。 
从Hive 0.13开始,用户可以使用DECIMAL(precision, scale) 语法在创建表时来定义Decimal数据类型的precision和scale。 如果未指定precision,则默认为10。如果未指定scale,它将默认为0(无小数位)。

CREATE TABLE foo ( 
a DECIMAL, – Defaults to decimal(10,0) 
b DECIMAL(9, 7) 
)

大于BIGINT的数值,需要使用BD后缀以及Decimal(38,0)来处理,例:

select CAST(18446744073709001000BD AS DECIMAL(38,0)) from my_table limit 1;

Decimal在Hive 0.12.0 and 0.13.0之间是不兼容的,故0.12前的版本需要迁移才可继续使用,具体情况参见官网。

2. 日期型

类型支持版本
TIMESTAMPNote: Only available starting with Hive 0.8.0
DATENote: Only available starting with Hive 0.12.0
INTERVALNote: Only available starting with Hive 1.2.0

1. Timestamps 
支持传统的UNIX时间戳和可选的纳秒精度。 
- 支持的转化: 
- 整数数字类型:以秒为单位解释为UNIX时间戳 
- 浮点数值类型:以秒为单位解释为UNIX时间戳,带小数精度 
- 字符串:符合JDBC java.sql.Timestamp格式“YYYY-MM-DD HH:MM:SS.fffffffff”(9位小数位精度) 
时间戳被解释为无时间的,并被存储为从Unix纪元的偏移量。 提供了用于转换到和从时区转换的便捷UDFs(to_utc_timestamp,from_utc_timestamp)。 
所有现有的日期时间UDFs(月,日,年,小时等)都使用TIMESTAMP数据类型。 
Text files中的时间戳必须使用格式yyyy-mm-dd hh:mm:ss [.f …]。 如果它们是另一种格式,请将它们声明为适当的类型(INT,FLOAT,STRING等),并使用UDF将它们转换为时间戳。 
在表级别上,可以通过向SerDe属性”timestamp.formats”(自版本1.2.0 with HIVE-9298)提供格式来支持备选时间戳格式。 例如,yyyy-MM-dd’T’HH:mm:ss.SSS,yyyy-MM-dd’T’HH:mm:ss。 
2. Dates 
DATE值描述特定的年/月/日,格式为YYYY-MM-DD。 例如,DATE’2013-01-01’。 日期类型没有时间组件。 Date类型支持的值范围是0000-01-01到9999-12-31,这取决于Java Date类型的原始支持。 
Date types只能在Date, Timestamp, or String types之间转换。

转换类型结果
cast(date as date)Same date value
cast(date as string)The year/month/day represented by the Date is formatted as a string in the form ‘YYYY-MM-DD’.
cast(date as timestamp)A timestamp value is generated corresponding to midnight of the year/month/day of the date value, based on the local timezone.
cast(string as date)If the string is in the form ‘YYYY-MM-DD’, then a date value corresponding to that year/month/day is returned. If the string value does not match this formate, then NULL is returned.
cast(timestamp as date)The year/month/day of the timestamp is determined, based on the local timezone, and returned as a date value.

3. Intervals 
时间间隔在1.2.0之后版本支持,在2.2.0版本上进行了扩展,具体情况参见官网。

3. 字符型

1.Strings 
字符串文字可以用单引号(’)或双引号(“)表示。Hive在字符串中使用C风格的转义。 
2. Varchar 
Varchar类型使用长度说明符(介于1和65355之间)创建,它定义字符串中允许的最大字符数。 如果要转换/分配给varchar值的字符串值超过length说明符,则字符串将被静默截断。 字符长度由字符串包含的代码点的数量确定。 
像字符串一样,尾部空格在varchar中很重要,并且会影响比较结果。 
非通用UDFs不能直接使用varchar类型作为输入参数或返回值。 可以创建字符串UDFs,而varchar值将被转换为strings并传递到UDF。 要直接使用varchar参数或返回varchar值,请创建GenericUDF。 
如果基于reflection-based方法来获取数据类型信息,则可能存在不支持varchar的场景。 这包括一些SerDe函数实现。 
3. Char 
字符类型与Varchar类似,但它们是固定长度的,意味着比指定长度值短的值用空格填充,但尾随空格在比较期间不重要。 最大长度固定为255。

CREATE TABLE foo (bar CHAR(10))

4. 其他

  1. BOOLEAN
  2. BINARY (Note: Only available starting with Hive 0.8.0)

所有这些数据类型都是对java中接口的实现,因为这些类型的具体行为细节和Java中对应的类型是完全一致的。例如,String类型实现的是java中的String,FLOAT实现的是java中的float,等等。

5. 复杂类型(集合数据类型)

  Hive中的列支持使用struct,map和array集合数据类型。语法示例实际上调用的是内置函数。和基本数据类型一样,这些类型同样是保留字。

 

类型 支持版本
arraysARRAY(data_type)Note: negative values and non-constant expressions are allowed as of Hive 0.14.
mapsMAP(primitive_type, data_type)Note: negative values and non-constant expressions are allowed as of Hive 0.14.
structsSTRUCTcol_name : data_type [COMMENT col_comment], …) 
unionUNIONTYPE(data_type, data_type, …)Note: Only available starting with Hive 0.7.0.

复杂类型包括ARRAY,MAP,STRUCT,UNION,这些复杂类型是由基础类型组成的。

ARRAY:ARRAY类型是由一系列相同数据类型的元素组成,这些元素可以通过下标来访问。比如有一个ARRAY类型的变量fruits,它是由['apple','orange','mango']组成,那么我们可以通过fruits[1]来访问元素orange,因为ARRAY类型的下标是从0开始的;
  MAP:MAP包含key->value键值对,可以通过key来访问元素。比如”userlist”是一个map类型,其中username是key,password是value;那么我们可以通过userlist['username']来得到这个用户对应的password;
  STRUCT:STRUCT可以包含不同数据类型的元素。这些元素可以通过”点语法”的方式来得到所需要的元素,比如user是一个STRUCT类型,那么可以通过user.address得到这个用户的地址。
  UNION: UNIONTYPE,他是从Hive 0.7.0开始支持的。

示例:一张虚构的人力资源应用程序中的员工表:

CREATE TABLE employees (
name     STIRNG,
salary    FLOAT,
subordinates ARRAY<STRING>,
deductions     MAP<STRING, FLOAT>,
address          STRUCT<street:STRING, city:STRING,state:STRING,zip:INT>);

 

说明:

subordinates 下属员工,是个数组,
deductions 扣除额:是一个map,记录每次的扣除额
address:雇员地址,使用struct数据类型存储,其中每个城都被作了命名,并且具有一个特定类型。

集合类型也可以嵌套使用,类似如:ARRAY<STRUCT>表示数组中的每个元素都是STRUCT结构。

 

文本文件数据编码

hive书用几个很少出现在字段值中的控制字符,使用术语field来表示替换默认分隔符的字符

常使用分隔符

分隔符名称说明
\n换行符对于文本文件而言,每一行是一条记录,因此换行符可以分割数据。
^A<Ctrl>+A常用于分隔列,在CREATE TABLE语句中可以使用八进制编码\001表示。
^B<Ctrl>+B常用于分隔ARRAY与STRUCT元素,或用于MAP中键值对之间的分隔。CREATE TABLE语句中可以使用八进制编码\002表示
^C<Ctrl+C>MAP中键值对的分隔。
\t制表符常用
逗号常用
在使用的过程中,可以不使用Hive提供的默认分隔符,而使用其他的分隔符。

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

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

相关文章

Python绘图Turtle库详解

转载&#xff1a;https://blog.csdn.net/zengxiantao1994/article/details/76588580 Turtle库是Python语言中一个很流行的绘制图像的函数库&#xff0c;想象一个小乌龟&#xff0c;在一个横轴为x、纵轴为y的坐标系原点&#xff0c;(0,0)位置开始&#xff0c;它根据一组函数指令…

mac使用brew update无反应解决办法

为什么80%的码农都做不了架构师&#xff1f;>>> mac系统中使用brew作为包管理工具&#xff0c;类似centos中的yum&#xff0c;ubuntu中的apt-get&#xff0c;在使用brew update的使用&#xff0c;有时候会长时间无反应&#xff0c;或者中途断开连接&#xff0c;这是…

2018-2019-2 20175223 实验三《敏捷开发与XP实践》实验报告

目录 北京电子科技学院&#xff08;BESTI&#xff09;实验报告实验名称&#xff1a;实验三 敏捷开发与XP实践实验内容、步骤与体会&#xff1a;一、实验三 敏捷开发与XP实践-1二、实验三 敏捷开发与XP实践-2三、实验三 敏捷开发与XP实践-3四、实验三 敏捷开发与XP实践-4五、代码…

(八)路径(面包屑导航)分页标签和徽章组件

一&#xff0e;路径组件 路径组件也叫做面包屑导航。 <ol class"breadcrumb"><li><a href"#">首页</a></li><li><a href"#">产品列表</a></li><li><a href"#">大…

python之爬虫(四)之 Requests库的基本使用

什么是Requests Requests是用python语言基于urllib编写的&#xff0c;采用的是Apache2 Licensed开源协议的HTTP库如果你看过上篇文章关于urllib库的使用&#xff0c;你会发现&#xff0c;其实urllib还是非常不方便的&#xff0c;而Requests它会比urllib更加方便&#xff0c;可以…

win8下cocos2dx-3.2+VS2012环境配置及项目创建

这是本人CSDN的第一篇博客&#xff0c;因为假期在学校做实训项目接触到了cocos2dx&#xff0c;觉得是一个特别适用强大&#xff0c;有不错的可移植性&#xff08;虽然可移植性不错&#xff0c;但实际上写好的游戏往Android上移植&#xff0c;我的队友废了好大劲。。。&#xff…

Mac系统下Homebrew的安装和使用Homebrew安装python

这里向大家推荐一个东西&#xff0c;Mac下很好用的东西&#xff0c;叫做Homebrew。刚开始接触Mac的时候&#xff0c;我也没听过这个东西&#xff0c;但装了以后真的觉得&#xff0c;TMD太碉堡了。引用一句话&#xff1a;Homebrew is the easiest and most flexible way to inst…

Mac下cocos2dx-3.2+Xcode环境配置和项目创建

这是有关环境配置的第二篇教程&#xff0c;第一篇讲的是win8下的环境配置。这里我们使用C。所有如果你用其他语言如Lua和js进行cocos2d开发&#xff0c;那么可以再找一找其他的配置文档。下面要说Mac os 下 cocos2dx-3.2Xcode的环境配置&#xff0c;这里我使用的是Xcode 5.1.1。…

Mac OS使用技巧之一:查看Finder中的.bash_profile等系统隐藏文件

作为一个程序员&#xff0c;经常要配置变量&#xff0c;可能要更改hosts文件&#xff0c;或者你闲着没事儿寻找homebrew给你安装的东西在什么地方。Mac OS的内核是Unix&#xff0c;Linux/Unix系统出于系统安全和用户安全的考虑&#xff0c;会把一些与系统相关的文件隐藏&#x…

win8下cocos2dx3.2移植android平台及代码打包APK

cocos2dx程序不能只在VS2012下运行&#xff0c;迟早是要搬运到Android和IOS上的。Windows下移植IOS平台先搁下不说比较困难&#xff0c;而且只有越狱的苹果机才可以运行&#xff0c;而且毕竟IOS高端、小众。这里主要讲一下移植Android&#xff0c;windows下cocos2dx打包成APK和…

【转】用Fiddler做抓包分析详解

1.为什么是Fiddler? 抓包工具有很多&#xff0c;小到最常用的web调试工具firebug&#xff0c;达到通用的强大的抓包工具wireshark.为什么使用fiddler?原因如下&#xff1a; a.Firebug虽然可以抓包&#xff0c;但是对于分析http请求的详细信息&#xff0c;不够强大。模拟http…

Mac下cocos2dx3.2移植android平台详细教程

本文是cocos2dx移植android的第二篇教程&#xff0c;笔者深深感觉&#xff0c;cocos2dx移植android平台是永远的痛啊。。。下面讲一下笔者花费一个周研究的Mac OS下的cocos2dx3.2android配置首先要准备的东西&#xff08;1&#xff09;下载cocos2dx3.2 http://www.cocos2d-x.o…

robotframework(12)修改用户密码(从数据库查询短信验证码)

一、testcase&#xff1a;修改用户密码需要6个参数&#xff08;短信验证码、设置的新密码、用户已登录的userid及用户唯一标识、接口校验码、被修改的手机号&#xff09;&#xff0c;故先准备这些参数 二、用户登录请求&#xff0c;&#xff08;获取userid、用户唯一标识&#…

Mac OS使用技巧之二:修改变量Path解决android: command not found

前一阵子&#xff0c;一直在搞Mac OS和win8下cocos2dx移植android平台的方法。一步步从无到有的慢慢摸索出来。最近发现了一个小问题&#xff0c;有关环境变量配置的写下来分享给大家。就是我们在windows8下查看已有android SDK的版本&#xff0c;需要在CMD里面输入&#xff1a…

Jenkins架构

一. Master 和slave.下图阐述了master-slave交互的架构&#xff1a;在上面这个分布式的构建环境中&#xff0c;Jenkins master主要负责如下&#xff1a;接收构建触发&#xff08;比如&#xff0c;一个提交到GitHub后&#xff09;发送通知&#xff08;比如&#xff0c;在构建失败…

Mac OS使用技巧之三:发射无线网络信号的方法

许多人知道在windows下可以直接借助各种辅助软件来直接发射wifi信号&#xff0c;比如360wifi&#xff0c;猎豹wifi。或者可以直接在命令行里面设置。许多人却不知道Mac系统也有方便快捷发射无线信号的功能。下面讲一下利用Mac OS发射无线网络信号的方法。前提&#xff1a;你的电…

纪实:对CSDN博客系统的一些质疑

我是一个对编程充满热情的在校大学生&#xff0c;本来我是怀着满腔热情来到CSDN写博客&#xff0c;记录和分享自己的学习经历。却被这糟糕的博客系统一次次的泼冷水。写这篇博客确实是因为心中十分不甘和特别生气&#xff0c;所以我决定要把自己的遭遇写出来&#xff0c;我自己…

php框架之laravel

常见问题: 1. 访问网站500错误 这是因为laravel的缓存路径没有找到 laravel缓存文件路径是在 config/cache.php中设置&#xff0c;默认存在storage文件夹中 解决:需要保证storage/framework下面创建 sessions&#xff0c; views, cache 文件夹并确保可写权限 转载于:https://ww…

MySQL的命令合集

2019独角兽企业重金招聘Python工程师标准>>> MySQL客户端操作 $db$是数据库名称$table$是数据表名称$field$是数据表里的字段名称有些语句最后加上**/G**可以使结果更美观数据库相关 创建数据库,修改数据库 create database $db$; 使用默认设置create database $db$…

Mac OS使用技巧之四:修改打开不同格式视频的默认播放器

这里说一下视频播放的一些问题。大家知道Mac OS中有自带的一款播放器&#xff0c;叫做Quicktime Player。这已经是一款很牛X的软件了&#xff0c;但他的定位并不是单纯的视频播放软件&#xff0c;而是数字媒体制作平台&#xff0c;可以用于视频格式的转换&#xff0c;视频的录制…