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. 查看oracle固定目录下日志和trace文件大小脚本

    python刚入门,在Oracle官网看到个小脚本,感觉挺有意思,经过测试切实可行. [oracle@ycr python]$ more 5.py import datetimeimport osim ...

  2. Qt 制作2048小游戏

    相信大家都玩过2048把,下面是我用qt写得2048小游戏. 2048.pro HEADERS += \ Widget.h SOURCES += \ Widget.cpp \ main.cpp QT ...

  3. OO思想举例,控制翻转,依赖注入

    (转自kumaws,原帖地址:http://www.cnblogs.com/kumaws/archive/2009/04/06/from_interface_to_DependencyInjectio ...

  4. 【洛谷5286】[HNOI2019] 鱼(计算几何)

    点此看题面 大致题意: 给你\(n\)个点,让你求鱼形图的数量. 核心思路 首先,考虑到\(n\)这么小,我们可以枚举线段\(AD\),再去找符合条件的\(BC,EF\). 然后,不难发现\(BC\) ...

  5. 2018.10.17 学习如何使用Shiro

    参考学习https://www.javazhiyin.com/19502.html

  6. Maven Dependencies missing jar 解决

    在导入SVN项目之后发现Maven里面的pom.xml报错. 发现是Maven Dependencies 里面的jar包不完整. 我试过手动加入jar,但是不能成功,然后就又试着添加dependecn ...

  7. 学大伟业 Day 4 培训总结

    今天讲的全是dp... 不多废话,先看一道经典的模板LIS(最长不下降子序列) 一.LIS 给定一个长度为N的数列,求最长上升子序列 例:1 7 2 8 3 4 答案:1 2 3 4 代码: #inc ...

  8. Python基础—14-邮件与短信

    邮件与短信 邮件发送 简介: 邮件服务器.账户.密码 相关协议:SMTP.POP3.IMAP 默认TCP协议端口:25 用途:经常用在一个网站的注册激活.通知.找回密码等场景 库:smtplib 示例 ...

  9. Xcode 9.0 报错, Safe Area Layout Guide Before IOS 9.0

    Xcode 9.0 新建工程报错 xcode Safe Area Layout Guide Before IOS 9.0 如下图,在Builds for 选择iOS9.0 and Later,不勾选U ...

  10. span没有name属性

    <span id="test" name="测试数据">测试咯</span> 在eclipse中这么写发现会有警告提示.百度发现原来sp ...