数据类型
数字型
类型 | 长度 | 备注 |
---|---|---|
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 | – | – |
TIMESTAMP对应的时间格式为yyyy-MM-dd HH:MM:SS,即通过LOAD命令将文本加载到已创建的表中时,只有满足上述格式的内容才可以被正确解析,否则只能识别为NULL。
hive的TIMESTAMP是10位的,如果是13位,需要先截取前面10位然后转成yyyy-MM-dd HH:MM:SS
的格式,
select from_unixtime(cast(substr(1553184000488,1,10) as bigint),‘yyyy-MM-dd HH:mm:ss’) --2019-03-22 00:00:00
字符串类型
类型 | 长度 | 备注 |
---|---|---|
STRING | 最大2G | 字符串 |
VARCHAR | 字符数范围1 - 65535 | 长度不定字符串 |
CHAR | 最大的字符数:255 | 长度固定字符串 |
复杂类型
example
# 创建表
create table test(
name string,
friends array<string>,
children map<string,int>,
address struct<street:string,city:string>
)
row format delimited
fields terminated by ',' -- 列分隔符
collection items terminated by '_' -- MAP、STRUCT、ARRAY的元素之间分隔符
map keys terminated by ':' -- MAP中的key与value的分隔符
lines terminated by '\n'; -- 行分隔符
数据准备
songsong,bingbing_lili,xiao song:18_xiaoxiao song:19,hui long guan_beijing
yangyang,caicai_susu,xiao yang:18_xiaoxiao yang:19,chao yang_beijing
导入数据
load data local inpath '/usr/soft/module/data/test.txt' into table test;
查
select friends[1],children['xiao song'],address.city from test where name="songsong";
ARRAY
包含同类型元素的数组,索引从0开始 ARRAY。
例如:数组值为[‘John’, ‘Doe’],那么第2个元素可以通过数组名[1]进行引用。
MAP
字典 MAP<primitive_type, data_type>
例如,如果某个列的数据类型是MAP,其中键->值对是’first’->’John’和’last’->’Doe’,那么可以通过字段名[‘last’]获取最后一个元素
STRUCT
结构体 STRUCT<col_name : data_type [COMMENT col_comment], …>
UNIONTYPE
联合体 UNIONTYPE<data_type, data_type, …> 和c语言中的struct类似,都可以通过“点”符号访问元素内容。
例如,如果某个列的数据类型是STRUCT{prop1 STRING, prop2 STRING},那么第1个元素可以通过字段. prop1来引用