hive发杂数据结构的使用,struct,array,map
一个简单介绍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使用
建表:
- hive> create table student_test(id INT, info struct<name:STRING, age:INT>)
- > ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
- > COLLECTION ITEMS TERMINATED BY ':';
- OK
- Time taken: 0.446 seconds
'FIELDS TERMINATED BY' :字段与字段之间的分隔符
''COLLECTION ITEMS TERMINATED BY' :一个字段各个item的分隔符
导入数据:
- $ cat test5.txt
- 1,zhou:30
- 2,yan:30
- 3,chen:20
- 4,li:80
- hive> LOAD DATA LOCAL INPATH '/home/work/data/test5.txt' INTO TABLE student_test;
- Copying data from file:/home/work/data/test5.txt
- Copying file: file:/home/work/data/test5.txt
- Loading data to table default.student_test
- OK
- Time taken: 0.35 seconds
查询:
- hive> select info.age from student_test;
- Total MapReduce jobs = 1
- ......
- Total MapReduce CPU Time Spent: 490 msec
- OK
- 30
- 30
- 20
- 80
- Time taken: 21.677 seconds
Array使用
建表:
- hive> create table class_test(name string, student_id_list array<INT>)
- > ROW FORMAT DELIMITED
- > FIELDS TERMINATED BY ','
- > COLLECTION ITEMS TERMINATED BY ':';
- OK
- Time taken: 0.099 seconds
导入数据:
- $ cat test6.txt
- 034,1:2:3:4
- 035,5:6
- 036,7:8:9:10
- hive> LOAD DATA LOCAL INPATH '/home/work/data/test6.txt' INTO TABLE class_test ;
- Copying data from file:/home/work/data/test6.txt
- Copying file: file:/home/work/data/test6.txt
- Loading data to table default.class_test
- OK
- Time taken: 0.198 seconds
查询:
- hive> select student_id_list[3] from class_test;
- Total MapReduce jobs = 1
- ......
- Total MapReduce CPU Time Spent: 480 msec
- OK
- 4
- NULL
- 10
- Time taken: 21.574 seconds
Map使用
建表:
- hive> create table employee(id string, perf map<string, int>)
- > ROW FORMAT DELIMITED
- > FIELDS TERMINATED BY '\t'
- > COLLECTION ITEMS TERMINATED BY ','
- > MAP KEYS TERMINATED BY ':';
- OK
- Time taken: 0.144 seconds
‘MAP KEYS TERMINATED BY’ :key value分隔符
导入数据:
- $ cat test7.txt
- 1 job:80,team:60,person:70
- 2 job:60,team:80
- 3 job:90,team:70,person:100
- hive> LOAD DATA LOCAL INPATH '/home/work/data/test7.txt' INTO TABLE employee;
查询:
- hive> select perf['person'] from employee;
- Total MapReduce jobs = 1
- ......
- Total MapReduce CPU Time Spent: 460 msec
- OK
- 70
- NULL
- 100
- Time taken: 20.902 seconds
- hive> select perf['person'] from employee where perf['person'] is not null;
- Total MapReduce jobs = 1
- .......
- Total MapReduce CPU Time Spent: 610 msec
- OK
- 70
- 100
- Time taken: 21.989 seconds
- hive>
- <span style="font-family:Arial, Helvetica, sans-serif;"><span style="white-space: normal;">
- </span></span>
hive发杂数据结构的使用,struct,array,map的更多相关文章
- JavaScript Array map() 方法
语法: array.map(function(currentValue,index,arr), thisValue) currentValue:必须.当前元素的值index:可选.当期元素的索引值ar ...
- 数组的方法 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); ...
- 兼容低版本JS的Array.map方法
前几天去别的公司面试遇到个这样的问题,兼容IE7下的Array.map方法,一脸蒙蔽.后面回来查了下资料发现.Array.map方法是ECMA-262 标准中新添加的方法,在低版本的JS中是木有的. ...
- go 实现struct转map
从python转golang大约一个月了,对struct的使用还算顺手,但是很多时候还是会想念python的便捷.比如同时遍历两个字典,python使用for (x, y) in zip(map1, ...
- Array.from();Object.keys();Array.map()
Array.from():方法从一个类似数组或可迭代对象创建一个新的数组形式: const bar = ["a", "b", "c"]; A ...
- 比较两个slice、struct或者map是否相等
我们可以直接使用reflect.DeepEqual来比较两个slice.struct或者map是否相等 package main import ( "fmt" "refl ...
- Go语言高级特性总结——Struct、Map与JSON之间的转化
Struct与Map之间互相转换 // Struct2Map convert struct to map func Struct2Map(st interface{}) map[string]inte ...
- JavaScript 对象Array,Map,Set使用
for(int i = 0 :i < 3 ;i++ ){ //[重点说三遍] 在说明每个对象的用法之前,首先说明 JavaScript 对象的使用一定要注意浏览器的兼容性问题!尤其是IE的版本! ...
- 【Golang 接口自动化07】struct转map的三种方式
背景 我们在前面介绍过怎么使用net/http发送json或者map数据,那么它能不能直接发送结构体数据呢?我们今天一起来学习结构体struct转map的三种方法,为后续做铺垫. struct转map ...
随机推荐
- Docker 控制组
控制组(cgroups)是 Linux 内核的一个特性,主要用来对共享资源进行隔离.限制.审计等.只有能控制分配到容器的资源,才能避免当多个容器同时运行时的对系统资源的竞争. 控制组技术最早是由 Go ...
- PHP 验证码 浅析
拓展 背景图 imagecreatetruecolor imagecolorallocate imagepng imagedestoryimage 简易数字验证码 imagecolorallocate ...
- Dynamics CRM2013 从外部系统取到CRM系统的用户头像
CRM从2013开始引入了entityimage的概念,具体这个字段怎么设置的,图像是怎么上传的这里就不谈了.说实在的这玩意在项目中没啥用,所以也没去关注,直到最近遇到了个难题,要在外部系统去获取这个 ...
- Servlet - Listener、Filter、Decorator
Servlet 标签 : Java与Web Listener-监听器 Listener为在Java Web中进行事件驱动编程提供了一整套事件类和监听器接口.Listener监听的事件源分为Servle ...
- [安全]Back_Track_5 vm 版安装和使用
下载安装 下载使用国内的镜像 http://mirrors.ustc.edu.cn/kali-images/kali-1.0.9/ 我这里是vm9.0 下载之后解压,然后打开vm,然后 文件--&g ...
- JobTracker,TaskTracker简述
JobTracker 负责接收用户提交的作业,负责启动.跟踪任务执行.JobSubmissionProtocol是JobClient与JobTracker通信的接口.InterTrackerProto ...
- IMDG中的陷阱和问题
陷阱 使用cache API时,一个最重要的问题就是潜在的数据加载.因为IMDG提供的分布式集合也都是实现的JDK的Map.Set等接口,以JDK的Map为例,它接口规定put和remove返回被替换 ...
- 关于Python编程的一些问答
关于Python编程的一些问答 导语 大约1个月前,oschina.net和华章图书一起合作做了一个活动:OSC第51期高手问答--聊聊python那些事,来推广我参与撰写的书<编写高质量代码: ...
- Java并发框架——AQS阻塞队列管理(三)——CLH锁改造
在CLH锁核心思想的影响下,Java并发包的基础框架AQS以CLH锁作为基础而设计,其中主要是考虑到CLH锁更容易实现取消与超时功能.比起原来的CLH锁已经做了很大的改造,主要从两方面进行了改造:节点 ...
- Java基础---Java---IO流-----File 类、递归、删除一个带内容的目录、列出指定目录下文件夹、FilenameFilte
File 类 用来将文件或者文件夹封装成对象 方便对文件与文件夹进行操作. File对象可以作为参数传递给流的构造函数 流只用操作数据,而封装数据的文件只能用File类 File类常见方法: 1.创建 ...