目录
正文一、基本数据类型
hive数据类型 java数据类型 长度 例子 INT int 4byte有符号整数 20 BIGINT long 8byte有符号整数 20 DOUBLE double 双精度浮点数 3.14159 STRING string 字符系列。可以指定字符集。可以使用单引号或者双引号 'now is the time' "for all good men" 对于hive的string类型相当于数据库的varchar类型。该类型是一个可变的字符串,它不能声明其中能存储多少个字符,理论上可以存储2GB的字符数
二、集合数据类型
数据类型 描述 语法示例 STRUCT 和c语言中的struct类似,都可以通过“点”符号访问元素内容。例如:如果某个列的数据类型是STRUCT{first STRING, last STRING},那么第一个元素可以通过字段first来引用 struct() MAP MAP是一组键-值对元组集合,使用数组表示法可以访问数据。例如:如果某个列的数据类型是MAP,其中键-值对时'frist'->'John'和'last'->'Doe',那么可以通过字段名{'last'}获取最后一个元素
map() ARRAY 数组是一组具有相同类型和名称的变量的集合,这些变量称为数组的元素,每个数组元素都有一个编号,编号从零开始。例如:数组值为['John','Doe'],那么第二个元素可以通过数组名[1]进行引用 Array()
例子,基于下面json格式的数据导入
{ "name": "songsong", "friends": ["bingbing", "lili"], //列表Array "children": { //键值Map "xiao song": 18, "xiaoxiao song": 19 } "address": { //结构Struct "street": "hui long guan", "city": "beijing" } } //创建本地测试文件test.txt 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 //建表语句 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' //行分隔符 //导入文本数据到测试表 load data local inpath "/opt/module/datas/test.txt" into table test //指定数组元素访问 select friends[1] from test //指定键值对访问 select children['xiao song'] from test //结构体访问 select address.city from test
MAP和ARRAY与Java中的相似,STRUCT与C语言中的struct类似,封装了一个命名字段集合
三、类型转化
hive的源自数据类型可以进行隐式转换,不会进行反向转换,除非使用CAST操作
隐式类型转换
- 任何整数类型都可以隐式地转换为一个更广的类型,如TINYINT可以转换成INT,INT可以转换成BIGINT
- 所有整数类型、FLOAT和STRING类型都可以隐式地转换成DOUBLE
- TINYINT、SMALLINT、INT都可以转换成FLOAT
- BOOLEA类型不可以转换成为其他任何类型
使用CAST操作显示进行数据类型转换
- 例如:CAST('1' AS INT)将把字符串‘1’转换成整数1;如果强制类型转换失败,如执行CAST('1' AS INT),表达式返回值为NULL