当前位置:   article > 正文

hive之生产常用字段类型详解_hive字段类型

hive字段类型

1.基本字段类型:primitive_data

  1. 数值类型: intbigintfloatdoubleDECIMAL
  2. 字符串:string
  3. 布尔类型:truefalse  #生产用1/0代替
  4. 时间类型:dateTIMESTAMP 等  #生产用字符串代替,如:19010101010101

2.数组类型:arrary_data

存放相同类型的数据集合

  1. #创建一张包含array字段的表,array字段的分割符采用的是逗号
  2. create table hive_array(
  3. name string,
  4. work_locations array<string>
  5. )
  6. ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
  7. COLLECTION ITEMS TERMINATED BY ',';
  8. #加载数据
  9. load data local inpath '/home/hadoop/data/hive_array.txt' overwrite into table hive_array
  10. #直接查询
  11. hive> select * from hive_array;
  12. OK
  13. ruoze ["shanghai","hangzhou","beji"]
  14. jepson ["hangzhou","wuhan","shenzheng"]
  15. Time taken: 0.283 seconds, Fetched: 2 row(s)
  16. #查询数组中的某个字段包含某个元素
  17. select * from hive_array where array_contains(work_locations,"shanghai");
  18. #查询数组具体某个下标的结果
  19. select name,work_locations[2] from hive_array;
  20. #查询数组的大小
  21. select name,size(work_locations) from hive_array;

3 映射集合类型:map_data

存放相同类型的k-v键值对集合

  1. #创建一张包含map类型字段的表,map集合元分割符#,键值对的分隔符:
  2. create table hive_map(
  3. id int,
  4. name string,
  5. members map<string,string>,
  6. age int
  7. )
  8. ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
  9. COLLECTION ITEMS TERMINATED BY '#'
  10. MAP KEYS TERMINATED BY ':';
  11. #加载数据
  12. load data local inpath '/home/hadoop/data/hive_map.txt'
  13. overwrite into table hive_map;
  14. #直接查询
  15. hive> select * from hive_map;
  16. OK
  17. 1 zhansan {"father":"xiaoming","mother":"xiaohuang","brother":"xiaoxu"} 28
  18. 2 lis {"father":"mayun","mother":"huangyi","brother":"guanyu"} 22
  19. 3 wangwu {"father":"wangjianlin","mother":"ruhua","sister":"jianting"} 29
  20. 4 mayun {"father":"mayongzhen","mother":"angelababy"} 26
  21. #查询某个键的值
  22. select name,members["father"] from hive_map;
  23. #查询map字段的所有的key,所有的valuse。
  24. select map_keys(members) from hive_map;
  25. select map_values(members) from hive_map;
  26. #查询map集合大小
  27. select size(members) from hive_map;

4 结构体类型:struct-data

可存放不同类型的数据的集合

  1. #创建一张包含struct类型字段的表,struct有由string和int两种类型数据组成,分割符为:
  2. create table hive_struct(
  3. ip string,
  4. userinfo struct<name:string,age:int>
  5. )
  6. ROW FORMAT DELIMITED FIELDS TERMINATED BY '#'
  7. COLLECTION ITEMS TERMINATED BY ':';
  8. #加载数据
  9. load data local inpath '/home/hadoop/data/hive_struct.txt'
  10. overwrite into table hive_struct;
  11. #直接查询
  12. hive> select * from hive_struct;
  13. OK
  14. 192.168.1.1 {"name":"zhangsan","age":40}
  15. 192.168.1.2 {"name":"lisi","age":50}
  16. 192.168.1.3 {"name":"wangwu","age":60}
  17. 192.168.1.4 {"name":"zhaoliu","age":70}
  18. Time taken: 0.206 seconds, Fetched: 4 row(s)
  19. #查询结构体某个子节点信息
  20. select ip,userinfo.name,userinfo.age from hive_struct;

注意:非基本类型在生产中会被用到,至于对比基本类型性能如何,不是特别重要,因为最终都是由行式存储转为列式存储的大宽表,供生产计算和查询的(sql)。

 

 

 

 

 

 

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号