参考的文章:
Hive 数据类型
https://edu.csdn.net/promotion_activity?id=3&utm_source=618qztt
Hive 学习之Hive 数据类型
https://blog.csdn.net/skywalker_only/article/details/27547515
Hive 中数据类型主要分为以下几种类型
数值类型
字符串类型
日期/时间类型
其他类型
复合类型下面对上面的几种类型进行讲解:
数值类型
Hive中的数值类型与Java中的数值类型很相似,区别在于有些类型的名称不一样。可以归结为以下几种类型
TINYINT , SMALLINT, INT / INTEGER , BIGINT , FLOAT, DOUBLE , DECIMAL
下面按照这种方式进行展示 :
解释 类型名称 大小 最小值 最大值 示例
TINYINT
解释: 1-byte signed integer, from -128 to 127
大小: 1字节
最小值 : -128
最大值 : 127
示例: 45Y
-------------------------------
解释:2-byte signed integer, from -32,768 to 32,767
大小 : 2字节
最小值:-32768
最大值 : 32767
示例: 100S-------------------------------
INT / INTEGER
解释 : 4-byte signed integer, from -2,147,483,648 to 2,147,483,647
大小 : 4字节
最小值 : -2,147,483,648
最大值 :2,147,483,647
示例: 36-------------------------------
解释:8-byte signed integer, from -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807
大小 :8字节
最小值 : -9,223,372,036,854,775,808
最大值 :9,223,372,036,854,775,807
示例: 2000L
--------------------------------------------------------------------------
超过BIGINT 的整型
大于BIGINT的数值,需要使用BD后缀以及Decimal(38,0)来处理,例:
select CAST(18446744073709001000BD AS DECIMAL(38,0)) from my_table limit 1;
----------------------------------------------------------------
FLOAT
解释:4-byte single precision floating point number
大小: 4字节
最小值: ---
最大值: ---
备注: 4字节单精度
------------------------------------------------------------
DOUBLE解释 :8-byte double precision floating point number
大小:8字节
最小值: ---
最大值: ---
备注: 8字节双精度----------------------------------
DECIMAL
解释:Decimal datatype was introduced in Hive 0.11.0 (HIVE-2693) and revised in Hive 0.13.0 (HIVE-3976)
大小: ---
最小值: ---
最大值: ---
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。
1)如果未指定precision,则默认为10。
2)如果未指定scale,它将默认为0(无小数位)。
示例:
CREATE TABLE foo (
a DECIMAL, – Defaults to decimal(10,0)
b DECIMAL(9, 7)
)
Decimal在Hive 0.12.0 and 0.13.0之间是不兼容的,故0.12前的版本需要迁移才可继续使用,具体情况参见官网。
========================================
=========================================
字符串类型
Hive 中目前有三种字符串类型。
STRING, VARCHAR,CHAR
STRING
字符串文字可以用单引号(’)或双引号(“)表示。Hive在字符串中使用C风格的转义。
VARCHAR
Hive-0.12.0版本引入了VARCHAR类型,VARCHAR类型使用长度指示器(1到65355)创建,长度指示器定义了在字符串中允许的最大字符数量。
Varchar类型使用长度说明符(介于1和65355之间)创建,它定义字符串中允许的最大字符数。 如果要转换/分配给varchar值的字符串值超过length说明符,则字符串将被静默截断。 字符长度由字符串包含的代码点的数量确定。像字符串一样,尾部空格在varchar中很重要,并且会影响比较结果。(VARCHAR)
非通用UDFs不能直接使用varchar类型作为输入参数或返回值。 可以创建字符串UDFs,而varchar值将被转换为strings并传递到UDF。 要直接使用varchar参数或返回varchar值,请创建GenericUDF。CHAR
Hive-0.13.0版本引入了CHAR类型。
字符类型与Varchar类似,但它们是固定长度的,意味着比指定长度值短的值用空格填充,但尾随空格在比较期间不重要(CHAR)。 CHAR的最大长度固定为255。
创建示例:
CREATE TABLE test(c CHAR(10), vc VARCHAR(30));
============================================
============================================
日期/时间类型
Hive 目前支持3种时间类型,分别为:
TIMESTAMP ,DATE , INTERVAL
这3种类型的支持版本分别为:
TIMESTAMP Note: Only available starting with Hive 0.8.0
DATE Note: Only available starting with Hive 0.12.0
INTERVAL Note: Only available starting with Hive 1.2.0
下面分别对这3种类型进行说明
TIMESTAMP
Hive支持带可选的纳秒级精度的UNIX timestamp。Hive中的timestamp与时区无关,存储为UNIX纪元的偏移量。
Hive提供了用于timestamp和时区相互转换的便利UDF:to_utc_timestamp 和 from_utc_timestamp。
Timestamp类型可以使用所有的日期时间UDF,如month、day、year等。
文本文件中的Timestamp必须使用yyyy-mm-dd hh:mm:ss[.f...]的格式,如果使用其它格式,将它们声明为合适的类型(INT、FLOAT、STRING等)并使用UDF将它们转换为Timestamp。
Timestamp支持的类型转换为:
整数类型:转换为秒级的UNIX时间戳。
浮点数类型:转换为带小数精度的UNIX时间戳。
字符串类型:适合java.sql.Timestamp格式"YYYY-MM-DD HH:MM:SS.fffffffff"(9位小数精度)。DATE
Hive中DATE类型的值描述了特定的年月日,以YYYY-MM-DD格式表示,例如2014-05-29。DATE类型不包含时间,所表示日期的范围为0000-01-01 to 9999-12-31。这取决于Java Date类型的原始支持。
DATE类型仅可与DATE、TIMESTAMP、STRING类型相互转化,如下所示:
英文原文:
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.
中文翻译
cast(date as date)
: 相同的日期。
cast(timestamp as date)
:基于本地时区确定timestamp的年月日作为值返回。
cast(string as date)
:如果字符串的格式为'YYYY-MM-DD', 则对应的年月日返回。如果字符串不是该格式,则返回NULL。
cast(date as timestamp)
:基于本地时区,返回日期对应午夜时间。
cast(date as string)
:日期被转换为'YYYY-MM-DD'格式的字符串。
INTERVAL
时间间隔在1.2.0之后版本支持,在2.2.0版本上进行了扩展,具体情况参见官网。
=====================================================
=====================================================
其他类型
BOOLEAN
:boolean 类型, 值为 true 与 false 两种类型。
:二进制类型。
=====================================================
=====================================================
复合类型
Hive 与传统的关系型数据库并不相同,Hive 支持 以 Java ,C 为原型的一些复杂数据结构。
支持的主要复杂数据结构有 Array, Map, Struct , Union :
下面分别对这几种数据类型做一介绍:
Array:ARRAY
Map:MAP
Struct: STRUCT
Union:UNIONTYPE
每个类型 Hive的支持版本:
Array : Note: negative values and non-constant expressions are allowed as of Hive 0.14.
Map: Note: negative values and non-constant expressions are allowed as of Hive 0.14.
Struct: -
Union: Note: Only available starting with Hive 0.7.0.
注:UNIONTYPE目前还没有完全支持,官方建议只用于查看,详见官方文档。
创建 含 Union 类型表 的 示例:
CREATE TABLE union_test(u UNIONTYPE,struct>);
查询 含 Union 类型婊 的 示例
SELECT u FROMunion_test;
{1:10.0}
在该例子中,union包含四种类型,分别为int、double、array和struct。
从查询结果来看,第一个冒号前面的数字tag代表union中某种数据类型,比如
0代表union的第一个数据类型int,
1代表第二个数据类型double,
2代表第三个数据类型array,
3代表第四个数据类型struct