当前位置:首页 > 行业动态 > 正文

hive一般存储什么数据类型

Hive主要存储结构化和半结构化数据,支持基础数据类型(INT/DOUBLE/STRING等)、复杂类型(ARRAY/STRUCT/MAP)、时间类型(DATE/TIMESTAMP)及二进制数据,适用于大规模离线数据分析

基础数据类型

类型分类 具体类型 说明 典型场景
数值型 TINYINT/SMALLINT/INT/BIGINT
FLOAT/DOUBLE/DECIMAL
TINYINT(1字节)、SMALLINT(2字节)、INT(4字节)、BIGINT(8字节)
FLOAT(单精度浮点)、DOUBLE(双精度浮点)
DECIMAL(高精度定点数,需指定精度)
用户ID(BIGINT)、传感器读数(DOUBLE)、金融计算(DECIMAL(18,4))
布尔型 BOOLEAN 取值TRUE/FALSE 状态标识(如交易成功/失败)
字符串型 STRING 变长字符序列,UTF-8编码 日志文本、JSON片段
时间型 TIMESTAMP 精确到纳秒的时间戳 事件时间记录(如2023-05-20 14:30:45.123456789)

复杂数据类型

ARRAY(数组)

  • 定义ARRAY<DATA_TYPE>
  • 特性:有序集合,元素类型一致
  • 示例ARRAY<STRING> 可存储[“hadoop”,”spark”,”flink”]
  • 应用:同一字段的多值存储(如用户标签列表)

MAPREX(映射)

  • 定义MAP<KEY_TYPE, VALUE_TYPE>
  • 特性:键值对集合,键唯一
  • 示例MAP<STRING, INT> 可存储{“age”:30, “score”:85}
  • 应用:配置项存储(如{“max_threads”:10, “timeout”:100})

STRUCT(结构体)

  • 定义STRUCT<field_name: DATA_TYPE, ...>
  • 特性:类似数据库记录,字段命名
  • 示例STRUCT<name:STRING, age:INT>
  • 应用:嵌套对象存储(如用户信息+地址信息)

JSON(原生JSON)

  • 定义JSON<...>(Hive 3.0+)
  • 特性:自动解析JSON文档为Struct
  • 示例:存储{"user":{"id":1001,"role":"admin"}}
  • 优势:无需预定义Schema,支持模式演进

特殊处理机制

  1. 动态分区插入
    分区字段需显式声明类型(如PARTITION (dt STRING)),但允许按目录结构自动创建分区。

  2. Schema Evolution(模式演进)

    hive一般存储什么数据类型  第1张

    • 添加字段:新字段默认允许NULL
    • 字段类型变更:需兼容(如INT→BIGINT,禁止DOUBLE→INT)
    • 删除字段:需设置TBLPROPERTIES ('skip.delete.column'='true')
  3. SerDe选择

    • LazySimpleSerDe:字符串类型自动推断分隔符
    • JsonSerDe:解析JSON字段(需指定ROW FORMAT SerDe
    • RegexSerDe:正则表达式解析日志文件

类型选择建议

场景需求 推荐类型 原因
海量ID存储 BIGINT 8字节节省空间,支持范围-9223372036854775808~9223372036854775807
精确小数计算 DECIMAL(18,4) 避免浮点误差,适合金融计算
半结构化日志 STRUCT<…> 通过json_tuple函数解析JSON字段
多值属性存储 ARRAY

如订单商品列表、用户兴趣标签

跨系统兼容性

源系统 Hive类型 转换规则
MySQL INT Hive INT 直接映射
Java Date Hive TIMESTAMP 需格式化为yyyy-MM-dd HH:mm:ss
Oracle CLOB Hive STRING 注意字符编码(建议UTF-8)
Protobuf Message STRUCT + BINARY 需自定义SerDe解析二进制协议

FAQs

Q1:Hive的STRING类型最多能存多少数据?
A1:理论上仅受HDFS块大小限制(默认128MB),但实际使用需考虑:

  1. Yarn容器内存限制(建议单行<10MB)
  2. Map端排序时的内存消耗
  3. 可通过set mapreduce.map.memory.mb=4096调整内存配置

Q2:如何判断是否该用ARRAY还是MAP?
A2:选择依据对比:
| 特性 | ARRAY | MAP |
|————-|———————-|———————-|
| 数据特征 | 有序集合 | 无序键值对 |
| 唯一性 | 允许重复元素 | Key必须唯一 |
| 访问方式 | 索引访问([0],[1]) | Key查找([‘key’]) |
| 适用场景 | 同类型多值(如标签) | 配置

0