1.原子数据类型
tinyint
smallint
int
bigint
boolean
float
double
string -- 双引号和单引号都可以
timestamp
2.复杂数据类型
1)array 数组类型
array:用于存放相同数据类型的一组数据,使用该类型时一定要使用泛型 <泛型> array<string>
使用时需要指定分割符:
collection items ternaminated by ',' -- 指定集合中的每一个元素之间的分隔符
数组中元素的访问:
字段名[索引] -- 查询的时候如果没有当前下标的元素,则返回null
示例:
建表
create table myarray(id int,name string,workadd array<string>) row format delimited fields terminated by '\t' collection items terminated by ',';
导入数据
load data local inpath '/home/hadoop/mkmg/myarray.txt' into table myarray;
只取第一个元素(工作地点):
hive> select id,name,workadd[0] as wd1 from myarray;
OK
1 tom beijing
2 jim shanghai
3 marry guangzhou
4 john hangzhou
2)map 映射类型
用于存放k-v键值对的一组数据的集合,map中的每一个元素都是k-v,在指定map集合的时候,需要指定k,v的泛型 <string,int>
使用时需要指定分割符:
collection items ternaminated by ','
map keys terminated by ''; -- 指定每一个key-value之间法人分隔符。
映射中元素的访问:
may_map["键"]
示例:
原始数据文件
:
[hadoop@mycat01 mkmg]$ cat tb_map.txt
09504121001 zhangyanpeng age:23,sex:1
09504121025 wangzheng age:21,sex:1
09504121089 xiaoru age:20,sex:0
建表语句
create table mymap(sid string,name string,infos map<string,int>) row format delimited fields terminated by '\t' collection items terminated by ',' map keys terminated by ':';
加载文件数据到表
:
load data local inpath '/home/hadoop/mkmg/tb_map.txt' into table mymap;
取年龄单独成一个字段
hive> select sid,name,infos['age'] as age from mymap;
OK
sid name age
09504121001 zhangyanpeng 23
09504121025 wangzheng 21
09504121089 xiaoru 20
Time taken: 0.104 seconds, Fetched: 3 row(s)
3)struct 自定义类型
java 中的对象的结构,封装很多属性, struct<指定属性:类型,…>
info struct<name:String,age:int,address:stringg>
struct中元素访问:
mystructfield.name -- 即 对象.属性 的调用方式
原始文件数据:
09504121001 zhangyanpeng 17.50|100|beijing
09504121025 wangzheng 15.50|60|tianjing
09504121089 xiaoru 17.50|80|shandong
建表语句
create table mystruct(sid string,name string,perinfo struct<price:double,sum:int,place:string>) row format delimited fields terminated by '\t' collection items terminated by '|';
加载本地文件到表
load data local inpath '/home/hadoop/mkmg/tb_struct.txt' into table mystruct;
查询表数据
hive> select * from mystruct;
OK
mystruct.sid mystruct.name mystruct.perinfo
09504121001 zhangyanpeng {"price":17.5,"sum":100,"place":"beijing"}
09504121025 wangzheng {"price":15.5,"sum":60,"place":"tianjing"}
09504121089 xiaoru {"price":17.5,"sum":80,"place":"shandong"}
查询该员工的编号,姓名和卖出的产品价格和工作地点
hive> select sid,name,perinfo.price price,perinfo.place workadd from mystruct;
OK
sid name price workadd
09504121001 zhangyanpeng 17.5 beijing
09504121025 wangzheng 15.5 tianjing
09504121089 xiaoru 17.5 shandong