码迷,mamicode.com
首页 > 其他好文 > 详细

Hive之数据类型

时间:2018-10-14 00:14:07      阅读:862      评论:0      收藏:0      [点我收藏+]

标签:str   meta   create   overwrite   war   exception   insert   浮点数   ast   

数字类

类型 长度 备注
TINYINT 1字节 有符号整型
SMALLINT 2字节 有符号整型
INT 4字节 有符号整型
BIGINT 8字节 有符号整型
FLOAT 4字节 有符号单精度浮点数
DOUBLE 8字节 有符号双精度浮点数
DECIMAL -- 可带小数的精确数字字符串

日期时间类

类型 长度 备注
TIMESTAMP -- 时间戳,内容格式:yyyy-mm-dd hh:mm:ss[.f...]
DATE -- 日期,内容格式:YYYY-MM-DD
INTERVAL -- --

字符串类

类型 长度 备注
STRING -- 字符串
VARCHAR 字符数范围1 - 65535 长度不定字符串
CHAR 最大的字符数:255 长度固定字符串

Misc类

类型 长度 备注
BOOLEAN -- 布尔类型 TRUE/FALSE
BINARY -- 字节序列

复合类

类型 长度 备注
ARRAY -- 包含同类型元素的数组,索引从0开始 ARRAY
MAP -- 字典 MAP<primitive_type, data_type>
STRUCT -- 结构体 STRUCT<col_name : data_type [COMMENT col_comment], ...>
UNIONTYPE -- 联合体 UNIONTYPE<data_type, data_type, ...>

uniontype实践

  • uniontype可以理解为泛型
  • 同一时刻同一地点只有联合体中的一个元素生效
  • uniontype中的元素共享内存
  • 可以通过create_union内置函数创建uniontype:create_union(tag, val1, val2) tag是数字,0开始,必须小于后面参数的个数
  • 插入uniontype数据,通过这种方式只能插入只有一个元素的uniontype,包含多个会提示跟表中的字段类型不一致,这个是坑的地方
CREATE TABLE union_test3(foo UNIONTYPE<map<string, string>>)

insert into table union_test3 select * from (select create_union(0,map('name', 'tom', 'name2', 'wadeyu')))t;
  • 默认tag和数据使用^B分隔,列数据使用^C分隔,map中key和value使用^D分隔(^B ascii码 2,^C ascii码 3,^D ascii码 4,分隔符是通过vim查看到的【vim中输入这些特殊字符 ctrl + v + 相应的字母】)
  • 在uniontype字段中自定义分隔符的含义变了
分隔代码 含义
collection items terminated by ‘,‘ tag和数据之间使用英文逗号分隔
map keys terminated by ‘:‘ 复合类型数据元素之间使用英文冒号分隔
-- map中的key和value暂时没找到可以配置的代码
  • 操作
# 创建表
create table union_testnew(
  foo uniontype<int, double, string, array<string>, map<string, string>>
)
row format delimited
collection items terminated by ','
map keys terminated by ':'
lines terminated by '\n'
stored as textfile;

# 数据准备
[root@master wadeyu]# vim union_test.log 
  1 0,1
  2 1,3.0
  3 2,world
  4 3,wade:tom:polly
  5 4,k1^Dv1:k2^Dv2
  
# 导入数据
hive (badou)> load data local inpath './union_test.log' overwrite into table union_testnew;

# 查询数据
hive (badou)> select * from union_testnew;
OK
union_testnew.foo
{0:1}
{1:3.0}
{2:"world"}
{3:["wade","tom","polly"]}
{4:{"k1":"v1","k2":"v2"}}
Time taken: 0.225 seconds, Fetched: 5 row(s)
  • 碰到的问题 原因:数据格式没有按照要求
18/10/11 19:06:24 [main]: WARN thrift.ThriftCLIService: Error fetching results: 
org.apache.hive.service.cli.HiveSQLException: java.io.IOException: org.apache.hadoop.hive.ql.metadata.HiveException: java.lang.NumberFormatException: Empty string!
    at org.apache.hive.service.cli.operation.SQLOperation.getNextRowSet(SQLOperation.java:352)
    at org.apache.hive.service.cli.operation.OperationManager.getOperationNextRowSet(OperationManager.java:220)
    at org.apache.hive.service.cli.session.HiveSessionImpl.fetchResults(HiveSessionImpl.java:685)
    at org.apache.hive.service.cli.CLIService.fetchResults(CLIService.java:455)
    at org.apache.hive.service.cli.thrift.ThriftCLIService.FetchResults(ThriftCLIService.java:674)

参考资料

【0】 Hive wiki - Tutorial
https://cwiki.apache.org/confluence/display/Hive/Tutorial

【1】 Hive wiki - LanguageManual Types
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Types

【2】特殊字符^C(ETX)、^B(STX)
https://blog.csdn.net/liluotuo/article/details/43984071

【3】详解hive的列分隔符和行分隔符的使用
https://blog.csdn.net/qq_26442553/article/details/80297028

【4】ASCII码表
https://baike.baidu.com/item/ASCII/309296

【5】HIVE Row Formats&SerDe(五)
https://blog.csdn.net/mhtian2015/article/details/78899171

Hive之数据类型

标签:str   meta   create   overwrite   war   exception   insert   浮点数   ast   

原文地址:https://www.cnblogs.com/wadeyu/p/9784590.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!