analytics - OLAP 和操作数据的联接查询

标签 analytics data-warehouse olap oltp

我在数据库中管理具有此架构的工具列表:

[id] int PRIMARY
[name] varchar

每隔几秒,每个工具都会发出一次测量结果。我将使用以下架构将其保存在 OLAP 存储中:

[toolID] int
[time] timestamp
[measurement] int

(我们尚未选择 OLAP 存储,但由于数据量、语义和我们将运行的查询类型,假设我们需要一个)

如何查询测量值大于100的工具名称列表?挑战在于我需要连接来自 OLAP 和 OLTP 存储的数据。

选项 1 - 在 OLAP 中还保存每个测量的工具名称(非规范化)。问题是自测量以来工具名称可能已更改,我需要最新的。此外,每个工具可能还有更多详细信息(和详细数据),不确定每次测量都保存所有信息是否有意义。

选项 2 - OLAP 仅返回 ID 列表,然后我向 OLTP 发出查询以获取名称。这将需要具有许多嵌入 ID 的 SQL 查询,并且似乎不正确。

选项 3 - 每隔几分钟将所有 OLTP 数据同步到 OLAP。但 OLAP 工具并未针对更新进行优化(例如 Vertica),因此这似乎效率不高。

最佳答案

通常,在 OLAP/DW 系统中,选项 3 是首选,工具列表及其详细信息将存储在工具维度表中,测量结果将存储在测量事实表中。

如果,正如您在评论中提到的,当详细信息发生变化时,您不关心保存工具详细信息的历史记录,并且更新的频率和次数工具详细信息很小,那么我只更新工具维度中的记录,因为更新次数相对较少。

如果更新频率很小,但实际更新数量很大,那么简单地截断 Tool 维度并插入 OLTP 系统中的所有 Tool 记录可能会更容易、更快。在这种情况下,您需要确保有一种方法可以保留维度键,以便连接回已存储的事实测量值。如果您使用基于自动生成序列的代理键,这可能会很困难。

当工具详细信息的更新频率和数量很大时,真正的问题就会出现。在这种情况下,您必须退后一步,查看整个模型,并确定工具详细信息是否确实属于某个维度,或者它们是否值得拥有自己的事实表。

关于analytics - OLAP 和操作数据的联接查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16719411/

相关文章:

javascript - 以编程方式删除 Facebook 像素

iphone - Flurry Analytics似乎没有在iOS 4.2中记录事件

sql-server - 为什么 NULL 值在事实表中映射为 0?

sql-server - 帮助找出(近)实时多维数据查询的方法

mysql - 为什么使用 ROLAP 而不是普通的 MySQL?

r - 从 R 或 Nodejs 连接到 Analysis Services

asp.net-mvc - 在没有 Azure 资源/存储的自定义仪表板上显示 ApplicationInsights 指标

sql - 用于将数据库更改从开发数据库同步到生产的工具?

azure - 查找与 Azure Synapse 数据仓库中的存储过程相关的所有表

ios - 在不配置 Amazon Cognito 的情况下使用 Amazon Mobile Analytics