Hive复杂数据类型

1、Array数据类型的使用

1.1、创建数据库表,以array作为数据类型

hive (hive_demo1)> create table stu_test(name array<string>,phone array<string>)
> row format delimited fields terminated by'\t'
> collection items terminated by',';
OK

1.2、在/opt/datas/test目录下创建stu_info.txt文件,并将文件内容导入hive的stu_test表中

[liupeng@tonyliu test]$ pwd
/opt/datas/test
[liupeng@tonyliu test]$ ls
person.txt stu_info.txt
[liupeng@tonyliu test]$ more stu_info.txt //创建数据并查看
小明,小王,小张 15975319964,18665851264,13278659963
tony, tom,jack 18677549911,15923458765,18665851989
[liupeng@tonyliu test]$
 
hive (hive_demo1)> load data local inpath'/opt/datas/test/stu_info.txt' into table stu_test;    //load数据到stu_test表中
Copying data from file:/opt/datas/test/stu_info.txt
Copying file: file:/opt/datas/test/stu_info.txt
Loading data to table hive_demo1.stu_test
Table hive_demo1.stu_test stats: [numFiles=1, numRows=0, totalSize=108, rawDataSize=0]
OK
Time taken: 0.439 seconds

1.3、查询stu_info表

hive (hive_demo1)> select * from stu_test;              //查看stu_test所有数据
OK
stu_test.name stu_test.phone
["小明","小王","小张"] ["15975319964","18665851264","13278659963"]
["tony"," tom","jack"] ["18677549911","15923458765","18665851989"]
Time taken: 0.057 seconds, Fetched: 2 row(s)

1.4、查询stu_info表中array数据类型字段的指定列

hive (hive_demo1)> select name[0],phone[0] from stu_test;    //显示stu_info中的name,phone arraylist中的第一个元素
OK
_c0 _c1
小明 15975319964
tony 18677549911
Time taken: 0.117 seconds, Fetched: 2 row(s)

 1.5、查询array数据类型字段的长度

hive (hive_demo1)> select name,size(phone) from stu_test;        //size()是用来判断长度的
OK
name _c1
["小明","小王","小张"] 3
["tony"," tom","jack"] 3
Time taken: 0.071 seconds, Fetched: 2 row(s) hive (hive_demo1)> select size(name),size(phone) from stu_test;
OK
_c0 _c1
3 3
3 3
Time taken: 0.08 seconds, Fetched: 2 row(s)

1.6、查询包含array数据类型字段指定列的一行数据

hive (hive_demo1)> select name[1],phone[1] from stu_test where array_contains(name,'小王'); //具体指定arraylist中第2个元素并指定符合条件的contains条目。
OK
_c0 _c1
小王 18665851264
Time taken: 0.079 seconds, Fetched: 1 row(s)

1.7、查看表结构

hive (hive_demo1)> desc stu_test;
OK
col_name data_type comment
name array<string>
phone array<string>
Time taken: 0.095 seconds, Fetched: 2 row(s)  

2、Map数据类型的使用

2.1、创建表的同时使用Map数据类型

//创建 per_test表
hive (hive_demo1)> create table per_test(name string,info map<string,string>)
> row format delimited fields terminated by'\t'
> collection items terminated by'\073' //因为我的数据字段分隔符中含有';',因为hdfs文件的的格式就是用分号隔开的。因此冲突情况下会报错。为了解决这个问题找到分号的asc码值 : http://blog.csdn.net/lxpbs8851/article/details/11525501

(其他字符有同样问题 也可以这样做)  找到的是073  那么将定义表的语句修改为:row format delimited fields terminated by '\073'  

                 > map keys terminated by':';
OK
Time taken: 0.09 seconds

2.2、在/opt/datas/test中编辑person.txt文件

[liupeng@tonyliu test]$ pwd
/opt/datas/test
[liupeng@tonyliu test]$ ls
person.txt stu_info.txt
[liupeng@tonyliu test]$ more person.txt
小明 年龄:18;身高:1米8;地址:北京
小红 年龄:30;身高:1米72;地址:上海
小李 年龄:27;身高:1米90;地址:深圳
[liupeng@tonyliu test]$   

2.3、将person.txt文件中的数据导入hive中的per_test表中

hive (hive_demo1)> load data local inpath'/opt/datas/test/person.txt'into table per_test;
Copying data from file:/opt/datas/test/person.txt
Copying file: file:/opt/datas/test/person.txt
Loading data to table hive_demo1.per_test
Table hive_demo1.per_test stats: [numFiles=1, numRows=0, totalSize=134, rawDataSize=0]
OK
Time taken: 0.269 seconds  

2.4、查询per_test表中全部数据

hive (hive_demo1)> select * from per_test;
OK
per_test.name per_test.info
小明 {"年龄":"18","身高":"1米8","地址":"北京"}
小红 {"年龄":"30","身高":"1米72","地址":"上海"}
小李 {"年龄":"27","身高":"1米90","地址":"深圳"}
Time taken: 0.049 seconds, Fetched: 3 row(s)

2.5、查询per_test表中数据

//取per_test表中某个字段的值(name)

hive (hive_demo1)> select name from per_test;
OK
name
小明
小红
小李
Time taken: 0.062 seconds, Fetched: 3 row(s) //取per_test表中某个字段的值(info)
//因为info在我们数据中有多个字段,中间是通过,号做了分割。因此直接取info的话会把所有字段返回。 hive (hive_demo1)> select info from per_test;
OK
info
{"年龄":"18","身高":"1米8","地址":"北京"}
{"年龄":"30","身高":"1米72","地址":"上海"}
{"年龄":"27","身高":"1米90","地址":"深圳"}
Time taken: 0.039 seconds, Fetched: 3 row(s)

  

//也可以指定具体字段,以及字段中子字段的value进行输出。子字段是通过指定key的值来识别并输出value的

hive (hive_demo1)> select name,info['年龄']from per_info;
OK
name _c1
小明 18
小红 30
小李 27
Time taken: 0.049 seconds, Fetched: 3 row(s) //同上,某个字段中也可以输出多个子字段的value值。通过指定key hive (hive_demo1)> select name,info['年龄'],info['身高'],info['地址']from per_info;
OK
name _c1 _c2 _c3
小明 18 1米8 北京
小红 30 1米72 上海
小李 27 1米90 深圳
Time taken: 0.051 seconds, Fetched: 3 row(s) 

3、Struct数据类型的使用

3.1、创建表的同时使用struct数据类型

hive (hive_demo1)> create table struct_info(
> id int,info struct<key:string,value:int>) //info为字段标示名,struct<key,value> key指定子字段的键,value指定子字段对应键的值
> row format delimited fields terminated by'.'
> collection items terminated by':';
OK
Time taken: 0.125 seconds

3.2、创建stu_struct.txt文件,并将文件数据导入到hive的stu_struct表中

[liupeng@tonyliu test]$ pwd
/opt/datas/test
[liupeng@tonyliu test]$ ls
person_map.txt stu_list.txt stu_struct.txt
[liupeng@tonyliu test]$ more stu_struct.txt
1.小明:90
2.小红:100
3.小方:70
4.小白:50
5.小兰:60
6.小花:85
[liupeng@tonyliu test]$
hive (hive_demo1)> load data local inpath'/opt/datas/test/stu_struct.txt'into table struct_info;
Copying data from file:/opt/datas/test/stu_struct.txt
Copying file: file:/opt/datas/test/stu_struct.txt
Loading data to table hive_demo1.struct_info
Table hive_demo1.struct_info stats: [numFiles=1, numRows=0, totalSize=73, rawDataSize=0]
OK
Time taken: 0.256 seconds

3.3、查询struct_info表中数据(全部查询,部分查询及子元素的查询)

(1) 显示全表

hive (hive_demo1)> select * from struct_info;
OK
struct_info.id struct_info.info
1 {"key":"小明","value":90}
2 {"key":"小红","value":100}
3 {"key":"小方","value":70}
4 {"key":"小白","value":50}
5 {"key":"小兰","value":60}
6 {"key":"小花","value":85}
Time taken: 0.059 seconds, Fetched: 6 row(s)

(2) 显示表中字段  

hive (hive_demo1)> select id from struct_info;   //显示id 这个字段的信息
OK
id
1
2
3
4
5
6
Time taken: 0.065 seconds, Fetched: 6 row(s)
hive (hive_demo1)> select info from struct_info; //显示info这个字段的信息
OK
info
{"key":"小明","value":90}
{"key":"小红","value":100}
{"key":"小方","value":70}
{"key":"小白","value":50}
{"key":"小兰","value":60}
{"key":"小花","value":85}
Time taken: 0.056 seconds, Fetched: 6 row(s) 

(3) 显示子字段key与value的字段信息

hive (hive_demo1)> select info.key from struct_info;     //显示key的信息
OK
key
小明
小红
小方
小白
小兰
小花
Time taken: 0.063 seconds, Fetched: 6 row(s)
hive (hive_demo1)> select info.value from struct_info; //显示value的信息
OK
value
90
100
70
50
60
85
Time taken: 0.056 seconds, Fetched: 6 row(s)

(4) 通过where条件语句过滤出指定显示的语句

hive (hive_demo1)> select id,info from struct_info where id=1;    //加上where条件语句显示其中1条指定信息
OK
id info
1 {"key":"小明","value":90}
Time taken: 0.112 seconds, Fetched: 1 row(s)

(5) 选择value作为范围取指定key的值

hive (hive_demo1)> select info from struct_info where info.key='小明';
OK
info
{"key":"小明","value":90}
Time taken: 0.042 seconds, Fetched: 1 row(s)

  

Hive 复杂数据类型的使用的更多相关文章

  1. 大数据时代的技术hive:hive的数据类型和数据模型

    在上篇文章里,我列举了一个简单的hive操作实例,创建了一张表test,并且向这张表加载了数据,这些操作和关系数据库操作类似,我们常把hive和关系数据库进行比较,也正是因为hive很多知识点和关系数 ...

  2. Hive 5、Hive 的数据类型 和 DDL Data Definition Language)

    官方帮助文档:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL Hive的数据类型 -- 扩展数据类型data_t ...

  3. hadoop笔记之Hive的数据类型

    Hive的数据类型 Hive的数据类型 前面说过,Hive是一个数据仓库,相当于一个数据库.既然是数据库,那么就必须能创建表,既然有表,那么当中就有列,列中就有对应的类型 总的来讲,hive的数据类型 ...

  4. Hive之数据类型

    Hive之数据类型   (本文是基于多篇文章根据个人理解进行的整合,参考的文章见末尾的整理) 数据类型 Hive支持两种数据类型,一类叫原子数据类型,一类叫复杂数据类型.原子数据类型包括数值型.布尔型 ...

  5. 《Hive编程指南》读书笔记 | 一文看懂Hive的数据类型和文件格式

    Hive支持关系型数据库中的大多数基本数据类型,同时也支持关系型数据库中很少出现的3种集合数据类型. 和大多数数据库相比,Hive具有一个独特的功能,那就是其对于数据在文件中的编码方式具有非常大的灵活 ...

  6. 【Kylin实战】Hive复杂数据类型与视图

    1. 引言 在分析广告日志时,会有这样的多维分析需求: 曝光.点击用户分别有多少? 标签能覆盖多少广告用户? 各个标签(标注)类别能覆盖的曝光.点击在各个DSP上所覆盖的用户数 -- 广告数据与标签数 ...

  7. hive[3] 数据类型和文件格式

    Hive 支持关系型数据库中的大多数据基本数据类型,同时也支持3种集合类型:   3.1 Hive 的基本数据类型 支持多种不同他度的整形和浮点型数据类型,具体如下(全都是保留字): tinyint ...

  8. Spark(Hive) SQL数据类型使用详解(Python)

    Spark SQL使用时需要有若干“表”的存在,这些“表”可以来自于Hive,也可以来自“临时表”.如果“表”来自于Hive,它的模式(列名.列类型等)在创建时已经确定,一般情况下我们直接通过Spar ...

  9. hive高级数据类型

    hive的高级数据类型主要包括:数组类型.map类型.结构体类型.集合类型,以下将分别详细介绍. 1)数组类型 array_type:array<data_type> -- 建表语句 cr ...

随机推荐

  1. js中top、clientTop、scrollTop、offsetTop的区别 文字详细说明版

    网页可见区域宽: document.body.clientWidth;网页可见区域高: document.body.clientHeight;网页可见区域宽: document.body.offset ...

  2. 为什么A经理的团队总是会陷入加班与救火之中

    最近在看一本名为<稀缺>的书,作者从行为经济学的角度解释了穷人为什么会更穷,忙碌的人越来越没有时间,节食的人总是失败.由于缺乏闲余导致的带宽负担会进一步导致稀缺,由于总是优先处理紧急的事情 ...

  3. note02-计算机网络

    2.物理层 通信系统模型(源->发送器->XXX->接收器->终),源发出数字信号,调制器编码为模拟信号,进行传输,解调器解码模拟信号为数字信号给终 信噪比,香农公式,C=B  ...

  4. PythonTip(2)

    结尾0的个数 描述: 给你一个正整数列表 L, 输出L内所有数字的乘积末尾0的个数.(提示:不要直接相乘,数字很多,相乘得到的结果可能会很大). 例如: L=[2,8,3,50], 则输出:2 n = ...

  5. LA 4731 蜂窝网络

    题目链接:https://vjudge.net/problem/UVALive-4731 题意: n 个 数,分成 w 组,求整个区间的数学期望的最小值: 一个区间的数学期望公式给出:一个区间的和 * ...

  6. CF498D Traffic Jams in the Land

    嘟嘟嘟 题面:有n条公路一次连接着n + 1个城市,每一条公路有一个堵塞时刻a[i],如果当前时间能被a[i]整除,那么通过这条公路需要2分钟:否则需要1分钟. 现给出n条公路的a[i],以及m次操作 ...

  7. Spring data jpa命名规范

    JPA命名规范 (sample与JPQL等效) Table 4. Supported keywords inside method names Keyword Sample JPQL snippet ...

  8. cascade DecodeBBox层

    https://zhuanlan.zhihu.com/p/36095768 我的推断,第二第三阶段应该不是把所有anchor进行bounding box regression,然后再选取当前条件下的所 ...

  9. Struts2后期(这框架目前正处于淘汰状态)

    Struts2第三天 课程回顾:Struts2框架的第二天 1. Servlet的API * ActionContext对象 * ServletActionContext对象 2. 结构类型的跳转 * ...

  10. django-auth认证模块

    ########django-auth认证模块######## auth模块:它是django自带的用户认证模块,帮我们解决了登陆,注册,注销,修改密码 等等一系列的操作,封装成一个个方法,方便我们使 ...