从历史数据构建每月快照视图
Posted
技术标签:
【中文标题】从历史数据构建每月快照视图【英文标题】:Building a monthly Snapshot VIEW from historical data 【发布时间】:2021-11-30 05:48:57 【问题描述】:我的历史历史数据如下:
我需要获取每个月末机会的 DB 视图,例如
将其实现为雪花视图的最佳方法是什么?
【问题讨论】:
【参考方案1】:有两部分,视图中的 SQL 和要使用的视图。
SQL 似乎是每个机会的“本月的最后一个值”,并且删除不正确,可以通过多种方式完成。
在我的脑海中,本月的最新值听起来像 WHERE 子句,比如针对 ROW_NUMBER:
SELECT last_modified_date,
opportunity,
amount
FROM table
WHERE deleted == false
AND ROW_NUMBER() OVER(PARTITON BY date_trunc('month', last_modified_date) ORDER BY last_modified_date DESC) = 1
这将保留您想要的值,然后我们需要将 last_modified_date 调整为该月的最后一天,这可以通过
SELECT dateadd('day', -1 ,dateadd('month', 1, date_trunc('month', last_modified_date))) as month_end
可以组合为:
SELECT dateadd('day', -1 ,dateadd('month', 1, date_trunced)) as month_end,
opportunity,
amount
FROM (
SELECT
date_trunc('month', last_modified_date) AS date_trunced
opportunity,
amount,
ROW_NUMBER() OVER(PARTITON BY date_trunced ORDER BY last_modified_date DESC) AS rn
FROM table
WHERE deleted == false
)
WHERE rn = 1
ORDER BY 1,2;
如果你有几百万行,你可以只创建一个普通视图,但是如果你有数十亿行和多年的数据,那么前几个月将会相当严重的流失,所以物化视图会会有所帮助,但我很确定您 cannot use a ROW_NUMBER in a materialized 视图,因此您可以手动构建“历史月份”表和“当前月份”视图,并将它们结合在一起,并在某个时期(如月份)将当前时期数据滚动到历史,因为它变得稳定。
【讨论】:
以上是关于从历史数据构建每月快照视图的主要内容,如果未能解决你的问题,请参考以下文章
在recyclerview kotlin中插入firebase快照
Rails:如何构建每天/每月/每年的统计数据或如何缺少与数据库无关的 SQL 函数(例如:STRFTIME、DATE_FORMAT、DATE_TRUNC)