博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HIVE数据类型
阅读量:6093 次
发布时间:2019-06-20

本文共 4037 字,大约阅读时间需要 13 分钟。

HIVE中数据类型分为数值类型、字符串类型、日期类型、复合类型以及其他类型。下面分别进行介绍。

数值类型(7种)

数值类型类似于JAVA中的基本数据类型

clipboard.png

  • 整型数值默认按照INT处理,浮点数值默认按照DOUBLE处理。
  • 特殊情况:整型数值超出INT范围、数值后加Y/S/L后缀时,发生向其他整型类型的转换
  • Hive-0.11.0和Hive-0.12.0固定了DECIMAL类型的精度并限制为38位数字,从Hive-0.13.0开始可以指定DECIMAL的规模和精度,当使用DECIMAL类型创建表时可以使用DECIMAL(precision,scale)语法。DECIMAL默认为DECIMAL(10,0)。 DECIMAL类型比DOUBLE类型为浮点数提供了精确的数值和更广的范围,DECIMAL类型存储了数值的精确地表示,而DOUBLE类型存储了非常接近数值的近似值。当DOUBLE类型的近似值精度不够时可以使用DECIMAL类型,比如金融应用,等于和不等于检查以及舍入操作,当数值超出了DOUBLE类型的范围(< -10^308 or > 10^308)或者非常接近于0(-10^-308 < ... < 10^-308)时,也可以使用DECIMAL类型。

字符串类型

  • 字符串常量使用单引号或者双引号表示.VARCHAR的长度指示器范围为1~65535,如果值长度超过定义长度,该字符串会被自动截断。
  • CHAR的长度是固定的,不足部分使用空格补足。CHAR的长度指示器范围为1~255

日期类型

  • HIVE中提供DATE类型描述年月日,格式为yyyy-MM-dd。 范围为0000.01.01~9999.12.31。
  • HIVE中提供TIMESTAMP类型描述细致时间类型,格式yyyy-MM-dd HH:mm:ss.fffffffff, 小数后为九位,也就是说精度为纳秒级别。
hive> select * from ts;OK1    2018-08-21 11:12:13.12    2018-08-21 11:12:13.1233    2018-08-21 11:12:13.1234564    2018-08-21 11:12:13.1234567895    2018-08-21 11:12:136    NULL

如果load数据中的精度超出,则为null, 但使用cast由string向timestamp转换只是会截取到最大精度,而不会为null。比如:

6,2019-09-09 09:09:09.1234567891

类型转换

  • 我的文件内容
1,2018-08-21 11:12:13.1,2018-08-21,2018-08-21 11:12:13.14,2018-08-21 11:12:13.123456789,2018-08-21,2018-08-21 11:12:13.1234567895,2018-08-21 11:12:13,2018-08-21,2018-08-21 11:12:136,2019-09-09 09:09:09.1234567891,2018-08-21,2019-09-09 09:09:09.1234567891
  • 我的ts表
hive> desc ts;OKid                      int                                         ts                      timestamp                                   date                    date                                        dstring                 string                                      Time taken: 0.062 seconds, Fetched: 4 row(s)
  • load data后表内容
hive> select * from ts;OK1    2018-08-21 11:12:13.1    2018-08-21    2018-08-21 11:12:13.14    2018-08-21 11:12:13.123456789    2018-08-21    2018-08-21 11:12:13.1234567895    2018-08-21 11:12:13    2018-08-21    2018-08-21 11:12:136    NULL    2018-08-21    2019-09-09 09:09:09.1234567891Time taken: 0.054 seconds, Fetched: 4 row(s)

timestamp -> string

select cast(ts as String) from ts;2018-08-21 11:12:13.12018-08-21 11:12:13.1234567892018-08-21 11:12:13NULL

timestamp -> date

select cast(ts as date) from ts;2018-08-212018-08-212018-08-21NULL

date -> string

select cast(date as string) from ts;2018-08-212018-08-212018-08-212018-08-21

date -> timestamp

select cast(date as timestamp) from ts;2018-08-21 00:00:002018-08-21 00:00:002018-08-21 00:00:002018-08-21 00:00:00

string -> timestamp

select cast(dstring as timestamp) from ts;2018-08-21 11:12:13.12018-08-21 11:12:13.1234567892018-08-21 11:12:132019-09-09 09:09:09.123456789

string -> date

select cast(dstring as date) from ts;2018-08-212018-08-212018-08-212019-09-09

复合类型

Array:ARRAY<data_type>

Map:MAP<primitive_type, data_type>
Struct: STRUCT<col_name : data_type [COMMENT col_comment], ...>
Union:UNIONTYPE<data_type, data_type, ...>

建表

create table uniontab(arr array
, mp MAP
, stru struct
, uni uniontype
) row format delimited fields terminated by ',' collection items terminated by '#' map keys terminated by ':' lines terminated by '\n';hive> desc uniontab;OKarr array
mp map
stru struct
uni uniontype
Time taken: 0.073 seconds, Fetched: 4 row(s)

生成数据

插入union时使用create_union,其中第一个位置,指定使用的类型的index(从0开始),后面跟一个完整的union类型的数据结构

insert  into uniontab select array('d','e','f'), map(1,'zjx',2,'wly'), named_struct('name', 'wly', 'age', 17), create_union(2, 10, 10.0, '10.1') from ts limit 1;select * from uniontab;["a","b","c"]    {1:"zjx",2:"wly"}    {"name":"zjx","age":18}    {0:10}["d","e","f"]    {1:"zjx",2:"wly"}    {"name":"wly","age":17}    {1:10.0}["d","e","f"]    {1:"zjx",2:"wly"}    {"name":"wly","age":17}    {2:"10.1"}

查询

struct类型相当于JAVA中的BEAN,可以使用 “.” 来操作其中的属性

select stru.age from uniontab;181717select mp[1] from uniontab;zjxzjxzjxselect uni from uniontab;{0:10}{1:10.0}{2:"10.1"}

转化关系表

clipboard.png

转载地址:http://scwza.baihongyu.com/

你可能感兴趣的文章
SpringBoot 注解事务声明式事务
查看>>
利用Excel.Application object’s RegisterXLL() method加载dll
查看>>
网络安全需求增大,世平信息用数据内容识别技术填补市场空白
查看>>
.NET高级工程师面试题之SQL篇
查看>>
移动应用的春天来临 便利更需安全加固
查看>>
Linux放手 32位版本系统大限将至
查看>>
高并发Web服务的演变——节约系统内存和CPU
查看>>
考虑云计算来降成本:良药或毒药?
查看>>
弃局域网 星际争霸2用云计算战网惹不满
查看>>
孟凯:卖菜的难道一定要终身卖菜吗?
查看>>
外媒:中国游戏服务公司iGSKY入侵Xbox账户,并涉嫌洗钱
查看>>
Fortinet入围IDC企业级无线市场态势象限
查看>>
大数据引领 滨海新城构筑产业发展新高地
查看>>
加速!加速!西数万转硬盘猛禽RAID测试
查看>>
认知商业需要强大的“Power引擎”
查看>>
信息安全:BYOD切忌安全过头
查看>>
企业如何应对产业物联网
查看>>
聊聊程序员的工匠人生
查看>>
人工智能时代 CRM助力企业智能创新管理
查看>>
SDN技术存漏洞 供应商为开拓市场牺牲安全
查看>>