一个简单介绍http://jimi68.iteye.com/blog/980573

一般的复杂介绍:http://songpo-ath-taobao-com.iteye.com/blog/1405136

hive提供了复合数据类型:

Structs: structs内部的数据可以通过DOT(.)来存取,例如,表中一列c的类型为STRUCT{a INT; b INT},我们可以通过c.a来访问域a

Maps(K-V对):访问指定域可以通过["指定域名称"]进行,例如,一个Map M包含了一个group-》gid的kv对,gid的值可以通过M['group']来获取

Arrays:array中的数据为相同类型,例如,假如array A中元素['a','b','c'],则A[1]的值为'b'



Struct使用

建表:

[plain] view
plain
copy

  1. hive> create table student_test(id INT, info struct<name:STRING, age:INT>)
  2. > ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
  3. > COLLECTION ITEMS TERMINATED BY ':';
  4. OK
  5. Time taken: 0.446 seconds

'FIELDS TERMINATED BY' :字段与字段之间的分隔符

''COLLECTION ITEMS TERMINATED BY' :一个字段各个item的分隔符 

导入数据:

[plain] view
plain
copy

  1. $ cat test5.txt
  2. 1,zhou:30
  3. 2,yan:30
  4. 3,chen:20
  5. 4,li:80
  6. hive> LOAD DATA LOCAL INPATH '/home/work/data/test5.txt' INTO TABLE student_test;
  7. Copying data from file:/home/work/data/test5.txt
  8. Copying file: file:/home/work/data/test5.txt
  9. Loading data to table default.student_test
  10. OK
  11. Time taken: 0.35 seconds

查询:

[plain] view
plain
copy

  1. hive> select info.age from student_test;
  2. Total MapReduce jobs = 1
  3. ......
  4. Total MapReduce CPU Time Spent: 490 msec
  5. OK
  6. 30
  7. 30
  8. 20
  9. 80
  10. Time taken: 21.677 seconds

Array使用

建表:

[plain] view
plain
copy

  1. hive> create table class_test(name string, student_id_list array<INT>)
  2. > ROW FORMAT DELIMITED
  3. > FIELDS TERMINATED BY ','
  4. > COLLECTION ITEMS TERMINATED BY ':';
  5. OK
  6. Time taken: 0.099 seconds

导入数据:

[plain] view
plain
copy

  1. $ cat test6.txt
  2. 034,1:2:3:4
  3. 035,5:6
  4. 036,7:8:9:10
  5. hive>  LOAD DATA LOCAL INPATH '/home/work/data/test6.txt' INTO TABLE class_test ;
  6. Copying data from file:/home/work/data/test6.txt
  7. Copying file: file:/home/work/data/test6.txt
  8. Loading data to table default.class_test
  9. OK
  10. Time taken: 0.198 seconds

查询:

[plain] view
plain
copy

  1. hive> select student_id_list[3] from class_test;
  2. Total MapReduce jobs = 1
  3. ......
  4. Total MapReduce CPU Time Spent: 480 msec
  5. OK
  6. 4
  7. NULL
  8. 10
  9. Time taken: 21.574 seconds

Map使用

建表:

[plain] view
plain
copy

  1. hive> create table employee(id string, perf map<string, int>)
  2. > ROW FORMAT DELIMITED
  3. > FIELDS TERMINATED BY '\t'
  4. > COLLECTION ITEMS TERMINATED BY ','
  5. > MAP KEYS TERMINATED BY ':';
  6. OK
  7. Time taken: 0.144 seconds

‘MAP KEYS TERMINATED BY’ :key value分隔符



导入数据:

[plain] view
plain
copy

  1. $ cat test7.txt
  2. 1       job:80,team:60,person:70
  3. 2       job:60,team:80
  4. 3       job:90,team:70,person:100
  5. hive>  LOAD DATA LOCAL INPATH '/home/work/data/test7.txt' INTO TABLE employee;

查询:

[plain] view
plain
copy

  1. hive> select perf['person'] from employee;
  2. Total MapReduce jobs = 1
  3. ......
  4. Total MapReduce CPU Time Spent: 460 msec
  5. OK
  6. 70
  7. NULL
  8. 100
  9. Time taken: 20.902 seconds
  10. hive> select perf['person'] from employee where perf['person'] is not null;
  11. Total MapReduce jobs = 1
  12. .......
  13. Total MapReduce CPU Time Spent: 610 msec
  14. OK
  15. 70
  16. 100
  17. Time taken: 21.989 seconds
  18. hive>
  19. <span style="font-family:Arial, Helvetica, sans-serif;"><span style="white-space: normal;">
  20. </span></span>

hive发杂数据结构的使用,struct,array,map的更多相关文章

  1. JavaScript Array map() 方法

    语法: array.map(function(currentValue,index,arr), thisValue) currentValue:必须.当前元素的值index:可选.当期元素的索引值ar ...

  2. 数组的方法 Array.map();Array.every()和Array.some();数组的indexof();检测是否是数组isArray(obj);

    数组的方法 Array.map(); 栗子: var a=[1,2,,3]; var b=a.map( function(value){return value*value} ); alert(b); ...

  3. 兼容低版本JS的Array.map方法

    前几天去别的公司面试遇到个这样的问题,兼容IE7下的Array.map方法,一脸蒙蔽.后面回来查了下资料发现.Array.map方法是ECMA-262 标准中新添加的方法,在低版本的JS中是木有的. ...

  4. go 实现struct转map

    从python转golang大约一个月了,对struct的使用还算顺手,但是很多时候还是会想念python的便捷.比如同时遍历两个字典,python使用for (x, y) in zip(map1, ...

  5. Array.from();Object.keys();Array.map()

    Array.from():方法从一个类似数组或可迭代对象创建一个新的数组形式: const bar = ["a", "b", "c"]; A ...

  6. 比较两个slice、struct或者map是否相等

    我们可以直接使用reflect.DeepEqual来比较两个slice.struct或者map是否相等 package main import ( "fmt" "refl ...

  7. Go语言高级特性总结——Struct、Map与JSON之间的转化

    Struct与Map之间互相转换 // Struct2Map convert struct to map func Struct2Map(st interface{}) map[string]inte ...

  8. JavaScript 对象Array,Map,Set使用

    for(int i = 0 :i < 3 ;i++ ){ //[重点说三遍] 在说明每个对象的用法之前,首先说明 JavaScript 对象的使用一定要注意浏览器的兼容性问题!尤其是IE的版本! ...

  9. 【Golang 接口自动化07】struct转map的三种方式

    背景 我们在前面介绍过怎么使用net/http发送json或者map数据,那么它能不能直接发送结构体数据呢?我们今天一起来学习结构体struct转map的三种方法,为后续做铺垫. struct转map ...

随机推荐

  1. Python pandas.io.data 模块迁移

    这段时间用pandas做数据分析, import pandas.io.data as web 然后得到下面的错误提示 "The pandas.io.data module is moved ...

  2. 疯狂的Django 之深度外键跨表查找之疯狂INNER JOIN

    定义Model: from django.db import models class Moreinfo(models.Model): weight = models.FloatField() hei ...

  3. 安卓开发遇到Error:Execution failed for task ':app:transformClassesWithDexForDebug'.

    问题如下: Error:Execution failed for task ':app:transformClassesWithDexForDebug'. com.android.build.api. ...

  4. Sublime Text 3下C/C++开发环境搭建

    Sublime Text 3下C/C++开发环境搭建 之前在Linux Mint 17一周使用体验中简单介绍过Sublime Text. 1.Sublime Text 3安装 Ubuntu.Linux ...

  5. Android开发学习之路--基于vitamio的视频播放器(二)

      终于把该忙的事情都忙得差不多了,接下来又可以开始good good study,day day up了.在Android开发学习之路–基于vitamio的视频播放器(一)中,主要讲了播放器的界面的 ...

  6. mxgraph进阶(四)mxGraph再启程

    mxgraph进阶(四)mxGraph再启程 前言   小论文Constructing User Interaction Behaviors Net from System Log. (AICE 20 ...

  7. springMVC源码分析--AbstractDetectingUrlHandlerMapping(五)

    上一篇博客springMVC源码分析--AbstractUrlHandlerMapping(三)中我们介绍了AbstractUrlHandlerMapping,主要介绍了一个handlerMap的ur ...

  8. Java中synchronized的使用实例

    一.使用场景 在负责后台开发的时候,很多时候都是提供接口给前端开发人员去调用,会遇到这样的场景: 需要提供一个领奖接口,每个用户名只能领取一次,我们可以将成功领取的用户在数据库用个标记保存起来.如果这 ...

  9. Spring之ORM模块

    ORM模块对Hibernate.JDO.TopLinkiBatis等ORM框架提供支持 ORM模块依赖于dom4j.jar.antlr.jar等包 在Spring里,Hibernate的资源要交给Sp ...

  10. Android自定义处理崩溃异常

    用过安卓手机的用户以及安卓开发者们会时长碰到程序异常退出的情况,普通用户遇到这种情况,肯定非常恼火,甚至会骂一生垃圾软件,然后卸载掉.那么开发者们在开发过程中遇到这种情况给怎么办呢,当然,你不可能世界 ...