分区
// 查看分区
SHOW PARTITIONS FROM <表名>;
- State
- Partition Key
- Range
- Distribution Key
- Buckets
- Replication Num
- DataSize
- 使用时注意分区粒度不能太小,否则导致分区数量太多,很容易超过分区上限
-
超过分区上限可以删除部分不用的分区
-
数据模型
-
DUPLICATE KEY
- 原始数据分析
- 仅追加模式,如:日志、时序数据分析
- 示例
CREATE TABLE session_data ( visitor_id BIGINT, session_id BIGINT, visit_time DATETIME, city CHAR(255), province CHAR(255), ip CHAR(32), ) DUPLICATE KEY(visitor_id,session_id) -- 只用于指定排序列,相同 KEY 的行不会合并 DISTRIBUTED BY HASH(visitor_id,session_id) BUCKETS 10; -- 指定分桶策略、桶数量
-
AGGREGATE KEY
-
适合报表和多维业务分析
- 网站流量分析
- 数据报表多维分析
-
按照 KEY 和 VALUE 列指定的聚合函数,执行聚合
-
聚合函数
- SUM
- REPLACE
- REPLACE_IF_NOT_NULL
- MAX
- MIN
- HLL_UNION
- BITMAP_UNION
-
示例
CREATE TABLE site_visit( site_id INT, city_id INT, user_id INT, pv BIGINT SUM DEFAULT '0' ) AGGREGATE KEY(site_id,city_id,user_id) -- 相同 KEY 的记录,会按照 VALUE 列指定的聚合函数进行聚合 DISTRIBUTED BY HASH(site_id) BUCKETS 10;
-
-
UNIQUE KEY
-
适合有更新需求的分析业务
- 订单去重分析
- 实时同步更新
-
示例
CREATE TABLE sales_order( order_id INT, city_id INT, user_id INT, amount BIGINT DEFAULT '0' ) DUPLICATE KEY(order_id) -- 相同 KEY 的记录,新 VALUE 替换 旧 VALUE DISTRIBUTED BY HASH(site_id) BUCKETS 10;
-