Hadoop——Hive的数据类型

基本的数据类型

  • 整数:TINYINT、SMALLINT、INT、BIGINT

  • 小数:FLOAT、DOUBLE、DECIMAL

  • 文本:STRING、CHAR、VARCHAR

  • 布尔:BOOLEAN

  • 二进制:BINARY

  • 时间:DATE、TIMESTAMP、INTERVAL

数值型
名字字节数范围(2的次方对照说明
TINYINT1-128~127(-2^7~2^7-1)范围太小,基本不用
SMALLINT2-32768~32767基本不用
INT4-2147483648 ~ 2147483647
BIGINT8-9223372036854775808 ~ 9223372036854775807
FLOAT4单精度浮点数范围:-3.4028235E38 to 3.4028235E387,精度为7位。
DOUBLE8双精度浮点数范围:-1.7976E+308 to 1.797693E+308,精度为15或16位,比单精度浮点数float存储更大。
DECIMAL最长可以存储长度为38位的小数
字符串
名字说明范围
STRING可以无限大,和内存大小相关
CHAR长度固定,不足使用空格补足1~255
VARCHAR长度固定,超长自动截断,数据丢失1~65535
日期
名字格式范围
DATEyyyy-MM-dd0000.01.01~9999.12.31
TIMESTAMPyyyy-MM-dd HH:mm:ss.fffffffff, 小数后为九位,精度纳秒级别
其他数据类型
类型说明
BOOLEAN返回true或false
BINARY字节数组,用于存储变长的二进制数据。

复杂的数据类型

类型说明样式
ARRAY(数组)数组是一组具有相同类型和名称的变量的集合。包含同类型元素的数组,索引从0开始 ARRAY<data_type>
MAP(映射)是键值对(key-value),key必须为原始类型,value可以任意类型MAP<primitive_type, data_type>
STRUCT(结构体)字段集合,类型可以不同。类似于java编程语言中对象实例的模板,即类的结构体。STRUCT<col_name : data_type [COMMENT col_comment], ...>
UNIONTYPE(联合体)类似于Java中的泛型UNIONTYPE<data_type, data_type, ...>
MAP
MAP中的key值循环,及通过value索引key,key索引value。

通过key遍历map

-- 遍历key值
-- 获取MAP 
SELECT my_map FROM my_table;
-- 遍历MAP 
SELECT 
    key 
FROM 
    my_table 
LATERAL VIEW 
    explode(map_keys(my_map)) my_table_alias AS key;
-- 如何使用hive查询语句取出map类型中的key和value
-- 创建测试表 
CREATE TABLE my_table ( 
    id INT,
    map_column MAP<STRING, INT>
); 
-- 插入测试数据 
INSERT INTO my_table VALUES
    (1, map("key1", 1)), 
    (2, map("key2", 2)); 
-- 查询语句 
SELECT 
    id, 
    key, 
    value 
FROM 
    my_table
LATERAL VIEW 
    explode(map_column) t AS key, value;

key键查询

select map_keys(smap) as smap_keys,map_keys(imap) as imap_keys
from temp_db.map_test;

value值查询

select map_values(smap) as s_values,map_values(imap) as i_values
from temp_db.map_test;

键值对查询

-- size(colName),返回对应列有多少个key-value
select size(imap) as pair_cnt
from temp_db.map_test;
STRUCT
-- 语法
create table tableName(
........
    colName struct<subName1:Type,subName2:Type,........>
........
)
UNIONTYPE

泛型俗称“标签”,使用<E>表示。泛型意味着编写的代码可以被很多不同类型的对象重用。而UNIONTYPE类似于Java中的泛型,可以保存指定数据类型中的任意一种。

-- 示例
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;

最后,本篇文章是基于我所学所知进行的知识总结,如有误论,虚心接受指正。参考文献是《Hadoop数据仓库实战》,感兴趣的小伙伴可以对其进行深入阅读。(2024/03/11)

  • 21
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值