打怪升级之小白的大数据之旅(六十二)<Hive旅程第三站:Hive数据类型>
Posted GaryLea
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了打怪升级之小白的大数据之旅(六十二)<Hive旅程第三站:Hive数据类型>相关的知识,希望对你有一定的参考价值。
打怪升级之小白的大数据之旅(六十二)
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安装>
打怪升级之小白的大数据之旅(六十一)<Hive旅程第二站:Hive安装>