Hive 作为构建在 Hadoop 之上的数据仓库工具,其设计原则需要兼顾 Hadoop 生态特性、SQL 使用习惯、查询性能、可维护性,核心目标是高效存储、快速查询、易扩展、易管理。以下是 Hive 数据仓库设计的核心原则及落地实践:
Hive 本质是 OLAP 系统,不适合高频更新、删除、事务操作。
UPDATE / DELETE,单行操作✅ 正确场景:报表、统计分析、数据挖掘
❌ 错误场景:实时交易系统、CRUD 系统
遵循经典数仓分层,降低耦合、提升复用性:
| 层级 | 作用 | 典型表 |
|---|---|---|
| ODS | 原始数据 | 原始日志、原始业务表 |
| DWD | 明细层(清洗后事实) | 订单事实、用户行为 |
| DWS | 汇总层(轻度聚合) | 日活、订单汇总 |
| ADS | 应用层 | 报表、指标表 |
✅ 每层职责清晰,避免“大宽表一把梭”
Hive 设计理念:
✅ 事实表:按时间追加
✅ 维度表:全量/拉链表
| 表类型 | 适用场景 |
|---|---|
| 内部表 | Hive 管理数据,适合中间表 |
| 外部表 | 数据由外部系统管理,适合 ODS |
| 分区表 | 按时间、地区等查询条件 |
| 分桶表 | Join、采样、数据均匀分布 |
✅ ODS 层优先使用外部表 ✅ 事实表优先分区
分区是 Hive 性能的核心。
PARTITIONED BY (dt STRING)
| 场景 | 建议 |
|---|---|
| 日志类 | 按天 |
| 数据量小 | 按月 |
| 实时性高 | 按小时 |
⚠️ 避免:
用于优化 Join 和采样
CLUSTERED BY (user_id) INTO 32 BUCKETS
✅ 适合:
❌ 不适合:
Hive 推荐:
| 格式 | 特点 |
|---|---|
| ORC | Hive 原生,压缩强 |
| Parquet | 跨生态(Spark、Impala) |
✅ 优势:
STORED AS ORC
减少磁盘 IO 和网络传输:
TBLPROPERTIES ("orc.compress"="SNAPPY")
Hive 的“性能杀手”。
✅ 避免:
✅ 解决方案:
INSERT OVERWRITE✅ 示例:
order_fact:
order_id, user_id, product_id, dt, amount
✅ 示例:
dim_user:
user_id, name, city, start_date, end_date
宽表:
✅ 优点:查询简单
❌ 缺点:维护复杂、冗余大
WHERE dt = '2025-01-01'
etl_time、src_systemdwd_order_detail_df
dws_user_agg_d
分层清晰、分区合理、列式存储、避免小文件、建模规范、面向分析
如果你愿意,我可以:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。