本文介绍: 最近在使用starrocks来进行实时数据项目开发尝试使用了一下starrocks异步物化视图。使用版本: 3.1.2-4f3a2ee创建完成后,数据会进行初始化计算

最近在使用starrocks来进行实时数据项目开发尝试使用了一下starrocks异步物化视图
使用版本: 3.1.2-4f3a2ee

创建三个测试表, 注意只有test_mv_table1为分区表,其他两个都是非分区表:

CREATE TABLE `test_mv_table1` (
    `periodday` DATE NOT NULL COMMENT "",
    `fid` varchar(44) NOT NULL COMMENT "",
    `fnumber` int NULL COMMENT ""
) ENGINE=OLAP
PRIMARY KEY(`periodday`, `fid`)
COMMENT "数据1-分区"
PARTITION BY date_trunc('month', `periodday`)
DISTRIBUTED BY HASH(`fid`)
ORDER BY(`fid`, `fnumber`)
PROPERTIES (
    "replication_num" = "3",
    "in_memory" = "false",
    "enable_persistent_index" = "false",
    "replicated_storage" = "true"
);


CREATE TABLE `test_mv_table2` (
    `fid` varchar(44) NOT NULL COMMENT "",
    `fnumber` int NULL COMMENT ""
) ENGINE=OLAP
PRIMARY KEY(`fid`)
COMMENT "数据2-明细"
DISTRIBUTED BY HASH(`fid`)
ORDER BY(`fid`, `fnumber`)
PROPERTIES (
    "replication_num" = "3",
    "in_memory" = "false",
    "enable_persistent_index" = "false",
    "replicated_storage" = "true"
);


CREATE TABLE `test_mv_table3` (
    `fid` varchar(44) NOT NULL COMMENT "",
    `fnumber` int NULL COMMENT ""
) ENGINE=OLAP
PRIMARY KEY(`fid`)
COMMENT "数据3-明细"
DISTRIBUTED BY HASH(`fid`)
ORDER BY(`fid`, `fnumber`)
PROPERTIES (
    "replication_num" = "3",
    "in_memory" = "false",
    "enable_persistent_index" = "false",
    "replicated_storage" = "true"
);

分别在三张表中插入初始化数据:

insert into test_mv_table1 (periodday, fid, fnumber) values
("2023-09-01", "aaa", 111),
("2023-09-02", "bbb", 222),
("2023-09-03", "ccc", 333),
("2023-10-01", "aaa", 111),
("2023-10-02", "bbb", 222),
("2023-10-03", "ccc", 333),
("2023-11-01", "aaa", 111),
("2023-11-02", "bbb", 222),
("2023-11-03", "ccc", 333);


insert into test_mv_table2 (fid, fnumber) values
("aaa", 666),
("bbb", 777),
("ccc", 888);


insert into test_mv_table3 (fid, fnumber) values
("aaa", 22200),
("bbb", 33300),
("ccc", 44400);

创建物化视图物化视图分区只能对应一个基表:

CREATE MATERIALIZED VIEW view_mv_test
COMMENT 'test-物化视图'
PARTITION BY `periodday`
DISTRIBUTED BY HASH(`fnumber`)
REFRESH ASYNC
PROPERTIES (
    "replication_num" = "3",
    "excluded_trigger_tables"="
         test_mv_table2
        ,test_mv_table3",
    "session.exec_mem_limit"="9147483648",
    "session.query_timeout"="259000",
    "session.new_planner_optimize_timeout"="5000",
    "session.parallel_fragment_exec_instance_num"="10"
)
AS
select
    a.periodday as periodday,
    b.fnumber as fnumber,
    a.fid as fid,
    now() as insert_time
from test_mv_table1 a
left join test_mv_table2 b
on a.fid = t.fid
inner join test_mv_table3 c
on a.fid = c.fid
and b.fid = c.fid
;

注意这里创建的是自动刷新,也可以创建为定时刷新:

CREATE MATERIALIZED VIEW view_mv_test
COMMENT 'test-物化视图'
PARTITION BY `periodday`
DISTRIBUTED BY HASH(`fnumber`)
REFRESH ASYNC START('2023-11-20 10:00:00') EVERY (interval 1 minute) 
PROPERTIES (
    "replication_num" = "3",
    "excluded_trigger_tables"="
         test_mv_table2
        ,test_mv_table3",
    "session.exec_mem_limit"="9147483648",
    "session.query_timeout"="259000",
    "session.new_planner_optimize_timeout"="5000",
    "session.parallel_fragment_exec_instance_num"="10"
)
AS
select
    a.periodday as periodday,
    b.fnumber as fnumber,
    a.fid as fid,
    now() as insert_time
from test_mv_table1 a
left join test_mv_table2 b
on a.fid = t.fid
inner join test_mv_table3 c
on a.fid = c.fid
and b.fid = c.fid
;

创建完成后,数据会进行初始化计算

小结:

  • 基表有刷新了,物化视图进行刷新(前提是 test_mv_table2 和 test_mv_table3都没有变更的情况下,物化视图刷新对应分区)
  • 如果 test_mv_table2 和 test_mv_table3 存在变更,test_mv_table1基表未发生变更,此时不会触发刷新
  • 但是等到 test_mv_table1基表 发生变更的时候,会触发物化视图的全量刷新
  • 如果我只想让物化视图跟随基表的分区变化而刷新对应的分区,不管 test_mv_table2 和 test_mv_table3 的变更,这样该怎么实现呢?目前好像不支持

参考文档: https://docs.starrocks.io/zhcn/latest/using_starrocks/data_modeling_with_materialized_views
通过物化视图将事实表和多个维度表进行关联

  • 需要在物化视图的分区键中指定特定基表(通常是事实表)的分区键来实现物化视图的分区关联(PARTITION BY fact_tbl.col)。一个物化视图仅能与一个基表做分区关联
  • 当被关联基表的某个分区中的数据发生变化时,物化视图中相应的分区将被刷新,但不影响其他分区。
  • 当其他未被关联的基表发生变化时,默认情况下会刷新整个物化视图。
    然而,您可以选择忽略某些未关联表中的数据变化,以便在这些表中的数据发生变化时不刷新物化视图。

这种分区关联可以支持多种业务场景

注意这里维度表的更新,是会触发整个物化视图的更新

原文地址:https://blog.csdn.net/qq_36039236/article/details/134648048

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_21468.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注