关键词:
打怪升级之小白的大数据之旅(六十二)
Hive旅程第三站:Hive数据类型
上次回顾
上一章,我们对Hive的安装进行了学习,本章正式学习Hive的相关操作,按照惯例,学习一个新的语言就要了解它的数据类型
数据类型
- Hive的数据类型分为两大类,基本数据类型和集合数据类型,集合数据类型可以嵌套,所以它更加灵活多变
- Hive的数据类型和我们学习的Java的数据类型基本相似,所以我们只需要记住一些特别的就可以轻松掌握它了
注释与语法规范
hive的注释有两种方式
- 单行注释
--
- 多行注释
/**/
HQL的语法规范(和Mysql中学习的一样)
(1)SQL 语言大小写不敏感。
(2)SQL 可以写在一行或者多行
(3)关键字不能被缩写也不能分行
(4)各子句一般要分行写。
(5)使用缩进提高语句的可读性。
基本数据类型
HIVE | MySQL | JAVA | 长度 | 例子 |
---|---|---|---|---|
TINYINT | TINYINT | byte | 1byte有符号整数 | 2 |
SMALINT | SMALINT | short | 2byte有符号整数 | 20 |
INT | INT | int | 4byte有符号整数 | 20 |
BIGINT | BIGINT | long | 8byte有符号整数 | 20 |
BOOLEAN | 无 | boolean | 布尔类型,true或者false | TRUE FALSE |
FLOAT | FLOAT | float | 单精度浮点数 | 3.14159 |
DOUBLE | DOUBLE | double | 双精度浮点数 | 3.14159 |
STRING | VARCHAR | string | 字符系列。可以指定字符集。可以使用单引号或者双引号 | ‘now is the time’ “for all good men” |
TIMESTAMP | TIMESTAMP | 时间类型 | ||
BINARY | BINARY | 字节数组 |
对于Hive的基本数据类型,我们需要与java进行区分以下几个特别的类型
- INT
- BIGINT
- DOUBLE
- STRING
基本数据类型比较简单,我就不举栗子了,它跟我们mysql中的使用方式一样
集合数据类型
数据类型 | 描述 | 特点 | 语法示例 |
---|---|---|---|
STRUCT | struct类型类似集合类型,但它使用. 来访问元素内容 | 个数可以不相同,但是类型相同 | struct<street:string, city:string> |
MAP | MAP是一组键-值对元组集合,使用数组表示法可以访问数据。例如,如果某个列的数据类型是MAP,其中键->值对是’first’->’John’和’last’->’Doe’,那么可以通过字段名[‘last’]获取最后一个元素 | key-value可以不相同,个数也可以不同 | map<string, int> |
ARRAY | 数组是一组具有相同类型和名称的变量的集合。这些变量称为数组的元素,每个数组元素都有一个编号,编号从零开始。例如,数组值为[‘John’, ‘Doe’],那么第2个元素可以通过数组名[1]进行引用 | 个数相同,类型相同 | array<string> |
下面通过示例来演示我们的集合数据类型
-
假设某表有如下一行,我们用JSON格式来表示其数据结构。数据的样子如下
"name": "songsong", "friends": ["bingbing" , "lili"], //列表Array, "children": //键值Map, "xiao song": 18, "xiaoxiao song": 19 "address": //结构Struct, "street": "hui long guan", "city": "beijing", "email": "10010"
-
下面我们根据上面的样子导入测试数据
# 创建本地测试文件,我放到了hive根目录下,并专门创建了一个存储数据的文件夹 # vim $HIVE_HOME/dbdata/test1.txt songsong,bingbing_lili,xiao song:18_xiaoxiao song:19,hui long guan_beijing_10010 yangyang,caicai_susu,xiao yang:18_xiaoxiao yang:19,chao yang_beijing_10011
-
数据解读
/* 共创建了两条数据,使用换行`\\n`进行区分,每条数据中,每个类型间的数据使用`,` 进行区分,使用_来区分当前类型间的两个数据 数据类型如下: name: string类型 friends: array类型 children: map类型 address: struct类型 */ # 第一条数据 songsong, bingbing_lili, xiao song:18_xiaoxiao song:19, hui long guan_beijing_10010 # 第二条数据 yangyang, caicai_susu, xiao yang:18_xiaoxiao yang:19, chao yang_beijing_10011
-
创建表,建表的参数我后面会详细讲解,大家先直接复制
create table test( name string, friends array<string>, children map<string, int>, address struct<street:string,city:string,email:int> ) row format delimited fields terminated by ',' collection items terminated by '_' map keys terminated by ':' lines terminated by '\\n';
-
导入数据到test表中
load data local inpath "/opt/module/hive/dbdata/test/test1.txt" into table test;
-
访问数据
-- 获取名字叫songsong的第二个朋友、songsong的孩子xiao song的年龄以及songsong的地址信息 select name, friends[1], children['xiao song'], address.city, address.street from test where name="songsong";
类型转换
-
在Hive中,它的原子数据类型是可以进行隐式转换的(原子数据类型指的就是基本数据类型)
-
隐式类型转换规则同样分为自动转换和强制转换:
-
自动转换
- 任何整数类型都可以隐式地转换为一个范围更广的类型,如TINYINT可以转换成INT,INT可以转换成BIGINT
- 所有整数类型、FLOAT和STRING类型都可以隐式地转换成DOUBLE
- TINYINT、SMALLINT、INT都可以转换为FLOAT
- BOOLEAN类型不可以转换为任何其它的类型
-
强制转换(采用关键字CAST)
- 例如CAST(‘1’ AS INT)将把字符串’1’ 转换成整数1;如果强制类型转换失败,如执行CAST(‘X’ AS INT),表达式返回空值 NULL
-
下面通过类型转换示例来体验一下
-- 自动转换 select '1'+2 -- 强制转换 select cast("1" as int) + 2; -- 转换失败的示例,会返回NULL select cast("a" as int) + 2;
总结
本章节主要对HQL的数据类型进行了介绍,为了便于大家以后查看,所以我将每个单独的知识点拆分发布,下一章就是对数据库、数据表的操作DDL操作介绍
打怪升级之小白的大数据之旅(六十九)<hive旅程第十站:hive的优化>(代码片段)
打怪升级之小白的大数据之旅(六十九)Hive旅程第十站:Hive的优化上次回顾上一章介绍了Hive的压缩与存储格式,本章节是Hive的一起其他优化方法Fetch抓取Fetch抓取是指,Hive中对某些情况的查询可以不必使用MapReduce计算从hive... 查看详情
打怪升级之小白的大数据之旅(六十五)<hive旅程第六站:hive的查询>(代码片段)
打怪升级之小白的大数据之旅(六十五)Hive旅程第六站:Hive的查询上次回顾经过前面的学习,我们已经可以初步使用Hive对数据的一些简单操作了,本章节是Hive的一个重点内容–查询查询HQL和我们前面学习的Mysql语法是一样... 查看详情
打怪升级之小白的大数据之旅(六十三)<hive旅程第四站:ddl操作>(代码片段)
打怪升级之小白的大数据之旅(六十三)Hive旅程第四站:DDL操作上次回顾上一章,我们学习了Hive的数据类型以及访问方式,本章节我们对数据库与数据表的操作进行学习DDL操作数据库操作的CURD数据库的操作和mysql相同,... 查看详情
打怪升级之小白的大数据之旅(六十八)<hive旅程第九站:hive的压缩与存储>(代码片段)
打怪升级之小白的大数据之旅(六十八)Hive旅程第九站:Hive的压缩与存储上次回顾上一章,我们学习完了hive的函数相关操作,到此,我们hive的大的知识点就全部介绍完毕了,当然了,还有一些细节我没有讲到... 查看详情
打怪升级之小白的大数据之旅(六十四)<hive旅程第五站:dml基本操作>(代码片段)
打怪升级之小白的大数据之旅(六十四)Hive旅程第五站:DML基本操作上次回顾上一章,我们学习了Hive的DDL操作,学会如何操作数据库、数据表后,本章我们就要开始学习如何将数据导入到表中,如何将数据从表中导... 查看详情
打怪升级之小白的大数据之旅(六十六)<hive旅程第七站:hive的分区表与分桶表>(代码片段)
打怪升级之小白的大数据之旅(六十六)Hive旅程第七站:Hive的分区表与分桶表上次回顾上一章,我们学习了Hive的查询相关语法,本章节我们学习一下分区表与分桶表分区表通过前面Hive的学习,我们知道,表在HDFS中... 查看详情
打怪升级之小白的大数据之旅(六十)<hive旅程中的始发站>(代码片段)
打怪升级之小白的大数据之旅(六十)Hive旅程中的始发站引言经过了前面Hadoop、MR、Java、MySQL以及Linux的洗礼,接下来我们就要进入到大数据中特别重要的一个知识点学习–Hive,Hive是我们大数据日常工作中必不可少的一个技能... 查看详情
打怪升级之小白的大数据之旅(七十)<hive旅程终点站:hive的综合案例>(代码片段)
打怪升级之小白的大数据之旅(七十)Hive旅程终点站:Hive的综合案例本章内容本章是Hive的最后一章,主要是通过一个案例来对我们前面所学的知识点进行一个实操总结,大家根据案例查漏补缺,哪里知识点不会就补一下... 查看详情
打怪升级之小白的大数据之旅(七十二)<flume进阶>(代码片段)
打怪升级之小白的大数据之旅(七十二)Flume进阶上次回顾上一章对Flume的基础知识点进行了分享,有了上一章的铺垫,本章就深入学习一下Flume的进阶知识点Flume的使用很简单,主要就是写配置文件,至于具体怎么配... 查看详情
打怪升级之小白的大数据之旅(七十二)<flume进阶>(代码片段)
打怪升级之小白的大数据之旅(七十二)Flume进阶上次回顾上一章对Flume的基础知识点进行了分享,有了上一章的铺垫,本章就深入学习一下Flume的进阶知识点Flume的使用很简单,主要就是写配置文件,至于具体怎么配... 查看详情
打怪升级之小白的大数据之旅(七十三)<flume高级>(代码片段)
打怪升级之小白的大数据之旅(七十三)Flume高级上次回顾上一章介绍了Flume的内部原理,本章就Flume的扩展知识进行讲解,本章的重点就是了解并学会使用Flume的自定义组件自定义组件在上一章介绍了内部原理,所以下... 查看详情
打怪升级之小白的大数据之旅(七十四)<初识kafka>(代码片段)
打怪升级之小白的大数据之旅(七十四)初识Kafka引言学完Flume之后,接下来将为大家带来Kafka相关的知识点,在工作中,Kafka和Flume经常会搭配使用,那么Kafka究竟是什么呢?让我们开始今天的内容吧Kafka地图惯例&... 查看详情
打怪升级之小白的大数据之旅(七十一)<hadoop生态:初识flume>(代码片段)
打怪升级之小白的大数据之旅(七十一)Hadoop生态:初识Flume上次回顾上一章,我们学习完了hive的内容,本章开始是Hadoop中经常使用的另外一个框架Flume初识Flume下面这个是flume的标志flume的中文是水槽,但我觉得将它... 查看详情
打怪升级之小白的大数据之旅(七十三)<flume高级>(代码片段)
打怪升级之小白的大数据之旅(七十三)Flume高级上次回顾上一章介绍了Flume的内部原理,本章就Flume的扩展知识进行讲解,本章的重点就是了解并学会使用Flume的自定义组件自定义组件在上一章介绍了内部原理,所以下... 查看详情
打怪升级之小白的大数据之旅(七十四)<初识kafka>(代码片段)
打怪升级之小白的大数据之旅(七十四)初识Kafka引言学完Flume之后,接下来将为大家带来Kafka相关的知识点,在工作中,Kafka和Flume经常会搭配使用,那么Kafka究竟是什么呢?让我们开始今天的内容吧Kafka地图惯例&... 查看详情
flask连接数据库打怪升级之旅
...一个学习经验,也就是我们今天分享的连接数据库部分的打怪升级之旅。希望可以为大家在学习Python的路上提供一些参考。初级阶段首先安装Mysql扩展包650)this.width=650; 查看详情
flask连接数据库打怪升级之旅
...、初级阶段 1.Mysql扩展包 2.建立数据库连接3.开启打怪升级之路 在日常开发中,连 查看详情
03注解是什么?——《android打怪升级之旅》(代码片段)
感谢大家和我一起,在Android世界打怪升级!注解非常的简单,但又大量的出现在源码中。希望通过该文章,能让大家看到注解不打怵,明白如何自定义注解,以及注解的作用,一眼就能粗略的理解该注... 查看详情