大数据知识体系
首页
数据结构与算法
  • JVM
  • Java
  • Scala
  • Python
设计模式
  • MySQL
  • Redis
  • HDFS
  • HBase
  • ClickHouse
  • ElasticSearch
  • Iceberg
  • Hudi
  • Spark
  • Flink
  • Hive
  • Yarn
  • Zookeeper
  • Maven
  • Git
  • 数据仓库
  • 用户画像
  • 指标体系
数据治理
关于
首页
数据结构与算法
  • JVM
  • Java
  • Scala
  • Python
设计模式
  • MySQL
  • Redis
  • HDFS
  • HBase
  • ClickHouse
  • ElasticSearch
  • Iceberg
  • Hudi
  • Spark
  • Flink
  • Hive
  • Yarn
  • Zookeeper
  • Maven
  • Git
  • 数据仓库
  • 用户画像
  • 指标体系
数据治理
关于
  • Spark

    • Spark 基础
    • Spark Core
    • Spark 存储体系源码分析
    • Spark RPC 通信源码分析
    • Spark RDD 源码分析
    • Spark Task 源码分析
    • Spark Stage 源码分析
    • Spark DAGScheduler 源码分析
    • Spark TaskScheduler 源码分析
    • Spark Shuffle
    • Spark AppendOnlyMap
  • Flink

    • Flink 概述
    • Flink 架构
    • Flink 快速入门
    • Flink 安装
    • Flink API
    • Flink 状态管理
    • Flink 架构介绍
    • Flink Window
    • Flink Time WaterMark
    • Flink Table Api
    • Flink Sql
    • Flink CEP
    • Flink 面试题
  • Hive

    • Hive 概述
    • Hive 安装及配置参数
    • Hive 客户端的使用
    • Hive 数据类型
      • 数据类型
        • 基本数据类型
        • 隐式转换
        • 显式转换
      • 复杂数据类型
    • Hive DDL
    • Hive 表类型
    • Hive DML
    • Hive DQL
    • Hive 内置函数
    • Hive UDF
    • Hive 视图
    • Hive 索引
    • Hive 事务
    • Hive 文件存储
    • Hive HQL 执行原理
    • Hive 数据倾斜
    • Hive 执行计划
    • Hive 调优
    • Hive 面试题
  • 数据处理
  • Hive
Will
2022-01-04
目录

Hive 数据类型

Hive 支持关系型数据库的绝大多数基本数据类型,同时也支持 4 种集合数据类型。

# 数据类型

有关数据类型的详细描述参见官网 (opens new window)

# 基本数据类型

数据类型 描述
TINYINT 1 byte,有符号整数,-128 ~ 127
SMALINT 2 byte,有符号整数,-32768 to 32767
INT/INTEGER 4 byte, 有符号整数,-2147483648 ~ 2147483647
BIGINT 8 byte,有符号整数,-9223372036854775808 ~ 9223372036854775807
FLOAT 4 byte,单精度浮点数
DOUBLE 8 byte,双精度浮点数
DECIMAL Hive 中的 DECIMAL 类型基于 Java 的 BigDecimal,它用于表示 Java 中不可变的任意精度十进制数字
NUMERIC 和 DECIMAL 类似,Hive 3.0.0 引入
TIMESTAMP 时间戳,支持具有可选纳秒精度的传统 UNIX 时间戳
DATE 日期,格式为 YYYY-MM-DD
INTERVAL 时间间隔
STRING 字符串
VARCHAR VARCHAR 与 STRING 类似,但是 STRING 存储变长的文本,对长度没有限制;varchar 长度上只允许在 1-65355 之间
CHAR Char 类型类似于 Varchar,但 CHAR 是固定长度的,也就是说比指定长度值短的值空缺部分会用空格填充,但在比较期间尾随空格并不重要。最大长度固定为 255。
BOOLEAN 布尔值
BINARY 字节数组,对应 Java 中的 byte[]类型

# 隐式转换

Hive 的数据类型是可以进行隐式转换的,类似于 Java 的类型转换。如用户在查询中将一种浮点类型和另一种浮点类型的值做对比,Hive 会将类型转换成两个浮点类型中值较大的那个类型,即:将 FLOAT 类型转换成 DOUBLE 类型;当然如果需要的话,任意整型会转化成 DOUBLE 类型。总的来说数据转换遵循以下规律:

  • 任何整数类型都可以隐式转换为一个范围更广的类型。tinyInt => int;int => bigint
  • 所有整数类型、float、string(都是数字)都可以隐式转换为 Double
  • tinyint、smallint、int => float
  • boolean 不会转换

# 显式转换

使用cast函数进行强制类型转换;如果强制类型转换失败,返回 NULL。

hive> select cast('aaa' as int);
OK
NULL
hive> select cast('123' as int);
OK
123
1
2
3
4
5
6

# 复杂数据类型

数据类型 描述
ARRAY 数组是一组具有相同类型和名称的变量的集合。这些变量称为数组的元素,每个数组元素都有一个编号,编号从零开始。例如,数组值为[‘John’, ‘Doe’],那么第 2 个元素可以通过数组名[1]进行引用
MAP MAP 是一组键-值对元组集合,使用数组表示法可以访问数据。例如,如果某个列的数据类型是 MAP,其中键->值对是’first’->’John’和’last’->’Doe’,那么可以通过字段名[‘last’]获取最后一个元素
STRUCT 和 c 语言中的 struct 类似,都可以通过“点”符号访问元素内容。例如,如果某个列的数据类型是 STRUCT{first STRING,last STRING},那么第 1 个元素可以通过字段.first 来引用
UNIONTYPE Hive 0.7.0 中引入了 UNIONTYPE 数据类型,但是在 Hive 中对此类型的完全支持仍然不完整

Array:

select array(1,2,3);

 -- 使用 [] 访问数组元素
select arr[0] from (select array(1,2,3) arr) tmp
1
2
3
4

Map:

select map('a', 1, 'b', 2, 'c', 3);

-- 使用 [] 访问map元素
select mymap["a"] from (select map('a', 1, 'b', 2, 'c', 3) as mymap) tmp;

-- 使用 [] 访问map元素。 key 不存在返回 NULL
select mymap["x"] from (select map('a', 1, 'b', 2, 'c',3) as mymap) tmp;
1
2
3
4
5
6
7

Struct:

select named_struct("name", "username1", "id", 7, "salary", 12880.68);

-- 使用 列名.字段名 访问具体信息
select userinfo.id from (select named_struct("name", "username1", "id", 7, "salary", 12880.68) userinfo) tmp;
1
2
3
4

UnionType:

select create_union(0, "zhansan", 19, 8000.88) uinfo;
1
上次更新: 2023/11/01, 03:11:44

← Hive 客户端的使用 Hive DDL→

Theme by Vdoing | Copyright © 2022-2023 Will 蜀ICP备2022002285号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式