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
相关推荐
像豆芽一样优秀13 小时前
Hive和Flink数据倾斜问题
大数据·数据仓库·hive·hadoop·flink
howard20051 天前
VMWare上搭建Hive集群
hive·hadoop
程序猿 董班长3 天前
springboot配置多数据源(mysql、hive)
hive·spring boot·mysql
XueminXu3 天前
Hive使用Tez引擎出现OOM的解决方法
hive·oom·tez·datagrip·container·outofmemory
KANGBboy6 天前
hive udf 执行一次调用多次问题
数据仓库·hive·hadoop
来杯雀巢咖啡7 天前
ubantu安装配置hive
数据仓库·hive·hadoop
chad__chang9 天前
HIVE的Window functions窗口函数【二】
数据仓库·hive·hadoop
張萠飛9 天前
hive on tez为什么写表时,要写临时文件到hdfs目录
hive·hadoop·hdfs
白日与明月9 天前
Hive中的with子句
数据仓库·hive
步行cgn10 天前
Servlet 注解:简化配置的完整指南
hive·hadoop·servlet