# 💡 Summary
什么是分区表?
分区表 = 按某个字段把数据分到不同的子目录 有点像 mysql [[分库分表]]的水平拆分?
dt = date(日期)
```sql
CREATE TABLE logs (...)
PARTITIONED BY (dt STRING); -- dt = date(日期)
-- 分区目录:
/logs/dt=2024-01-01/
/logs/dt=2024-01-02/
/logs/dt=2024-01-03/
```
| 维度 | MySQL 分库分表 | Hive 分区表 |
| ----- | --------------- | ------------- |
| 拆分维度 | 任意字段(如 user_id)| 通常按时间/地区等 |
| 物理存储 | 多张独立的表 | 一张表的多个子目录 |
| 逻辑视图 | 需要中间件合并 | 原生支持,透明查询 |
| 查询路由 | 应用层或中间件 | Hive 自动路由 |
| 主要目的 | 解决写入压力 | 解决查询扫描 |
| 跨分片查询 | 复杂,需要合并 | 简单,WHERE 过滤即可 |
| 数据分布 | 均匀分布(hash)| 按业务维度(日期)|
# 🧩 Cues
# Notes
建表语句
```Java
CREATE TABLE events_log(
ts STRING, -- 普通字段
user_id INT, -- 普通字段
url STRING -- 普通字段
)
PARTITIONED BY (dt STRING); -- 分区字段(不在表字段列表里)
```
注意:
- ✅ dt 不在表字段列表里
- ✅ dt 是分区字段,存在目录名中(dt=2024-05-01)
- ✅ 查询时可以像普通字段一样用 WHERE dt='2024-05-01'