分享

hive各种数据类型介绍

pig2 2014-7-17 11:46:11 发表于 常识型 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 5 43945

问题导读

1.hive支持哪些原生数据类型?
2.hive有哪些复合类型?
3.hive null值代表什么?




列类型
Hive支持的数据类型如下:
原生类型:
  • TINYINT
  • SMALLINT
  • INT
  • BIGINT
  • BOOLEAN
  • FLOAT
  • DOUBLE
  • STRING
  • BINARY (Hive 0.8.0以上才可用)
  • TIMESTAMP (Hive 0.8.0以上才可用)
复合类型:
  • arrays: ARRAY<data_type>
  • maps: MAP<primitive_type, data_type>
  • structs: STRUCT<col_name : data_type [COMMENT col_comment], ...>
  • 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创建一个实例的类型:
  1. CREATE TABLE union_test(foo UNIONTYPE<int, double, array<string>, struct<a:int,b:string>>);
  2. SELECT foo FROM union_test;
  3. {0:1}
  4. {1:2.0}
  5. {2:["three","four"]}
  6. {3:{"a":5,"b":"five"}}
  7. {2:["six","seven"]}
  8. {3:{"a":8,"b":"eight"}}
  9. {0:9}
  10. {1:10.0}
复制代码


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

创建union,必须提供为create_union UDF提供tag。
  1. 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;
  2. {0:"238"}    {1:"val_238"}    {1:{"col1":2,"col2":"b"}}
  3. {0:"86"}    {0:2.0}    {1:{"col1":2,"col2":"b"}}
复制代码


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

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

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

NULL值的处理
遗漏的值被代表为特殊值NULL。 要导入NULL字段的数据,需要查阅使用的SerDe的文档。 (默认的文本格式使用LazySimpleSerDe的解释字符串\ N为NULL)



已有(5)人评论

跳转到指定楼层
wkf46525 发表于 2014-7-18 18:35:54
这个例子看起来简单,其实根本学不到东西,对于uniontype类型的没有说明数据该怎么定义,该导入什么样的格式
只有一个简单的创建和查询,数据格式是什么,都没有讲明白,所以这个帖子没啥实际作用
回复

使用道具 举报

lbwahoo 发表于 2014-7-17 21:34:37
回复

使用道具 举报

nettman 发表于 2014-7-18 23:07:38
wkf46525 发表于 2014-7-18 18:35
这个例子看起来简单,其实根本学不到东西,对于uniontype类型的没有说明数据该怎么定义,该导入什么样的格 ...
熟读百遍,其意自现,这个有点类似泛型,如果你遇到一个字段,数据类型不固定,你会使用什么?
回复

使用道具 举报

june_fu 发表于 2015-3-11 23:33:07
回复

使用道具 举报

linbingfeng 发表于 2017-9-29 21:00:35
那个create_union()函数的使用有点看不明白。。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条