# 💡 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'