Hive 学习(四) Hive的数据类型

一, 数字类型

二,日期时间类型

三,字符串类型

四,混杂类型

五,复合类型

  5.1 array数据类型

  5.2 map类型

  5.3 struct类型

正文

一, 数字类型

如下表所示:

实例:

create table t_test(a string ,b int,c bigint,d float,e double,f tinyint,g smallint)

二,日期时间类型

示例:有如下数据:

1,zhangsan,1985-06-30
2,lisi,1986-07-10
3,wangwu,1985-08-09

建表:

那么,就可以建一个表来对数据进行映射
create table t_customer(id int,name string,birthday date)
row format delimited fields terminated by ‘,‘;
然后导入数据
load data local inpath ‘/root/customer.dat‘ into table t_customer;
然后,就可以正确查询

三,字符串类型

对于字符串类型,是比较常见的,在Hive中常用的就是String,主要原因是Java的数据类型。

四,混杂类型

五,复合类型

有一些数据有一些特点的结构,而hive比起常见的关系型数据库多了几个非常方便的数据类型,如下:

  5.1 array数据类型

  array实例,有如下数据:

战狼2,吴京:吴刚:龙母,2017-08-16
三生三世十里桃花,刘亦菲:痒痒,2017-08-20
普罗米修斯,苍老师:小泽老师:波多老师,2017-09-17
美女与野兽,吴刚:加藤鹰,2017-09-17

  分析:对于演员字段,如果是将其所有演员当做一个字符串来存储,在数据查询的时候就不是很方便,这时就可以利用hive的一个新的数据类型数组来进行建表如下:

-- 建表映射:
create table t_movie(movie_name string,actors array<string>,first_show date)
row format delimited fields terminated by ‘,‘
collection items terminated by ‘:‘;

-- 导入数据
load data local inpath ‘/root/hivetest/actor.dat‘ into table t_movie;
load data local inpath ‘/root/hivetest/actor.dat.2‘ into table t_movie;

  查询:

select movie_name,actors[0],first_show from t_movie;  # 通过下标取数据

+---------------------+------------------------+---------------------+--+
| t_movie.movie_name  |     t_movie.actors     | t_movie.first_show  |
+---------------------+------------------------+---------------------+--+
| 战狼2                | "吴京"                 | 2017-08-16          |
| 三生三世十里桃花       | "刘亦菲"               | 2017-08-20          |
| 普罗米修斯            | "苍老师"                | 2017-09-17          |
| 美女与野兽            | "吴刚"                 | 2017-09-17          |
+---------------------+------------------------+---------------------+--+
4 rows selected (0.141 seconds)

  其他用法:

select movie_name,actors,first_show
from t_movie where array_contains(actors,‘吴刚‘);   # array_contains的使用

+-------------+-------------------+-------------+--+
| movie_name  |      actors       | first_show  |
+-------------+-------------------+-------------+--+
| 战狼2         | ["吴京","吴刚","龙母"]  | 2017-08-16  |
| 美女与野兽       | ["吴刚","加藤鹰"]      | 2017-09-17  |
+-------------+-------------------+-------------+--+
2 rows selected (0.128 seconds)

select movie_name
,size(actors) as actor_number    # size()的使用
,first_show
from t_movie;

+-------------+---------------+-------------+--+
| movie_name  | actor_number  | first_show  |
+-------------+---------------+-------------+--+
| 战狼2         | 3             | 2017-08-16  |
| 三生三世十里桃花    | 2             | 2017-08-20  |
| 普罗米修斯       | 3             | 2017-09-17  |
| 美女与野兽       | 2             | 2017-09-17  |
+-------------+---------------+-------------+--+
4 rows selected (0.152 seconds)

  5.2 map类型

  map实例,有如下数据:

1,zhangsan,father:xiaoming#mother:xiaohuang#brother:xiaoxu,28
2,lisi,father:mayun#mother:huangyi#brother:guanyu,22
3,wangwu,father:wangjianlin#mother:ruhua#sister:jingtian,29
4,mayun,father:mayongzhen#mother:angelababy,26

  分析:上述数据,中间的字段在java中我们可以用map的key-value形式:

-- 建表映射上述数据
create table t_family(id int,name string,family_members map<string,string>,age int)
row format delimited fields terminated by ‘,‘
collection items terminated by ‘#‘    # 元素之间的分割符
map keys terminated by ‘:‘;   # key-value之间的分隔符

-- 导入数据
load data local inpath ‘/root/hivetest/fm.dat‘ into table t_family;

  查询练习:

select * from t_family;
+--------------+----------------+----------------------------------------------------------------+---------------+--+
| t_family.id  | t_family.name  |                    t_family.family_members                     | t_family.age  |
+--------------+----------------+----------------------------------------------------------------+---------------+--+
| 1            | zhangsan       | {"father":"xiaoming","mother":"xiaohuang","brother":"xiaoxu"}  | 28            |
| 2            | lisi           | {"father":"mayun","mother":"huangyi","brother":"guanyu"}       | 22            |
| 3            | wangwu         | {"father":"wangjianlin","mother":"ruhua","sister":"jingtian"}  | 29            |
| 4            | mayun          | {"father":"mayongzhen","mother":"angelababy"}                  | 26            |
+--------------+----------------+----------------------------------------------------------------+---------------+--+

-- 查出每个人的 爸爸、姐妹
select id,name,family_members["father"] as father,family_members["sister"] as sister,age
from t_family;
+-----+-----------+--------------+-----------+--+
| id  |   name    |     _c2      |    _c3    |
+-----+-----------+--------------+-----------+--+
| 1   | zhangsan  | xiaoming     | NULL      |
| 2   | lisi      | mayun        | NULL      |
| 3   | wangwu    | wangjianlin  | jingtian  |
| 4   | mayun     | mayongzhen   | NULL      |
+-----+-----------+--------------+-----------+--+
4 rows selected (0.136 seconds)

-- 查出每个人有哪些亲属关系
select id,name,map_keys(family_members) as relations,age
from  t_family;

+-----+-----------+--------------------------------+------+--+
| id  |   name    |           relations            | age  |
+-----+-----------+--------------------------------+------+--+
| 1   | zhangsan  | ["father","mother","brother"]  | 28   |
| 2   | lisi      | ["father","mother","brother"]  | 22   |
| 3   | wangwu    | ["father","mother","sister"]   | 29   |
| 4   | mayun     | ["father","mother"]            | 26   |
+-----+-----------+--------------------------------+------+--+
4 rows selected (0.129 seconds)

-- 查出每个人的亲人名字
select id,name,map_values(family_members) as relations,age
from  t_family;

+-----+-----------+-------------------------------------+------+--+
| id  |   name    |              relations              | age  |
+-----+-----------+-------------------------------------+------+--+
| 1   | zhangsan  | ["xiaoming","xiaohuang","xiaoxu"]   | 28   |
| 2   | lisi      | ["mayun","huangyi","guanyu"]        | 22   |
| 3   | wangwu    | ["wangjianlin","ruhua","jingtian"]  | 29   |
| 4   | mayun     | ["mayongzhen","angelababy"]         | 26   |
+-----+-----------+-------------------------------------+------+--+
4 rows selected (0.132 seconds)

-- 查出每个人的亲人数量
select id,name,size(family_members) as relations,age
from  t_family;

+-----+-----------+------------+------+--+
| id  |   name    | relations  | age  |
+-----+-----------+------------+------+--+
| 1   | zhangsan  | 3          | 28   |
| 2   | lisi      | 3          | 22   |
| 3   | wangwu    | 3          | 29   |
| 4   | mayun     | 2          | 26   |
+-----+-----------+------------+------+--+
4 rows selected (0.138 seconds)

-- 查出所有拥有兄弟的人及他的兄弟是谁
-- 方案1:一句话写完
select id,name,age,family_members[‘brother‘]
from t_family  where array_contains(map_keys(family_members),‘brother‘);

+-----+-----------+------+---------+--+
| id  |   name    | age  |   _c3   |
+-----+-----------+------+---------+--+
| 1   | zhangsan  | 28   | xiaoxu  |
| 2   | lisi      | 22   | guanyu  |
+-----+-----------+------+---------+--+
2 rows selected (0.168 seconds)

-- 方案2:子查询
select id,name,age,family_members[‘brother‘]
from
(select id,name,age,map_keys(family_members) as relations,family_members
from t_family) tmp
where array_contains(relations,‘brother‘);

+-----+-----------+------+---------+--+
| id  |   name    | age  |   _c3   |
+-----+-----------+------+---------+--+
| 1   | zhangsan  | 28   | xiaoxu  |
| 2   | lisi      | 22   | guanyu  |
+-----+-----------+------+---------+--+
2 rows selected (0.168 seconds)

  5.3 struct类型

  struct示例,有如下数据:

1,zhangsan,18:male:深圳
2,lisi,28:female:北京
3,wangwu,38:male:广州
4,赵六,26:female:上海
5,钱琪,35:male:杭州
6,王八,48:female:南京

  分析:上述数据分为两部分,若用map和array都方便,我们可以吧第二部分看做是一个对象。

  建表:

drop table if exists t_user;
create table t_user(id int,name string,info struct<age:int,sex:string,addr:string>)
row format delimited fields terminated by ‘,‘
collection items terminated by ‘:‘;

-- 导入数据
load data local inpath ‘/root/hivetest/user.dat‘ into table t_user;

  查询测试:

-- 查询每个人的id name和地址
select id,name,info.addr
from t_user;

+------------+--------------+----------------------------------------+--+
| t_user.id  | t_user.name  |              t_user.info               |
+------------+--------------+----------------------------------------+--+
| 1          | zhangsan     | {"age":18,"sex":"male","addr":"深圳"}    |
| 2          | lisi         | {"age":28,"sex":"female","addr":"北京"}  |
| 3          | wangwu       | {"age":38,"sex":"male","addr":"广州"}    |
| 4          | 赵六           | {"age":26,"sex":"female","addr":"上海"}  |
| 5          | 钱琪           | {"age":35,"sex":"male","addr":"杭州"}    |
| 6          | 王八           | {"age":48,"sex":"female","addr":"南京"}  |
+------------+--------------+----------------------------------------+--+
6 rows selected (0.163 seconds)

原文地址:https://www.cnblogs.com/tashanzhishi/p/10899395.html

时间: 2024-08-26 15:13:48

Hive 学习(四) Hive的数据类型的相关文章

Hive学习心得&amp;Hive的UDF

一:Hive基本介绍 Hive是建立在Hadoop上的数据仓库基础构架,它提供了一系列工具可以用来进行数据提取.转化.加载,这是一种可以存储.查询和分析存储在Hadoop中的大规模的数据机制. 使用语言:QL语言(类SQL查询语言).能处理内建的mapper和reducer无法完成的复杂分析工作. 1.Hive是SQL解析引擎,它将SQL语句转译成M/R Job然后再Hadoop执行. 2.Hive的表其实是HDFS的目录(/文件夹),按表名把文件夹区分开.如果是分区表,则分区值是子文件夹,可以

[hive学习翻译]Hive - Introduction

术语"大数据"用于大数据集的集合,包括大量,高速度和各种日益增加的数据.使用传统的数据管理系统,很难处理大数据.因此,Apache Software Foundation引入了一个称为Hadoop的框架来解决大数据管理和处理难题. HadoopHadoop是一个开放源代码框架,用于在分布式环境中存储和处理大数据.它包含两个模块,一个是MapReduce,另一个是Hadoop分布式文件系统(HDFS). MapReduce:它是一个并行编程模型,用于在大型商品硬件集群上处理大量的结构化,

python入门学习(四 Package以及数据类型)

1,Python自带(build-in)package(主要用import导入)和外部(external)package 1.1自带package举例: os包;  os.getwd() 2.利用easy_install和pip 来安装扩展文件 2.1 例如 pip install request(s) 3.python 数据类型 3.1 总体上讲: numerics,sequesences,mappings,classes,instances,exceptions. 3.2 Numerics

Scala系统学习(四):Scala数据类型

Scala与Java具有相同的数据类型,具有相同的内存占用和精度.以下是提供Scala中可用的所有数据类型的详细信息的表格: 序号 数据类型 说明 1 Byte 8位有符号值,范围从-128至127 2 Short 16位有符号值,范围从-32768至32767 3 Int 32位有符号值,范围从-2147483648至2147483647 4 Long 64位有符号值,范围从-9223372036854775808至9223372036854775807 5 Float 32位IEEE 754

前端学习(26)~js学习(四):基本数据类型vs引用数据类型

在上一篇文章中,我们介绍过,变量有以下数据类型: 基本数据类型(值类型):String 字符串.Number 数值.Boolean 布尔值.Null 空值.Undefined 未定义. 引用数据类型(引用类型):Object 对象. 本文,我们针对这两种类型,做进一步介绍.我们先来看个例子. 基本数据类型举例: var a = 23; var b = a; a++; console.log(a); // 打印结果:24 console.log(b); // 打印结果:23 上面的代码中:a 和

Hive学习路线图

Hive学习路线图 Hadoop家族系列文章,主要介绍Hadoop家族产品,常用的项目包括Hadoop, Hive, Pig, HBase, Sqoop, Mahout, Zookeeper, Avro, Ambari, Chukwa,新增加的项目包括,YARN, Hcatalog, Oozie, Cassandra, Hama, Whirr, Flume, Bigtop, Crunch, Hue等. 从2011年开始,中国进入大数据风起云涌的时代,以Hadoop为代表的家族软件,占据了大数据处

Hive学习路线图--张丹老师

前言 Hive是Hadoop家族中一款数据仓库产品,Hive最大的特点就是提供了类SQL的语法,封装了底层的MapReduce过程,让有SQL基础的业务人员,也可以直接利用Hadoop进行大数据的操作.就是这一个点,解决了原数据分析人员对于大数据分析的瓶颈. 让我们把Hive的环境构建起来,帮助非开发人员也能更好地了解大数据. 目录 Hive介绍 Hive学习路线图 我的使用经历 Hive的使用案例 1. Hive介绍 Hive起源于Facebook,它使得针对Hadoop进行SQL查询成为可能

Hive学习路线图(转)

Hadoophivehqlroadmap学习路线图 1 Comment Hive学习路线图 Hadoop家族系列文章,主要介绍Hadoop家族产品,常用的项目包括Hadoop, Hive, Pig, HBase, Sqoop, Mahout, Zookeeper, Avro, Ambari, Chukwa,新增加的项目包括,YARN, Hcatalog, Oozie, Cassandra, Hama, Whirr, Flume, Bigtop, Crunch, Hue等. 从2011年开始,中国

hive学习

大数据的仓库Hive学习 10期-崔晓光 2016-06-20  大数据   hadoop   10原文链接 我们接着之前学习的大数据来学习.之前说到了NoSql的HBase数据库以及Hadoop中的HDFS存储系统,可是我们发现这跟我们平时常用的关系型数据库有很大区别,为了使用方便,产生了针对大数据存储的数据仓库Hive. 一.是什么 1.概念 Hive 是一个基于 Hadoop 的开源数据仓库工具,用于存储和处理海量结构化数据. 它把海量数据存储于 hadoop 文件系统,而不是数据库,但提