打怪升级之小白的大数据之旅(六十二)<hive旅程第三站:hive数据类型>(代码片段)

GaryLea GaryLea     2022-12-10     557

关键词:

打怪升级之小白的大数据之旅(六十二)

Hive旅程第三站:Hive数据类型

上次回顾

上一章,我们对Hive的安装进行了学习,本章正式学习Hive的相关操作,按照惯例,学习一个新的语言就要了解它的数据类型

数据类型

  • Hive的数据类型分为两大类,基本数据类型和集合数据类型,集合数据类型可以嵌套,所以它更加灵活多变
  • Hive的数据类型和我们学习的Java的数据类型基本相似,所以我们只需要记住一些特别的就可以轻松掌握它了

注释与语法规范

hive的注释有两种方式

  • 单行注释 --
  • 多行注释 /**/

HQL的语法规范(和Mysql中学习的一样)
(1)SQL 语言大小写不敏感。
(2)SQL 可以写在一行或者多行
(3)关键字不能被缩写也不能分行
(4)各子句一般要分行写。
(5)使用缩进提高语句的可读性。

基本数据类型

HIVEMySQLJAVA长度例子
TINYINTTINYINTbyte1byte有符号整数2
SMALINTSMALINTshort2byte有符号整数20
INTINTint4byte有符号整数20
BIGINTBIGINTlong8byte有符号整数20
BOOLEANboolean布尔类型,true或者falseTRUE FALSE
FLOATFLOATfloat单精度浮点数3.14159
DOUBLEDOUBLEdouble双精度浮点数3.14159
STRINGVARCHARstring字符系列。可以指定字符集。可以使用单引号或者双引号‘now is the time’ “for all good men”
TIMESTAMPTIMESTAMP时间类型
BINARYBINARY字节数组

对于Hive的基本数据类型,我们需要与java进行区分以下几个特别的类型

  • INT
  • BIGINT
  • DOUBLE
  • STRING

基本数据类型比较简单,我就不举栗子了,它跟我们mysql中的使用方式一样

集合数据类型

数据类型描述特点语法示例
STRUCTstruct类型类似集合类型,但它使用. 来访问元素内容个数可以不相同,但是类型相同struct<street:string, city:string>
MAPMAP是一组键-值对元组集合,使用数组表示法可以访问数据。例如,如果某个列的数据类型是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是我们大数据日常工作中必不可少的一个技能&#x... 查看详情

打怪升级之小白的大数据之旅(七十)<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世界打怪升级!注解非常的简单,但又大量的出现在源码中。希望通过该文章,能让大家看到注解不打怵,明白如何自定义注解,以及注解的作用,一眼就能粗略的理解该注... 查看详情