Aggregate和Unique中的Rollup:
由于Unique是Aggregate中的一种特殊的形式且底层也是使用Aggregate中的替换函数实现的,所以这里只看Aggregate模型。
建模示例:
CREATE TABLE IF NOT EXISTS testdb.testtb
(
`id` BIGINT NOT NULL DEFAULT '0' COMMENT 'id',
`shop` BIGINT NOT NULL DEFAULT '0' COMMENT 'shop',
`city` BIGINT NOT NULL DEFAULT '0' COMMENT 'city',
`bizdate` date NOT NULL COMMENT 'bizdate',
`gmv` DECIMAL(20,4) REPLACE NOT NULL DEFAULT '0.0000' COMMENT 'gov产出',
`update_time` DATETIME REPLACE NOT NULL COMMENT '更新时间',
`create_time` DATETIME REPLACE NOT NULL COMMENT '创建时间',
`id` BIGINT REPLACE NOT NULL DEFAULT '0' COMMENT '主键'
)
ENGINE=olap
AGGREGATE KEY(`bizdate`,`city`, `shop`)
PARTITION BY RANGE(`bizdate`)()
DISTRIBUTED BY HASH(`city`)
PROPERTIES
(
"replication_num"="1",
"dynamic_partition.enable" = "true",
"dynamic_partition.time_unit" = "DAY",
"dynamic_partition.start"="-7",
"dynamic_partition.end"="3",
"dynamic_partition.prefix" = "p",
"dynamic_partition.buckets" = "8",
"dynamic_partition.start_day_of_day" = "1"
);
命令:
查看表结构信息 :DESC TABLE ALL;
添加 Rollup 表(需要查看用户的总消费):
ALTER TABLE testtb ADD ROLLUP rollup_shop (shop,gmv);
可以通过EXPLAIN来查看执行计划图
EXPLAIN SELECT shop, sum(gmv) FROM testtb;
查看Rollup是否创建成功:SHOW ALTER TABLE ROLLUP;
查看明细查询执行计划:explain select shop,gmv from testtb;
查看聚合查询执行计划:
explain select shop, sum(gmv) from testtb
Duplicate模型中的Rollup:
由于Duplicate模型中没有前缀索引,因此,只能使用Rollup进行列调整,来命中前缀索引。
前缀索引:
在查询时使用前缀索引的前缀进行查询会极大的提高查询效率
通过Rollup实现前缀索引的列排序:
可以通过在Base表上添加Rollup的方式重新调整列的排序,来达到调整前缀索引的目的。
而且在查询时还会优先匹配Rollup,因为前缀索引匹配度高
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有