Hive数据类型

列类型

 

Hive支持的数据类型如下:

 

原生数据类型:

  • TINYINT
  • SMALLINT
  • INT
  • BIGINT
  • BOOLEAN
  • FLOAT
  • DOUBLE
  • STRING
  • BINARY(好像是较高版本才有的类型)
  • TIMESTAMP

复合类型:

  • arrays:ARRAY<data_type>
  • maps:MAP<primitive_type,data_type>
  • structs:STRUCT<col_name : data_type>
  • union:UNIONTYPE<data_type,data_type,....>

 

时间戳

 

支持传统的unix时间戳,可选的纳秒级精度。

 

支持的转换:

  • 整型数值类型:解读为以秒为单位的UNIX时间戳
  • 浮动点数值类型:解读为以秒和小数精度为单位的UNIX时间戳。
  • 字符串:JDBC兼容的java.sql.Timestamp格式“YYYY-MM-DD HH:MM:SS.fffffffff”(9位小数位精度)

时间戳被解释是与timezone无关,存储为从UNIX纪元的偏移量。提供便利的UDF和时区转换(to_utc_timestamp,from_utc_timestamp)。
所有现有datetime的UDF(月,日,年,小时,等)可以工作于TIMESTAMP数据类型。

Union类型

Union类型可以在同一时间点,保持恰好有一个指定的数据类型。您可以使用create_union的UDF创建一个实例的类型:

CREATE TABLE union_test(foo UNIONTYPE<int, double, array<string>, struct<a:int,b:string>>);
SELECT foo FROM union_test;

{0:1}
{1:2.0}
{2:["three","four"]}
{3:{"a":5,"b":"five"}}
{2:["six","seven"]}
{3:{"a":8,"b":"eight"}}
{0:9}
{1:10.0}

 第一部分,对于union的发序列化来说是一个tag,让它知道哪个union的部分被使用。在例子0,表明声明的第一个数据类型,即是int,其他如此。

创建union,必须提供为create_union UDF提供tag。

SELECT create_union(0, key), create_union(if(key<100, 0, 1), 2.0, value), create_union(1, "a", struct(2, "b")) FROM src LIMIT 2;

{0:"238"}    {1:"val_238"}    {1:{"col1":2,"col2":"b"}}
{0:"86"}    {0:2.0}    {1:{"col1":2,"col2":"b"}}

 

常量

数值类型

默认,数值类型认为是INT,除非INT超出了INT的范围,那么会被解释为BIGINT,或者是如下的后缀在数值中被使用。

TYPE

Postfix

Example
TINYINTY100Y
SMALLINTS100S
BIGINTL100L

字符串类型

字符串可以用单引号(')或双引号(“)。Hive在字符串中使用C-Style的转义。

浮点类型

浮点类型数值,被假定为双浮点类型。目前还不支持科学记数法。

NULL值的处理

遗漏的值被代表为特殊值NULL。 要导入NULL字段的数据,需要查阅使用的SerDe的文档。 (默认的文本格式使用LazySimpleSerDe的解释字符串\ N为NULL),如将查询结果输出到文件,若为NULL,则字段值显示为\N

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值