Hive数据类型

这篇博客介绍了Hive的基本和集合数据类型,包括数据类型转换、数组、映射和结构体的操作。还讨论了Hive的读时模式,即在加载数据时不校验,读取时才检查数据合法性,这使得加载数据速度更快,但可能导致NULL值的显示。此外,提到了Hive数据文件的编码和默认分隔符。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、数据类型

1.1 基本数据类型

在这里插入图片描述
在这里插入图片描述

1.2 数据类型转换

hive (default)>
              >
              > select '1.0' + 2;
OK
_c0
3.0
Time taken: 20.331 seconds, Fetched: 1 row(s)
hive (default)>



hive (default)>
              > SELECT '1111'  > 10;
OK
_c0
true
Time taken: 0.581 seconds, Fetched: 1 row(s)
hive (default)>



# cast 进行类型强转,转不成功为NULL
hive (default)>
              > SELECT  CAST('111' AS INT) ,CAST('111S' AS INT);
OK
_c0     _c1
111     NULL
Time taken: 0.324 seconds, Fetched: 1 row(s)
hive (default)>


2、集合数据类型

2.1 Array

hive (default)> select array(1,2,3);
OK
_c0
[1,2,3]

#  
hive (default)>  select  arr[0],arr[3],arr[4] from (select array(1,2,3,"qwert") arr) tmp;
OK
_c0     _c1     _c2
1       qwert   NULL

2.2 map

hive (default)> select map("a",1,"b",2,"c",3);
OK
_c0
{"a":1,"b":2,"c":3}



hive (default)> select m["a"],m["b"],m["c"],m["d"]  from (select map("a",1,"b",2,"c",3) m) as tmp;
OK
_c0     _c1     _c2     _c3
1       2       3       NULL
Time taken: 0.233 seconds, Fetched: 1 row(s)

2.3 struct

hive (default)> select struct("zhangsan",20,178.0);              
OK
_c0
{"col1":"zhangsan","col2":20,"col3":178}



hive (default)>
              > select named_struct("name","zhangsan","age",20,"height",178.0);
OK
_c0
{"name":"zhangsan","age":20,"height":178}



hive (default)>  select person.name,person.age,person.height from (select named_struct("name","zhangsan","age",20,"height",178.0) person ) as tmp;
OK
name    age     height
zhangsan        20      178
Time taken: 0.223 seconds, Fetched: 1 row(s)



hive (default)>
              >  select person.name,person.age,person.height,person.xxx  from (select named_struct("name","zhangsan","age",20,"height",178.0) person ) as tmp;
FAILED: RuntimeException cannot find field xxx(lowercase form: xxx) in [name, age, height]
hive (default)>


3、文本文件数据编码

Hive表中的数据在存储在文件系统上,Hive定义了默认的存储格式,也支持用户自定义文件存储格式。
Hive默认使用几个很少出现在字段值中的控制字符,来表示替换默认分隔符的字符。

在这里插入图片描述
Hive 中没有定义专门的数据格式,数据格式可以由用户指定,用户定义数据格式需要指定三个属性:列分隔符(通常为空格、"\t"、"\x001")、行分隔符("\n")以及
读取文件数据的方法。
在加载数据的过程中,Hive 不会对数据本身进行任何修改,而只是将数据内容复制或者移动到相应的 HDFS 目录中。
将 Hive 数据导出到本地时,系统默认的分隔符是A、B、^C 这些特殊字符,使用cat 是看不到的;

在 vi 中输入特殊字符:
(Ctrl + v) + (Ctrl + a) => ^A
(Ctrl + v) + (Ctrl + b) => ^B
(Ctrl + v) + (Ctrl + c) => ^C
^A / ^B / ^C 都是特殊的控制字符,使用 more 、 cat 命令是看不见的;可以使用cat -A file.dat

4、读时模式

在传统数据库中,在加载时发现数据不符合表的定义,则拒绝加载数据。数据在写入数据库时对照表模式进行检查,这种模式称为"写时模式"(schema on write)。
写时模式 -> 写数据检查 -> RDBMS;
Hive中数据加载过程采用"读时模式" (schema on read),加载数据时不进行数据格式的校验,读取数据时如果不合法则显示NULL。这种模式的优点是加载数据迅速。
读时模式 -> 读时检查数据 -> Hive;好处:加载数据快;问题:数据显示NULL

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值