Hive 的数据类型

基本类型

整型
  • TINYINT: 1字节整数,范围从 -128 到 127。
  • SMALLINT: 2字节整数,范围从 -32,768 到 32,767。
  • INT: 4字节整数,范围从 -2,147,483,648 到 2,147,483,647。
  • BIGINT: 8字节整数,范围从 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807。
布尔型
  • BOOLEAN: 真(TRUE)或假(FALSE)。
浮点型
  • FLOAT: 单精度浮点数,通常用于不需要高精度的情况。
  • DOUBLE: 双精度浮点数,提供更高的精度。
定点数
  • DECIMAL: 用户定义的精度和小数位数,适合金融计算等需要精确数值的场景。
字符型
  • STRING: 可变长度的字符串。
  • VARCHAR: 可变长度的字符串,需要指定最大长度。
  • CHAR: 固定长度的字符串,需要指定长度。
日期时间型
  • TIMESTAMP: 包含日期和时间,但不包含时区信息。
  • TIMESTAMP WITH LOCAL TIME ZONE: 包含日期、时间和时区信息。
  • DATE: 只包含日期部分。
二进制型
  • BINARY: 字节序列,适合存储二进制数据。

复合类型

结构体(Structs)
  • 结构体是由多个字段组成的数据类型,每个字段有自己的名称和类型。可以通过字段名访问结构体中的值。
映射(Maps)
  • 映射是一组键值对,键必须是唯一的。可以通过键访问映射中的值。
数组(Arrays)
  • 数组是一系列相同类型的元素集合。可以通过索引访问数组中的元素。

类型层次结构

Hive 的类型系统遵循一定的层次结构,允许某些类型之间的隐式转换:

  • Number 类型之间可以隐式转换(如 TINYINT 转换为 INT)。
  • STRING 可以隐式转换为 DOUBLE
  • BOOLEAN 可以隐式转换为 Number

时间戳注意事项

  • TIMESTAMP 不包含时区信息,适用于不需要考虑时区的场景。
  • TIMESTAMP WITH LOCAL TIME ZONE 包含时区信息,适用于需要精确时区的场景。、

假设我们有一个用户表 users,其结构如下:

sql 复制代码
CREATE TABLE users (
    id BIGINT,
    name STRING,
    gender CHAR(1),
    active BOOLEAN,
    created_at TIMESTAMP,
    attributes MAP<STRING, STRING>,
    address STRUCT<street: STRING, city: STRING, zip: STRING>
);

在这个表中:

  • id 是一个 8 字节的整数。
  • name 是一个可变长度的字符串。
  • gender 是一个固定长度为 1 的字符串。
  • active 是一个布尔值。
  • created_at 是一个时间戳。
  • attributes 是一个映射,键和值都是字符串。
  • address 是一个结构体,包含街道、城市和邮政编码。

下面是如何向 users 表中插入数据:

插入单行/多行数据

sql 复制代码
INSERT INTO users (id, name, gender, active, created_at, attributes, address)
VALUES (
    1,
    'John Doe',
    'M',
    TRUE,
    '2023-10-01 12:34:56',
    MAP('age', '30', 'email', 'john.doe@example.com'),
    NAMED_STRUCT('street', '123 Main St', 'city', 'Anytown', 'zip', '12345')
);
sql 复制代码
INSERT INTO users (id, name, gender, active, created_at, attributes, address)
VALUES 
    (1, 'John Doe', 'M', TRUE, '2023-10-01 12:34:56', MAP('age', '30', 'email', 'john.doe@example.com'), NAMED_STRUCT('street', '123 Main St', 'city', 'Anytown', 'zip', '12345')),
    (2, 'Jane Smith', 'F', FALSE, '2023-10-02 13:45:00', MAP('age', '28', 'email', 'jane.smith@example.com'), NAMED_STRUCT('street', '456 Elm St', 'city', 'Othertown', 'zip', '67890'));

注意事项

  1. 时间戳格式 :确保时间戳的格式正确,通常为 'YYYY-MM-DD HH:MM:SS'
  2. MAP 和 STRUCT :使用 MAPNAMED_STRUCT 函数来创建映射和结构体。
  3. 布尔值 :布尔值使用 TRUEFALSE
相关推荐
白日与明月3 天前
Hive-vscode-snippets
hive·hadoop·vscode
Sirius Wu3 天前
Hive的窗口函数
数据仓库·hive·hadoop
シ風箏3 天前
Hive【安装 01】hive-3.1.2版本安装配置(含 mysql-connector-java-5.1.47.jar 网盘资源)
java·hive·mysql
Sirius Wu4 天前
一文说清楚Hive
数据仓库·hive·hadoop·后端
Sirius Wu4 天前
一文说清楚Hive中常用的聚合函数[collect_list]
hive·hadoop·list
sheep85215 天前
HIVE实战处理(二十四)留存用户数
数据仓库·hive·hadoop
码字的字节5 天前
深入解析Hive SQL转MapReduce的编译原理:从AST抽象语法树到Operator执行树
hive·sql·ast·mapreduce·operator
O执O6 天前
JavaWeb笔记四
java·hive·hadoop·笔记·web
杨荧7 天前
基于大数据的旅游推荐系统 Python+Django+Hive+Vue.js
大数据·前端·vue.js·hive·python·开源·旅游
撰卢7 天前
Filter快速入门 Java web
java·前端·hive·spring boot