复合数据类型

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  与c++中的结构体类似,可通过‘.’访问每个域的值,比如Struct{first string,last string},可以通过name.first访问第一个成员  struct('john',‘doe’)
 map  存储key/value对,可通过['key']获取每个key的值,比如‘first’-->'john' 可通过name['last']获取last name。  map('first','john',last,'doe')
 array  同种类型的数据集合,从0开始索引,比如['john','doe'],可通过name[1]获取doe  array('john','doe')

使用实例

1.创建数据表

create table test1.employess1(
name string,
salary FLOAT,
subordinates ARRAY<string>,
deductions MAP<string,FLOAT>,
address STRUCT<stree:string,city:string,state:string,zip:int>)
partitioned by(country string,state string)
row format delimited
fields terminated by '\t'
COLLECTION ITEMS TERMINATED BY ','
MAP KEYS TERMINATED BY ':'
stored as textfile;
  • 'FIELDS TERMINATED BY' :字段与字段之间的分隔符
  • ''COLLECTION ITEMS TERMINATED BY' :一个字段各个item的分隔符
  • ‘MAP KEYS TERMINATED BY’ :key value分隔符

2.测试数据

John Doe    10000.0    Mary Sith,Todd Jones    Federal Taxes:0.2,State Taxes:0.1,Insurance:0.1    1 Michigan Ave.,Chicago,IL,60600
Mary Smith 80000.0 Bill King Federal Taxes:0.2,State Taxes:0.05,Insurance:0.1 100 Ontario St.,Chicago,IL,60601
Todd Jones 70000.0 Federal Taxes:0.15,State Taxes:0.03,Insurance:0.1 200 Chicago Ave.,Oak Park,NY,60700
Bill King 60000.0 Federal Taxes:0.15,State Taxes:0.03,Insurance:0.1 300 Obscure Dr.,Obscur,CA,60100

注意一下字段直接的区分标识和map中key和value的区分标识。

3.查询数据

ARRAY查询:

select subordinates[] from test1.employess1;

结果:

Mary Sith
Bill King
NULL
NULL

MAP查询:

select deductions['Federal Taxes'] from test1.employess1;

结果:

0.2
0.2
0.15
0.15

查看map中的键值对个数:

select size(deductions) from test1.employess1;

结果:

3
3
3
3

STRUCT查询:

select address.state,address.stree from test1.employess1;

结果:

IL    1 Michigan Ave.
IL 100 Ontario St.
NY 200 Chicago Ave.
CA 300 Obscure Dr.

最新文章

  1. CentOS中Mysql常用操作
  2. TWRP基于omnirom 6.0.1编译教程
  3. XML.03-DOM和SAX解析
  4. cocoaPads 安装及出现Analyzing dependencies之后卡死解决方案
  5. SLF4J日志门面
  6. SQLServer恢复表级数据
  7. XML格式以及相关libxml库学习
  8. 发布maven的web项目,tomcat显示已启动,但是访问出错
  9. css基础之 语法
  10. Week11(11月21日)
  11. 移动无边框窗体(设置标志位更流畅,或者发送WM_SYSCOMMAND和SC_MOVE + HTCAPTION消息)
  12. OAuth做webapi认证
  13. [转载自阿里丁奇]各版本MySQL并行复制的实现及优缺点
  14. Windows核心编程&amp;作业
  15. Python——装饰器
  16. 一个可以配置阴影方向和颜色的类 CardView 控件 SCardView
  17. Sublime Text 3 Mac常用快捷键与注意事项
  18. 使用yocs_cmd_vel_mux进行机器人速度控制切换
  19. 【Devops】【docker】【CI/CD】Jenkins源代码管理 添加gitlab项目地址,报错Failed to connect to repository : Error performing command: ls-remote -h git@192.168.92.130:8090/root/swapping.git HEAD
  20. 啰里吧嗦式讲解java静态代理动态代理模式

热门文章

  1. FireFox插件FirePHP调试PHP
  2. linux之挂载硬盘
  3. Centos 下面安装 docker
  4. 【vijos】1757 逆序对(dp)
  5. 【vijos】1789 String(组合计数+奇怪的题)
  6. vc6项目-vc8项目 转换日志
  7. 微软2016校园招聘4月在线笔试 hihocoder 1289 403 Forbidden
  8. 【机器学习】WIFI室内定位
  9. poj 1419(图的着色问题,搜索)
  10. linux中的etc目录