数据仓库与 OLAPHive Partition
分区 是什么?
按目录切分数据(如 dt=2026-10-31),查询时只扫需要的目录
类比:文件柜按年份分抽屉,找 2026 年的只开一个抽屉
分区的本质是目录
建表时指定 `partitioned by (dt string)`,数据在 HDFS 上就是 `/table/dt=2026-10-31/` 这样的目录。查询带 `where dt=...` 时,Hive 直接跳过其他目录,这叫分区裁剪。
所以分区字段不是表里的普通列,而是路径的一部分——写数据时必须指定分区,否则数据无处可放。
粒度怎么定
按天是最常见的,数据量特别大可以按小时,数据量小按月。判断标准:单个分区目录的文件大小在几百 MB 到几 GB 之间比较健康。分区太细会产生大量小文件,压垮 NameNode。
动态分区
`insert overwrite ... partition(dt)` 可以从数据里自动推断分区值,写起来方便,但容易一次生成几千个分区。生产上要配 `hive.exec.max.dynamic.partitions` 限制,避免把集群写爆。