Doris ROLLUP物化索引表
在 Apache Doris 中,ROLLUP
是一种用于数据聚合的 SQL 操作,它可以在不同的数据模型中使用,以提高查询效率。以下是一些使用 ROLLUP
的示例:
- Aggregate 和 Unique 模型中的 ROLLUP:
- 例如,如果你有一个表
example_site_visit2
,并且想要获取每个用户的总消费,你可以创建一个ROLLUP
表,只包含user_id
和cost
字段。这样,当你执行GROUP BY user_id
的查询时,Doris 会自动使用这个ROLLUP
表,从而减少需要扫描的数据量。
- Duplicate 模型中的 ROLLUP:
- 在 Duplicate 模型中,
ROLLUP
可以调整列顺序以匹配前缀索引,从而提高查询效率。例如,你可以创建一个ROLLUP
表,将age
和user_id
的顺序调换,这样在执行特定查询时,Doris 会优先选择这个ROLLUP
表,因为它的前缀索引匹配度更高。
- ROLLUP 的创建和使用:
- 你可以使用
ALTER TABLE
语句来添加或删除ROLLUP
。例如,添加一个ROLLUP
:
ALTER TABLE example_site_visit2 ADD ROLLUP rollup_cost_userid(user_id, cost);
- 查询时,Doris 会根据查询条件自动决定是否使用
ROLLUP
。例如,查询特定用户的消费总额:
SELECT user_id, SUM(cost) FROM example_site_visit2 GROUP BY user_id;
- 这个查询可能会使用到之前创建的
ROLLUP
表。
- 查看 ROLLUP 状态:
- 你可以使用
SHOW ALTER TABLE ROLLUP;
命令来查看ROLLUP
的创建状态,以确保它们已经完成并且可以使用。(确保创建rollup时base表中有数据)
- ROLLUP 的注意事项:
-
ROLLUP
的数据是独立物理存储的,创建的ROLLUP
越多,占用的磁盘空间也就越大。 -
ROLLUP
的数据更新与 Base 表是完全同步的。 - 查询能否命中
ROLLUP
的一个必要条件是,查询所涉及的所有列都存在于该ROLLUP
的列中。(where select)
- 聚合查询示例:
- 假设你有一个销售数据表,你可以创建一个
ROLLUP
来获取每个城市的销售总额:
ALTER TABLE sales ADD ROLLUP rollup_city(sale_date, prod_name, SUM(sale_nums));
- 然后执行查询:
SELECT sale_date, prod_name, SUM(sale_nums) FROM sales GROUP BY sale_date, prod_name;
- 这个查询可能会使用到
ROLLUP
表,以提高查询效率。