hive学习笔记3 数据类型——hive的建表字段存储类型有哪些数据定义给建表所需的字段定义存储格式、取值范围、运算规则让 Hive 知道数据怎么存、占多大空间、能做什么计算、怎么去校验合法性。一、数值型数据Numeric Types1基础定义数值型数据限定了取值范围用来防止非法数据是指写入字段的数据不符合该字段定义的数据类型规则、取值范围、格式约束Hive 识别不出的数据例如字段定义 TINYINT范围 - 128~127写入 200数值越界即非法数据写入。以字节长度、值域严格区分用来约束数值大小又可细分为①TINYINT1 字节只能存 -128~127适合年龄、评分这种极小数字②SMALLINT2 字节±3 万多适合门店编号、小计数③INT4 字节常规 id、数量④BIGINT8 字节订单流水号、超大累计金额防止数值溢出报错。注如果把 200 存入 TINYINT会直接溢出报错要提前拦截脏数据。小汇总不同类型数据的存储空间、查询性能不同数值数据占用磁盘 / 内存字节不同合理选择可以压缩数据①小数字用 TINYINT 只占 1 字节不用统一占 8 字节的 BIGINT海量日志、明细表存储成本直接下降②浮点FLOAT4 字节单精度、DOUBLE8 字节双精度精度要求低时用 FLOAT 省空间③字符串CHAR定长、VARCHAR可变长、STRING无限长短固定文本用 CHAR短可变文本用 VARCHAR长文本用 STRING④复杂类型 ARRAY/MAP/STRUCT批量存储多值数据不用拆成多张表减少关联查询。注存储更小 → 磁盘 IO 更少 → MapReduce/Spark 查询速度更快二、日期型数据Date/Time Types1TIMESTAMPHive 0.8.0 开始支持①存储内容完整的时间戳包含年-月-日 时-分-秒.毫秒 例2026-07-04 15:30:28.123)②底层存储本质是距离UTC 1970-01-01 00:00:00 的毫秒数“Unix纪元”。③适用场景日志、埋点、订单创建 / 支付时间需要精确到时分秒毫秒需要做时间戳差值、毫秒级统计的场景。④特性支持和字符串、数字时间戳互相转换可通过函数substrtimestamp‘第几位开始’‘取几位数’提取年、月、日、时、分、秒、毫秒。2DATEHive 0.12.0 开始支持①存储内容只保存年月日不带时分秒标准格式yyyy-MM-dd示例2026-07-04②底层存储距离 1970-01-01 的天数占用空间比 TIMESTAMP 更小。③适用场景按天统计日活、每日销售额、日期维度分区不需要精确到小时只关心日期的业务④特性如果把 2026-07-04 12:30:00 写入 DATE 字段会自动截断时间只保留日期部分只能做天数加date_add减date_sub无法获取小时、分钟。3INTERVALHive 1.2.0 开始支持①作用专门表示时间间隔不是固定时间点是一段时长。②分类年月间隔INTERVAL ‘1’ YEAR、INTERVAL ‘3’ MONTH日时分秒间隔INTERVAL ‘2’ DAY、INTERVAL ‘5’ HOUR-- 当前时间 7天select current_date interval ‘7’ day;– 时间戳加2小时select timestamp ‘2026-07-04 10:00:00’ interval ‘2’ hour;③适用场景时间计算比如 “下单 30 分钟后超时”“会员有效期 1 年”④特性不能单独作为表字段存储只用于运算用来给 DATE/TIMESTAMP 做加减。三、字符串型数据String Types1)CHAR定长字符串①基础定义固定长度无论实际数据长度如何存储空间始终为定义的长度。若数据长度不足会用空格填充至指定长度②选择建议数据长度严格固定且查询频繁③储存性能读取快但可能浪费存储。2VARCHAR可变长字符串①基础定义可变长度仅占用实际数据长度所需的空间。不填充空格适合存储长度变化较大的数据如姓名、地址。比CHAR节省存储空间但在频繁更新时可能产生碎片②选择建议数据长度变化较大需节省存储空间③储存性能存储高效但更新频繁时可能影响性能。3STRING无限长或大文本①基础定义某些数据库如Hive、Spark SQL使用STRING表示可变长文本通常无长度限制所以被定义为万能型的应用数据类型在传统SQL数据库中类似类型可能是TEXT或LONGTEXT②选择建议使用STRING/TEXT存储超大文本或不确定长度的内容。适合存储大段文本如日志、文章内容③储存性能适合大文本但可能不支持索引或完整查询优化。四、杂项或混合型数据Misc Types1boolean布尔类型①布尔类型常用于条件判断、逻辑运算和控制流程中。例如在编程中布尔值用于决定是否执行某段代码。它仅包含两个可能的值true表示逻辑真false表示逻辑假。布尔运算包括与AND两个操作数都为 true 时结果为 true或OR至少一个操作数为 true 时结果为 true非NOT对操作数取反。②Hive 支持 BOOLEAN 数据类型用于存储逻辑值 TRUE 或 FALSE。可以直接在表中定义布尔列或在条件表达式中使用。CREATETABLEexample_boolean(idINT,is_activeBOOLEAN);2binary二进制①是一种数值系统基于 2 的幂次方只使用两个数字0 和 1。它是计算机中最基础的数据表示方式因为计算机的硬件如晶体管只能识别两种状态开1和关0。Binary 是数值系统0/1 用于数据表示和计算可以表示任意数值通过组合 0 和 1。②应用场景包括数据存储如文件、内存数据传输如网络协议数值计算如二进制算术③Hive 的 BINARY 类型用于存储二进制数据如字节数组。适用于存储原始字节流例如图片、序列化对象等。第一步—创建包含二进制列的表CREATETABLEexample_binary(idINT,dataBINARY);第二步—插入二进制数据需通过 Hive 函数或外部工具转换-- 使用 base64 编码字符串转换为二进制INSERTINTOexample_binaryVALUES(1,unhex(48656C6C6F));-- Hello 的十六进制表示第三步—复制插入查询二进制数据时可能需要转换SELECTid,hex(data)FROMexample_binary;注Boolean仅存储 TRUE/FALSE用于逻辑判断Binary存储任意字节流需特殊函数如 hex()、unhex()处理。五、复杂型数据Complex Types1ARRAY 下标取值①ARRAY 索引从 0 或 1 开始取决于系统实现通过 [n] 直接访问第 n 个元素如下语句SELECTarray_column[n]ASfirst_elementFROMtable;②explode 炸裂将 ARRAY 展开为多行每行包含一个元素。SELECTexplode(array_column)ASexploded_valueFROMtable;2MAP 按 key 取值通过 map[‘key’] 或 map.key 语法获取指定键的值。SELECTmap_column[name]ASname_valueFROMtable;键/值展开使用 explode 分离键和值为多行。SELECTkey,valueFROMtableLATERALVIEWexplode(map_column)explodedASkey,value;3STRUCT 按字段名取嵌套数据①通过 struct.field_name 或 struct[‘field_name’] 获取嵌套字段SELECTstruct_column.user_id,struct_column.address.cityFROMtable;注ARRAY/MAP 的索引或键若不存在可能返回 NULLSTRUCT 字段名需区分大小写。***总结***数据类型是 Hive 对字段的约束 、存储 、运算规范约束脏数据、节省存储空间、定义计算方式、保证数据精度、兼容多引擎交互是建表时最基础、直接影响性能和数据准确性的配置。

相关新闻

最新新闻

美赛建模实战:从问题解构到论文写作的完整方法论与避坑指南

美赛建模实战:从问题解构到论文写作的完整方法论与避坑指南

1. 项目概述:从“找思路”到“建体系”的思维跃迁 每年一到美赛季,各大论坛、社群和搜索引擎里,“求思路”、“找参考文献”就成了最高频的词汇。我见过太多队伍,拿到赛题后第一反应不是拆解问题,而是慌慌张张地去网上…

2026/8/29 7:46:27
大文件上传与断点续传:分片原理与Spring Boot实战

大文件上传与断点续传:分片原理与Spring Boot实战

最近在面试候选人的时候,我经常问到一个问题:“你们项目里实现过大文件上传吗?断点续传是怎么做的?”这个问题看起来基础,但能把大文件上传从“能用”做到“好用”,其实涉及分片、并发、合并、去重、异常恢…

2026/8/29 7:46:27
别再把AI代理当打字机:agent-skills 的 20 个工程技能,从需求兜到上线

别再把AI代理当打字机:agent-skills 的 20 个工程技能,从需求兜到上线

别再把AI代理当打字机:agent-skills 的 20 个工程技能,从需求兜到上线 【免费下载链接】agent-skills Production-grade engineering skills for AI coding agents. 项目地址: https://gitcode.com/GitHub_Trending/agentskill/agent-skills 把需…

2026/8/29 7:46:27
纯前端健身重量进度计算器:1RM估算与训练数据管理实战

纯前端健身重量进度计算器:1RM估算与训练数据管理实战

上次去健身房训练,我发现自己还在用手机备忘录记录卧推重量,翻到上个月的记录还要一条条往上滑,更别提判断“这个月到底进步了多少”了。真正让我下决心做这个小工具,是某天想确认“硬拉 100kg 做 5 次”和“硬拉 90kg 做 8 次”到…

2026/8/29 7:46:27
LX4056工业级线性充电IC深度解析:30V耐压与NTC温控实战指南

LX4056工业级线性充电IC深度解析:30V耐压与NTC温控实战指南

1. 为什么LX4056在30V输入场景下成了“隐形刚需”——从充电IC选型盲区说起 我第一次在客户现场看到LX4056,是在一台工业手持终端的维修板上。那台设备用的是12V铅酸电池供电,但内部锂电池组标称电压才7.4V(2串),而前端…

2026/8/29 7:46:27
C++多线程编程:互斥量、锁管理与死锁预防实战指南

C++多线程编程:互斥量、锁管理与死锁预防实战指南

1. 从“数据打架”到“秩序维护者”:为什么我们需要互斥量 写C多线程代码,最刺激也最头疼的瞬间,莫过于程序运行结果时对时错,或者干脆在某个你意想不到的时刻直接崩溃。你反复检查逻辑,明明单线程跑得飞起&#xff0c…

2026/8/29 7:41:27