为星型模式中的分辨率设置时间维度

Posted

技术标签:

【中文标题】为星型模式中的分辨率设置时间维度【英文标题】:Setting up Time Dimensions for Resolutions in a Star-Schema 【发布时间】:2020-01-23 15:11:53 【问题描述】:

我一直在阅读有关 OLAP 处理的架构类型,特别是星型模式概念。我目前正在建立一个用于测试的数据库。

我的情况

我有 750 个传感器,每个传感器每分钟都会将数据发布到 SQL 数据库。目前,我的方法是发布如果价值发生变化。进一步考虑这一点让我想知道它是否会在确定是否存在数据丢失与未更改的值时产生问题,并让我重新考虑计划发布。

插入传感器值的软件以2020-01-23 13:48:52 格式发布时间戳。除此之外,还会发布传感器名称和传感器值。所以,如果算上主键,我的事实表中有 4 列。

我知道我需要对我的数据进行一些中间处理(可能是按计划处理的表以使其符合架构,然后删除),但现在我试图保留这个高水平,一次解决一个问题。

这是我目前所设想的,但考虑到我需要的分辨率,我不知道如何处理时间维度。

我的问题

"目前,我的方法是发布 if 值发生变化。进一步考虑这一点让我想知道它是否会在确定是否存在数据丢失与未更改的值相比,让我重新考虑计划发布。"

这是识别数据丢失的一个有效问题还是有其他解决方法?

考虑到我需要的分辨率,采样时间维度应该是什么样的?

【问题讨论】:

【参考方案1】:

如果我正确理解您的情况,您记录的值代表某个时间点的某些系统状态。换句话说,您正在及时捕获系统的快照。在星型模式中,您应该使用"periodic snapshot fact table"。此类事实表捕获值,无论它们是否已更改,因为它们的粒度是日期/时间单位,而不是事务。

时间维度可以通过多种方式建模。我会做以下事情:

创建维度“日期”来处理日历日期。谷物:一个日历日。跨度:从您拥有数据之日起,到今天包括在内。

创建维度“时间”来处理一天中的时间。谷物:一分钟。跨度:24 小时(因此此表中的总记录为 60 分钟 * 24 小时)。

将日期和时间键添加到事实表。

我还将时间戳作为退化维度保留在事实表中,以便在需要时访问秒数。

【讨论】:

非常感谢,这很有意义。我现在明白这个概念了。

以上是关于为星型模式中的分辨率设置时间维度的主要内容,如果未能解决你的问题,请参考以下文章

SQLAlchemy 中的星型模式

数据仓库星型模式的维度表和事实表中的数据如何?

星型模式 - 外部标识符事实或维度?

如何使用 postgresql 为数据仓库星型模式制作简单的日维度表?

星型模式命名约定

星型模式设计的一般理解