2022-12-14 ROLLUP物化视图的作用

2022-12-13  本文已影响0人  felix_feng

包括

  1. 修改前缀索引。我们可以使用物化视图来实现更少数据量的扫描,或者通过物化视图调整列顺序以命中前缀索引(明细模型也适用)。
  2. 物化视图就是StarRocks为明细模型打造的“预计算”方案,本质上也是“空间换时间”,但实现更为灵活。
  3. 删除Base表时,所有基于Base表的物化视图会被同步删除。
假设table11是一张销售记录明细表,存储了每个交易的交易id、销售员、售卖门店、销售时间、以及金额:
CREATE TABLE table11(
    record_id int,
    seller_id int,
    store_id int,
    sale_date date,
    sale_amt bigint
) distributed BY hash(record_id)
properties("replication_num" = "1");

明细模型表table11中会保留所有的明细数据,我们自然可以进行任意维度的分析。举个例子,如果我们需要对不同门店的销售量做分析,那么SQL写法为:
SELECT store_id, SUM(sale_amt) FROM table11 GROUP BY store_id;


例如针对上面的查询,我们就可以基于table11表创建一张“以售卖门店为分组,对相同售卖门店的销售额求和”的物化视图表table11_mv1。创建语句如下:
CREATE MATERIALIZED VIEW table11_mv1 AS
SELECT store_id, SUM(sale_amt)
FROM table11
GROUP BY store_id;



在创建物化视图后,当数据进入表table11时,StarRocks相当于在一直在进行物化视图中的查询,并将查询结果的数据落盘。不同于MySQL中的视图概念,物化视图中的数据是真实存储的。

关于物化视图的使用,当前还有一些注意事项:

1、当前物化视图只支持对单个表的聚合。目前支持的聚合函数有:COUNT、MAX、MIN、SUM、HLL_UNION和BITMAP_UNION。物化视图的聚合函数的参数仅支持单列,比如:sum(a+b)也是不支持的。

2、目前物化视图主要应用于明细模型,实现固定维度数据的预聚合。对于聚合模型,从预聚合的角度来讲没有创建物化视图的意义,但我们可以使用物化视图来实现更少数据量的扫描,或者通过物化视图调整列顺序以命中前缀索引(明细模型也适用)。

上一篇下一篇

猜你喜欢

热点阅读