基本的数据类型
-
整数:TINYINT、SMALLINT、INT、BIGINT
-
小数:FLOAT、DOUBLE、DECIMAL
-
文本:STRING、CHAR、VARCHAR
-
布尔:BOOLEAN
-
二进制:BINARY
-
时间:DATE、TIMESTAMP、INTERVAL
数值型
名字 | 字节数 | 范围(2的次方对照) | 说明 |
---|---|---|---|
TINYINT | 1 | -128~127(-2^7~2^7-1) | 范围太小,基本不用 |
SMALLINT | 2 | -32768~32767 | 基本不用 |
INT | 4 | -2147483648 ~ 2147483647 | |
BIGINT | 8 | -9223372036854775808 ~ 9223372036854775807 | |
FLOAT | 4 | 单精度浮点数范围:-3.4028235E38 to 3.4028235E387,精度为7位。 | |
DOUBLE | 8 | 双精度浮点数范围:-1.7976E+308 to 1.797693E+308,精度为15或16位,比单精度浮点数float存储更大。 | |
DECIMAL | 最长可以存储长度为38位的小数 |
字符串
名字 | 说明 | 范围 |
---|---|---|
STRING | 可以无限大,和内存大小相关 | |
CHAR | 长度固定,不足使用空格补足 | 1~255 |
VARCHAR | 长度固定,超长自动截断,数据丢失 | 1~65535 |
日期
名字 | 格式 | 范围 |
---|---|---|
DATE | yyyy-MM-dd | 0000.01.01~9999.12.31 |
TIMESTAMP | yyyy-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)