Hive QL简介

Hive 是基于Hadoop 构建的一套数据仓库分析系统,它提供了丰富的SQL查询方式来分析存储在Hadoop 分布式文件系统中的数据,可以将结构化的数据文件映射为一张数据库表,并提供完整的SQL查询功能,可以将SQL语句转换为MapReduce任务进行运行,通过自己的SQL 去查询分析需要的内容,这套SQL 简称Hive SQL

通过Hive SQL,使不熟悉mapreduce 的用户很方便的利用SQL 语言查询,汇总,分析数据。而mapreduce开发人员可以把己写的mapper 和reducer 作为插件来支持Hive 做更复杂的数据分析。

Hive SQL与关系型数据库的SQL 略有不同,但支持了绝大多数的语句如DDL、DML 以及常见的聚合函数、连接查询、条件查询。HIVE不适合用于联机online)事务处理,也不提供实时查询功能。它最适合应用在基于大量不可变数据的批处理作业。

Hive 提供标准的 SQL 功能,包括SQL:2003,SQL:2011和SQL:2016 features 用于分析。

Hive 的 SQL 也可以通过用户定义函数(UDF),用户定义聚合(UDAF)和用户定义的 table 函数(UDTF)与用户 code 一起扩展。

官方文档参考:http://wiki.apache.org/hadoop/Hive/LanguageManual

Hive QL数据类型

请参考Hive DDL_数据类型(视频教程)

和传统的数据库技术类似,Hive提供了各种数据类型。 详情请参考官方手册

Hive的数据类型主要分为两类:基本数据类型和复杂数据类型。

基本数据类型

Hive中的各种基本数据类型有:

  • 数值类型:存储正负整数和小数。
  • 日期/时间类型:存储时间值。
  • 字符数据类型:将字母数字数据存储在字符串中。
  • 布尔数据类型:true或false。
  • 二进制数据类型:二进制数据的可变长度数组。

重点补充如下说明:

  • INTEGER在Hive 2.2.0 (HIVE-14950)中引入的,作为INT的同义词
  • Timestamp类型:代表特定的日期和时间值。它支持各种转换。作为整数提供的timestamp值会被解释为以秒为单位的UNIX timestamp;作为浮点数类型提供的timestamp值会被解释为一个以秒为单位的UNIX timestamp,带有小数精度;作为字符串提供的timestamp值会被解释为java.sql.Timestamp格式YYYY-MM-DD HH:MM:SS.fffffffff.
  • Date类型:Date类型用来表示timestamp的date部分,即YYYY-MM-DD格式. Date范围是0000-01-01到9999-12-31。Date类型只能在Date、Timestamp或String类型间进行转换
  • string类型:既可以使用单引号(')也可以使用双引号("). Hive在字符串中使用C风格的转义符。最大2G
  • varchar类型:长度在1和65535之间。当将一个字符串赋给varchar值时,如果超过了指定的长度,则执行“静默截断”
  • char类型:固定长度字符串,最大长度255。如果值的长度小于指定的长度,则尾部填充空格,以取得指定的长度。
  • 注意:varchar和char数据类型不能被用于非通用的User-Defined Function (UDF)或User-Defined Aggregate (UDA)函数.
  • boolean类型: 只接收true或false值;
  • binary类型:Binary是一个字节序列。它类似于许多关系数据库中的varbinary数据类型。binary数据类型被用于当一个记录有数百个列时,并且用户仅对其中一部分列感兴趣,并且不想操心其它列的准确类型信息时。在这种情况下,用户可以将这些列定义为此类型,这样的话Hive将不会解释这些列。它被用于在记录中包含任意类型,Hive并不会试图将它们解析为数值、字符串等。

复杂数据类型

Hive还支持许多复杂的集合数据类型。

复杂数据类型以集合形式存储数据,内部实现使用本地序列化和反序列化。

Hive具有如下4种复杂数据类型: Arrays, Maps, Structs, Unions。

  • array: 相同类型有序的数据元素集合。
  • map: 无序的key-value对集合。
  • struct: 类似C语言中的结构体,一个struct是一个对象,包含各种字段(可以是任意数据类型)。
  • uniontype: 同一字段不同的行存储不同数据类型的元素。

Hive包含有多个内置的函数来操作数组和map,如explode()函数。

Hive QL运算符

Hive支持各种内置的运算符。在Hive中有四种类型的运算符:

  • 算术运算符
  • 关系运算符
  • 逻辑运算符
  • 复杂运算符

算术运算符有:


关系运算符有:


逻辑运算符有:


复杂运算符有:


在Hive中,缺失的值由特定的NULL值表示。


《PySpark原理深入与编程实战》