增量表 - 添加新事件并删除超过 180 天的事件

问题描述 投票:0回答:1

我需要创建一个表来存储其他两个表过去 180 天的事件和一些聚合。

我认为物化视图可以完美地工作,但似乎我遇到了一些限制:

增量物化视图 - 多次查询表的解决方法

我想删除超过 180 天的事件并仅添加过去一天的事件,因为查询过去 180 天的数据每次运行都会处理 15-16 TB。

我的计划是创建一个视图:

CREATE VIEW test_view AS
SELECT 
colA,
colB,
date_column,
count(*)
FROM table a
WHERE date_column >= current_date - 180
GROUP BY colA,
colB,
date_column
UNION ALL
SELECT 
colA,
colB,
date_column,
count(*)
FROM table b
WHERE date_column >= current_date - 180
GROUP BY colA,
colB,
date_column

然后将其用于具有相同结构的表“test_table”。

这个计划能成功吗:


DELETE * FROM test_table
WHERE date_column < current_date - 180;

INSERT INTO test_table
SELECT * FROM test_view
WHERE date_column = current_date - 1;

或者这样视图将查询所有 180 天,一切都将毫无意义?

sql google-bigquery query-optimization
1个回答
0
投票

删除超过 180 天的所有数据,然后插入最新一天的数据会产生大量数据移动,并且可能会很慢。因此,尝试创建一个专用表 test_table 来存储聚合数据,然后安排每天运行的作业,而不是视图:

DELETE FROM test_table WHERE date_column < current_date - 180

不用在视图中查询所有 180 天,而是直接从基表中插入过去一天的数据:

INSERT INTO test_table (colA, colB, date_column, count)
SELECT colA, colB, date_column, count(*) 
FROM table_a
WHERE date_column = current_date - 1
GROUP BY colA, colB, date_column
UNION ALL
SELECT colA, colB, date_column, count(*) 
FROM table_b
WHERE date_column = current_date - 1
GROUP BY colA, colB, date_column;
© www.soinside.com 2019 - 2024. All rights reserved.