Hive之数据类型

数字类

类型长度备注
TINYINT1字节有符号整型
SMALLINT2字节有符号整型
INT4字节有符号整型
BIGINT8字节有符号整型
FLOAT4字节有符号单精度浮点数
DOUBLE8字节有符号双精度浮点数
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

转载于:https://www.cnblogs.com/wadeyu/p/9784590.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Hive中支持多种数据类型,包括字符串类型、时间类型、其他类型和复合类型。 字符串类型可以使用单引号(')或双引号(")来指定,包括VARCHAR和CHAR两种类型。其中,VARCHAR类型长度为1-255,而CHAR类型长度为1-65535。Hive遵循C类型的转义字符规则。 时间类型包括时间戳和日期。时间戳支持传统的UNIX时间戳可选纳秒的精度,可以使用java.sql.Timestamp格式“YYYY-MM-DD HH:MM:SS.fffffffff”和“YYYY-MM-DD HH:MM:ss.ffffffffff”进行表示。日期则以年/月/日的格式形式描述,如"YYYY-MM-DD"。 其他类型包括布尔类型(BOOLEAN)和二进制类型(BINARY)。 复合类型包括结构体(Structs),它由任意数据类型组成的结构组成,字段可以有不同的类型。结构体使用STRUCT<col_name : data_type, ...>进行定义,例如struct("a",1,2,3)表示一个包含命名字段的结构体。 综上所述,Hive支持多种数据类型,包括字符串、时间、其他和复合类型。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Hive数据类型](https://blog.csdn.net/l775892226/article/details/97492467)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值